aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_hir/src/function/mod.rs8
-rw-r--r--crates/ra_hir/src/lib.rs16
2 files changed, 17 insertions, 7 deletions
diff --git a/crates/ra_hir/src/function/mod.rs b/crates/ra_hir/src/function/mod.rs
index a6757601e..e00bca6e3 100644
--- a/crates/ra_hir/src/function/mod.rs
+++ b/crates/ra_hir/src/function/mod.rs
@@ -27,6 +27,11 @@ pub struct Function {
27} 27}
28 28
29impl Function { 29impl Function {
30 pub(crate) fn new(def_id: DefId) -> Function {
31 let fn_id = FnId(def_id);
32 Function { fn_id }
33 }
34
30 pub fn guess_from_source( 35 pub fn guess_from_source(
31 db: &impl HirDatabase, 36 db: &impl HirDatabase,
32 file_id: FileId, 37 file_id: FileId,
@@ -42,8 +47,7 @@ impl Function {
42 module_id: module.module_id, 47 module_id: module.module_id,
43 source_item_id, 48 source_item_id,
44 }; 49 };
45 let fn_id = FnId(def_loc.id(db)); 50 Ok(Some(Function::new(def_loc.id(db))))
46 Ok(Some(Function { fn_id }))
47 } 51 }
48 52
49 pub fn guess_for_name_ref( 53 pub fn guess_for_name_ref(
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::{
41 41
42pub use self::function::FnSignatureInfo; 42pub use self::function::FnSignatureInfo;
43 43
44/// Def's are a core concept of hir. A `Def` is an Item (function, module, etc)
45/// in a specific module.
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 46#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
45pub struct DefId(u32); 47pub struct DefId(u32);
46ra_db::impl_numeric_id!(DefId); 48ra_db::impl_numeric_id!(DefId);
@@ -61,13 +63,13 @@ pub struct DefLoc {
61} 63}
62 64
63impl DefId { 65impl DefId {
64 pub fn loc(self, db: &impl AsRef<LocationIntener<DefLoc, DefId>>) -> DefLoc { 66 pub(crate) fn loc(self, db: &impl AsRef<LocationIntener<DefLoc, DefId>>) -> DefLoc {
65 db.as_ref().id2loc(self) 67 db.as_ref().id2loc(self)
66 } 68 }
67} 69}
68 70
69impl DefLoc { 71impl DefLoc {
70 pub fn id(&self, db: &impl AsRef<LocationIntener<DefLoc, DefId>>) -> DefId { 72 pub(crate) fn id(&self, db: &impl AsRef<LocationIntener<DefLoc, DefId>>) -> DefId {
71 db.as_ref().loc2id(&self) 73 db.as_ref().loc2id(&self)
72 } 74 }
73} 75}
@@ -83,10 +85,14 @@ impl DefId {
83 let loc = self.loc(db); 85 let loc = self.loc(db);
84 let res = match loc.kind { 86 let res = match loc.kind {
85 DefKind::Module => { 87 DefKind::Module => {
86 let descr = Module::new(db, loc.source_root_id, loc.module_id)?; 88 let module = Module::new(db, loc.source_root_id, loc.module_id)?;
87 Def::Module(descr) 89 Def::Module(module)
88 } 90 }
89 DefKind::Item | DefKind::Function => Def::Item, 91 DefKind::Function => {
92 let function = Function::new(self);
93 Def::Function(function)
94 }
95 DefKind::Item => Def::Item,
90 }; 96 };
91 Ok(res) 97 Ok(res)
92 } 98 }