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/item_scope.rs13
-rw-r--r--crates/ra_hir_def/src/nameres/collector.rs14
2 files changed, 8 insertions, 19 deletions
diff --git a/crates/ra_hir_def/src/item_scope.rs b/crates/ra_hir_def/src/item_scope.rs
index b5c07ed5f..81089554f 100644
--- a/crates/ra_hir_def/src/item_scope.rs
+++ b/crates/ra_hir_def/src/item_scope.rs
@@ -30,9 +30,7 @@ pub struct ItemScope {
30static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| { 30static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| {
31 BuiltinType::ALL 31 BuiltinType::ALL
32 .iter() 32 .iter()
33 .map(|(name, ty)| { 33 .map(|(name, ty)| (name.clone(), Resolution { def: PerNs::types(ty.clone().into()) }))
34 (name.clone(), Resolution { def: PerNs::types(ty.clone().into()), import: false })
35 })
36 .collect() 34 .collect()
37}); 35});
38 36
@@ -113,29 +111,23 @@ impl ItemScope {
113 self.legacy_macros.insert(name, mac); 111 self.legacy_macros.insert(name, mac);
114 } 112 }
115 113
116 pub(crate) fn push_res(&mut self, name: Name, res: &Resolution, import: bool) -> bool { 114 pub(crate) fn push_res(&mut self, name: Name, res: &Resolution, _import: bool) -> bool {
117 let mut changed = false; 115 let mut changed = false;
118 let existing = self.visible.entry(name.clone()).or_default(); 116 let existing = self.visible.entry(name.clone()).or_default();
119 117
120 if existing.def.types.is_none() && res.def.types.is_some() { 118 if existing.def.types.is_none() && res.def.types.is_some() {
121 existing.def.types = res.def.types; 119 existing.def.types = res.def.types;
122 existing.import = import || res.import;
123 changed = true; 120 changed = true;
124 } 121 }
125 if existing.def.values.is_none() && res.def.values.is_some() { 122 if existing.def.values.is_none() && res.def.values.is_some() {
126 existing.def.values = res.def.values; 123 existing.def.values = res.def.values;
127 existing.import = import || res.import;
128 changed = true; 124 changed = true;
129 } 125 }
130 if existing.def.macros.is_none() && res.def.macros.is_some() { 126 if existing.def.macros.is_none() && res.def.macros.is_some() {
131 existing.def.macros = res.def.macros; 127 existing.def.macros = res.def.macros;
132 existing.import = import || res.import;
133 changed = true; 128 changed = true;
134 } 129 }
135 130
136 if existing.def.is_none() && res.def.is_none() && !existing.import && res.import {
137 existing.import = res.import;
138 }
139 changed 131 changed
140 } 132 }
141 133
@@ -152,7 +144,6 @@ impl ItemScope {
152pub struct Resolution { 144pub struct Resolution {
153 /// None for unresolved 145 /// None for unresolved
154 pub def: PerNs, 146 pub def: PerNs,
155 pub(crate) import: bool,
156} 147}
157 148
158impl From<ModuleDefId> for PerNs { 149impl From<ModuleDefId> for PerNs {
diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs
index 745e31c0d..3706c1223 100644
--- a/crates/ra_hir_def/src/nameres/collector.rs
+++ b/crates/ra_hir_def/src/nameres/collector.rs
@@ -218,7 +218,7 @@ where
218 self.update( 218 self.update(
219 self.def_map.root, 219 self.def_map.root,
220 None, 220 None,
221 &[(name, Resolution { def: PerNs::macros(macro_), import: false })], 221 &[(name, Resolution { def: PerNs::macros(macro_) })],
222 ); 222 );
223 } 223 }
224 } 224 }
@@ -401,10 +401,8 @@ where
401 .map(|(local_id, variant_data)| { 401 .map(|(local_id, variant_data)| {
402 let name = variant_data.name.clone(); 402 let name = variant_data.name.clone();
403 let variant = EnumVariantId { parent: e, local_id }; 403 let variant = EnumVariantId { parent: e, local_id };
404 let res = Resolution { 404 let res =
405 def: PerNs::both(variant.into(), variant.into()), 405 Resolution { def: PerNs::both(variant.into(), variant.into()) };
406 import: true,
407 };
408 (name, res) 406 (name, res)
409 }) 407 })
410 .collect::<Vec<_>>(); 408 .collect::<Vec<_>>();
@@ -430,7 +428,7 @@ where
430 } 428 }
431 } 429 }
432 430
433 let resolution = Resolution { def, import: true }; 431 let resolution = Resolution { def };
434 self.update(module_id, Some(import_id), &[(name, resolution)]); 432 self.update(module_id, Some(import_id), &[(name, resolution)]);
435 } 433 }
436 None => tested_by!(bogus_paths), 434 None => tested_by!(bogus_paths),
@@ -717,7 +715,7 @@ where
717 let module = ModuleId { krate: self.def_collector.def_map.krate, local_id: res }; 715 let module = ModuleId { krate: self.def_collector.def_map.krate, local_id: res };
718 let def: ModuleDefId = module.into(); 716 let def: ModuleDefId = module.into();
719 self.def_collector.def_map.modules[self.module_id].scope.define_def(def); 717 self.def_collector.def_map.modules[self.module_id].scope.define_def(def);
720 let resolution = Resolution { def: def.into(), import: false }; 718 let resolution = Resolution { def: def.into() };
721 self.def_collector.update(self.module_id, None, &[(name, resolution)]); 719 self.def_collector.update(self.module_id, None, &[(name, resolution)]);
722 res 720 res
723 } 721 }
@@ -777,7 +775,7 @@ where
777 .into(), 775 .into(),
778 }; 776 };
779 self.def_collector.def_map.modules[self.module_id].scope.define_def(def); 777 self.def_collector.def_map.modules[self.module_id].scope.define_def(def);
780 let resolution = Resolution { def: def.into(), import: false }; 778 let resolution = Resolution { def: def.into() };
781 self.def_collector.update(self.module_id, None, &[(name, resolution)]) 779 self.def_collector.update(self.module_id, None, &[(name, resolution)])
782 } 780 }
783 781