From 45fce9034909f2f0c5f6ac70eca7cf87ec3db856 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 4 Dec 2018 22:46:23 +0300 Subject: ModuleSource is ItemSource --- crates/ra_hir/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'crates/ra_hir/src/lib.rs') diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index e7b6a81f4..0f84b2d61 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -131,6 +131,10 @@ impl SourceFileItems { .unwrap(); id } + pub fn id_of_source_file(&self) -> SourceFileItemId { + let (id, _syntax) = self.arena.iter().next().unwrap(); + id + } } impl Index for SourceFileItems { -- cgit v1.2.3 From 947e3350e045aab1db9b232542425a3faa856907 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 4 Dec 2018 23:01:53 +0300 Subject: module-scoped defloc --- crates/ra_hir/src/lib.rs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'crates/ra_hir/src/lib.rs') diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 0f84b2d61..ffc99fd5f 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -61,15 +61,18 @@ impl FnId { pub struct DefId(u32); ra_db::impl_numeric_id!(DefId); +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub(crate) enum DefKind { + Module, + Item, +} + #[derive(Clone, Debug, PartialEq, Eq, Hash)] -pub enum DefLoc { - Module { - id: ModuleId, - source_root: SourceRootId, - }, - Item { - source_item_id: SourceItemId, - }, +pub struct DefLoc { + pub(crate) kind: DefKind, + source_root_id: SourceRootId, + module_id: ModuleId, + source_item_id: SourceItemId, } impl DefId { @@ -92,12 +95,12 @@ pub enum Def { impl DefId { pub fn resolve(self, db: &impl HirDatabase) -> Cancelable { let loc = self.loc(db); - let res = match loc { - DefLoc::Module { id, source_root } => { - let descr = Module::new(db, source_root, id)?; + let res = match loc.kind { + DefKind::Module => { + let descr = Module::new(db, loc.source_root_id, loc.module_id)?; Def::Module(descr) } - DefLoc::Item { .. } => Def::Item, + DefKind::Item => Def::Item, }; Ok(res) } -- cgit v1.2.3 From d8b0379e1063941331253905795699a918233ef9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 4 Dec 2018 23:44:00 +0300 Subject: Add functions to DefId --- crates/ra_hir/src/lib.rs | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) (limited to 'crates/ra_hir/src/lib.rs') diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index ffc99fd5f..dbcc5e46d 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -41,22 +41,6 @@ pub use self::{ pub use self::function::FnSignatureInfo; -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct FnId(u32); -ra_db::impl_numeric_id!(FnId); - -impl FnId { - pub fn from_loc( - db: &impl AsRef>, - loc: &SourceItemId, - ) -> FnId { - db.as_ref().loc2id(loc) - } - pub fn loc(self, db: &impl AsRef>) -> SourceItemId { - db.as_ref().id2loc(self) - } -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct DefId(u32); ra_db::impl_numeric_id!(DefId); @@ -64,6 +48,7 @@ ra_db::impl_numeric_id!(DefId); #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub(crate) enum DefKind { Module, + Function, Item, } @@ -89,6 +74,7 @@ impl DefLoc { pub enum Def { Module(Module), + Function(Function), Item, } @@ -100,7 +86,7 @@ impl DefId { let descr = Module::new(db, loc.source_root_id, loc.module_id)?; Def::Module(descr) } - DefKind::Item => Def::Item, + DefKind::Item | DefKind::Function => Def::Item, }; Ok(res) } -- cgit v1.2.3 From 54d053c881514b024ba399ce2edc678e3f710ab7 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 4 Dec 2018 23:52:14 +0300 Subject: minor --- crates/ra_hir/src/lib.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'crates/ra_hir/src/lib.rs') diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index dbcc5e46d..9168dad3b 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -41,6 +41,8 @@ pub use self::{ pub use self::function::FnSignatureInfo; +/// Def's are a core concept of hir. A `Def` is an Item (function, module, etc) +/// in a specific module. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct DefId(u32); ra_db::impl_numeric_id!(DefId); @@ -61,13 +63,13 @@ pub struct DefLoc { } impl DefId { - pub fn loc(self, db: &impl AsRef>) -> DefLoc { + pub(crate) fn loc(self, db: &impl AsRef>) -> DefLoc { db.as_ref().id2loc(self) } } impl DefLoc { - pub fn id(&self, db: &impl AsRef>) -> DefId { + pub(crate) fn id(&self, db: &impl AsRef>) -> DefId { db.as_ref().loc2id(&self) } } @@ -83,10 +85,14 @@ impl DefId { let loc = self.loc(db); let res = match loc.kind { DefKind::Module => { - let descr = Module::new(db, loc.source_root_id, loc.module_id)?; - Def::Module(descr) + let module = Module::new(db, loc.source_root_id, loc.module_id)?; + Def::Module(module) } - DefKind::Item | DefKind::Function => Def::Item, + DefKind::Function => { + let function = Function::new(self); + Def::Function(function) + } + DefKind::Item => Def::Item, }; Ok(res) } -- cgit v1.2.3