diff options
Diffstat (limited to 'crates/ra_hir_def/src')
-rw-r--r-- | crates/ra_hir_def/src/db.rs | 11 | ||||
-rw-r--r-- | crates/ra_hir_def/src/nameres.rs | 4 | ||||
-rw-r--r-- | crates/ra_hir_def/src/nameres/collector.rs | 1 |
3 files changed, 12 insertions, 4 deletions
diff --git a/crates/ra_hir_def/src/db.rs b/crates/ra_hir_def/src/db.rs index c55fd4111..da273eb11 100644 --- a/crates/ra_hir_def/src/db.rs +++ b/crates/ra_hir_def/src/db.rs | |||
@@ -3,6 +3,7 @@ use std::sync::Arc; | |||
3 | 3 | ||
4 | use hir_expand::{db::AstDatabase, HirFileId}; | 4 | use hir_expand::{db::AstDatabase, HirFileId}; |
5 | use ra_db::{salsa, CrateId, SourceDatabase}; | 5 | use ra_db::{salsa, CrateId, SourceDatabase}; |
6 | use ra_prof::profile; | ||
6 | use ra_syntax::SmolStr; | 7 | use ra_syntax::SmolStr; |
7 | 8 | ||
8 | use crate::{ | 9 | use crate::{ |
@@ -46,9 +47,12 @@ pub trait DefDatabase: InternDatabase + AstDatabase { | |||
46 | #[salsa::invoke(RawItems::raw_items_query)] | 47 | #[salsa::invoke(RawItems::raw_items_query)] |
47 | fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>; | 48 | fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>; |
48 | 49 | ||
49 | #[salsa::invoke(CrateDefMap::crate_def_map_query)] | 50 | #[salsa::transparent] |
50 | fn crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>; | 51 | fn crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>; |
51 | 52 | ||
53 | #[salsa::invoke(CrateDefMap::compute_crate_def_map_query)] | ||
54 | fn compute_crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>; | ||
55 | |||
52 | #[salsa::invoke(StructData::struct_data_query)] | 56 | #[salsa::invoke(StructData::struct_data_query)] |
53 | fn struct_data(&self, id: StructId) -> Arc<StructData>; | 57 | fn struct_data(&self, id: StructId) -> Arc<StructData>; |
54 | #[salsa::invoke(StructData::union_data_query)] | 58 | #[salsa::invoke(StructData::union_data_query)] |
@@ -104,3 +108,8 @@ pub trait DefDatabase: InternDatabase + AstDatabase { | |||
104 | #[salsa::invoke(Documentation::documentation_query)] | 108 | #[salsa::invoke(Documentation::documentation_query)] |
105 | fn documentation(&self, def: AttrDefId) -> Option<Documentation>; | 109 | fn documentation(&self, def: AttrDefId) -> Option<Documentation>; |
106 | } | 110 | } |
111 | |||
112 | fn crate_def_map(db: &impl DefDatabase, krate: CrateId) -> Arc<CrateDefMap> { | ||
113 | let _p = profile("crate_def_map"); | ||
114 | db.compute_crate_def_map(krate) | ||
115 | } | ||
diff --git a/crates/ra_hir_def/src/nameres.rs b/crates/ra_hir_def/src/nameres.rs index 5d4ca73a3..4d210eab1 100644 --- a/crates/ra_hir_def/src/nameres.rs +++ b/crates/ra_hir_def/src/nameres.rs | |||
@@ -172,13 +172,13 @@ pub struct ModuleData { | |||
172 | } | 172 | } |
173 | 173 | ||
174 | impl CrateDefMap { | 174 | impl CrateDefMap { |
175 | pub(crate) fn crate_def_map_query( | 175 | pub(crate) fn compute_crate_def_map_query( |
176 | // Note that this doesn't have `+ AstDatabase`! | 176 | // Note that this doesn't have `+ AstDatabase`! |
177 | // This gurantess that `CrateDefMap` is stable across reparses. | 177 | // This gurantess that `CrateDefMap` is stable across reparses. |
178 | db: &impl DefDatabase, | 178 | db: &impl DefDatabase, |
179 | krate: CrateId, | 179 | krate: CrateId, |
180 | ) -> Arc<CrateDefMap> { | 180 | ) -> Arc<CrateDefMap> { |
181 | let _p = profile("crate_def_map_query"); | 181 | let _p = profile("compute_crate_def_map"); |
182 | let def_map = { | 182 | let def_map = { |
183 | let crate_graph = db.crate_graph(); | 183 | let crate_graph = db.crate_graph(); |
184 | let edition = crate_graph.edition(krate); | 184 | let edition = crate_graph.edition(krate); |
diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs index 8a22b0585..35b852ee2 100644 --- a/crates/ra_hir_def/src/nameres/collector.rs +++ b/crates/ra_hir_def/src/nameres/collector.rs | |||
@@ -45,7 +45,6 @@ pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> C | |||
45 | // If the dependency defines a prelude, we overwrite an already defined | 45 | // If the dependency defines a prelude, we overwrite an already defined |
46 | // prelude. This is necessary to import the "std" prelude if a crate | 46 | // prelude. This is necessary to import the "std" prelude if a crate |
47 | // depends on both "core" and "std". | 47 | // depends on both "core" and "std". |
48 | let dep_def_map = db.crate_def_map(dep.crate_id); | ||
49 | if dep_def_map.prelude.is_some() { | 48 | if dep_def_map.prelude.is_some() { |
50 | def_map.prelude = dep_def_map.prelude; | 49 | def_map.prelude = dep_def_map.prelude; |
51 | } | 50 | } |