aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def')
-rw-r--r--crates/ra_hir_def/src/db.rs11
-rw-r--r--crates/ra_hir_def/src/nameres.rs4
-rw-r--r--crates/ra_hir_def/src/nameres/collector.rs1
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
4use hir_expand::{db::AstDatabase, HirFileId}; 4use hir_expand::{db::AstDatabase, HirFileId};
5use ra_db::{salsa, CrateId, SourceDatabase}; 5use ra_db::{salsa, CrateId, SourceDatabase};
6use ra_prof::profile;
6use ra_syntax::SmolStr; 7use ra_syntax::SmolStr;
7 8
8use crate::{ 9use 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
112fn 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
174impl CrateDefMap { 174impl 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 }