aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ids.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-23 20:14:13 +0000
committerAleksey Kladov <[email protected]>2019-01-24 10:29:19 +0000
commit3ab1519cb27b927074ed7fbbb18a856e6e7fabb8 (patch)
tree692c7a256604e188d38890966290bd1637d7dd60 /crates/ra_hir/src/ids.rs
parentcfb085ded8d61d7b744d0a83ecbb3da254f6ab9f (diff)
Change ids strategy
this is a part of larghish hir refactoring which aims to * replace per-source-root module trees with per crate trees * switch from a monotyped DedId to type-specific ids
Diffstat (limited to 'crates/ra_hir/src/ids.rs')
-rw-r--r--crates/ra_hir/src/ids.rs22
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 @@
1use ra_db::{SourceRootId, LocationIntener, FileId}; 1use ra_db::{LocationIntener, FileId};
2use ra_syntax::{TreeArc, SyntaxNode, SourceFile, AstNode, ast}; 2use ra_syntax::{TreeArc, SyntaxNode, SourceFile, AstNode, ast};
3use ra_arena::{Arena, RawId, impl_arena_id}; 3use ra_arena::{Arena, RawId, impl_arena_id};
4 4
5use crate::{ 5use 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 {
110pub struct MacroCallId(RawId); 109pub struct MacroCallId(RawId);
111impl_arena_id!(MacroCallId); 110impl_arena_id!(MacroCallId);
112 111
113#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 112#[derive(Debug, Clone, PartialEq, Eq, Hash)]
114pub struct MacroCallLoc { 113pub 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)]
140pub struct DefLoc { 138pub 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)]
148pub(crate) enum DefKind { 145pub(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}