diff options
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r-- | crates/ra_hir/src/ids.rs | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index 43f0e81f9..99f04e4ef 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs | |||
@@ -1,11 +1,10 @@ | |||
1 | use ra_db::{SourceRootId, LocationIntener, FileId}; | 1 | use ra_db::{LocationIntener, FileId}; |
2 | use ra_syntax::{TreeArc, SyntaxNode, SourceFile, AstNode, ast}; | 2 | use ra_syntax::{TreeArc, SyntaxNode, SourceFile, AstNode, ast}; |
3 | use ra_arena::{Arena, RawId, impl_arena_id}; | 3 | use ra_arena::{Arena, RawId, impl_arena_id}; |
4 | 4 | ||
5 | use crate::{ | 5 | use crate::{ |
6 | HirDatabase, Def, Function, Struct, Enum, EnumVariant, ImplBlock, Crate, | 6 | HirDatabase, Def, Function, Struct, Enum, EnumVariant, ImplBlock, Crate, |
7 | Module, Trait, Type, Static, Const, | 7 | Module, Trait, Type, Static, Const, |
8 | module_tree::ModuleId, | ||
9 | }; | 8 | }; |
10 | 9 | ||
11 | #[derive(Debug, Default)] | 10 | #[derive(Debug, Default)] |
@@ -110,10 +109,9 @@ impl From<MacroCallId> for HirFileId { | |||
110 | pub struct MacroCallId(RawId); | 109 | pub struct MacroCallId(RawId); |
111 | impl_arena_id!(MacroCallId); | 110 | impl_arena_id!(MacroCallId); |
112 | 111 | ||
113 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 112 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
114 | pub struct MacroCallLoc { | 113 | pub struct MacroCallLoc { |
115 | pub(crate) source_root_id: SourceRootId, | 114 | pub(crate) module: Module, |
116 | pub(crate) module_id: ModuleId, | ||
117 | pub(crate) source_item_id: SourceItemId, | 115 | pub(crate) source_item_id: SourceItemId, |
118 | } | 116 | } |
119 | 117 | ||
@@ -139,14 +137,12 @@ impl_arena_id!(DefId); | |||
139 | #[derive(Clone, Debug, PartialEq, Eq, Hash)] | 137 | #[derive(Clone, Debug, PartialEq, Eq, Hash)] |
140 | pub struct DefLoc { | 138 | pub struct DefLoc { |
141 | pub(crate) kind: DefKind, | 139 | pub(crate) kind: DefKind, |
142 | pub(crate) source_root_id: SourceRootId, | 140 | pub(crate) module: Module, |
143 | pub(crate) module_id: ModuleId, | ||
144 | pub(crate) source_item_id: SourceItemId, | 141 | pub(crate) source_item_id: SourceItemId, |
145 | } | 142 | } |
146 | 143 | ||
147 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | 144 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] |
148 | pub(crate) enum DefKind { | 145 | pub(crate) enum DefKind { |
149 | Module, | ||
150 | Function, | 146 | Function, |
151 | Struct, | 147 | Struct, |
152 | Enum, | 148 | Enum, |
@@ -177,10 +173,6 @@ impl DefId { | |||
177 | pub fn resolve(self, db: &impl HirDatabase) -> Def { | 173 | pub fn resolve(self, db: &impl HirDatabase) -> Def { |
178 | let loc = self.loc(db); | 174 | let loc = self.loc(db); |
179 | match loc.kind { | 175 | match loc.kind { |
180 | DefKind::Module => { | ||
181 | let module = Module::from_module_id(db, loc.source_root_id, loc.module_id); | ||
182 | Def::Module(module) | ||
183 | } | ||
184 | DefKind::Function => { | 176 | DefKind::Function => { |
185 | let function = Function::new(self); | 177 | let function = Function::new(self); |
186 | Def::Function(function) | 178 | Def::Function(function) |
@@ -221,8 +213,7 @@ impl DefId { | |||
221 | 213 | ||
222 | /// For a module, returns that module; for any other def, returns the containing module. | 214 | /// For a module, returns that module; for any other def, returns the containing module. |
223 | pub fn module(self, db: &impl HirDatabase) -> Module { | 215 | pub fn module(self, db: &impl HirDatabase) -> Module { |
224 | let loc = self.loc(db); | 216 | self.loc(db).module |
225 | Module::from_module_id(db, loc.source_root_id, loc.module_id) | ||
226 | } | 217 | } |
227 | 218 | ||
228 | /// Returns the containing crate. | 219 | /// Returns the containing crate. |
@@ -232,8 +223,7 @@ impl DefId { | |||
232 | 223 | ||
233 | /// Returns the containing impl block, if this is an impl item. | 224 | /// Returns the containing impl block, if this is an impl item. |
234 | pub fn impl_block(self, db: &impl HirDatabase) -> Option<ImplBlock> { | 225 | pub fn impl_block(self, db: &impl HirDatabase) -> Option<ImplBlock> { |
235 | let loc = self.loc(db); | 226 | let module_impls = db.impls_in_module(self.loc(db).module); |
236 | let module_impls = db.impls_in_module(loc.source_root_id, loc.module_id); | ||
237 | ImplBlock::containing(module_impls, self) | 227 | ImplBlock::containing(module_impls, self) |
238 | } | 228 | } |
239 | } | 229 | } |