aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/item_scope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/item_scope.rs')
-rw-r--r--crates/ra_hir_def/src/item_scope.rs19
1 files changed, 7 insertions, 12 deletions
diff --git a/crates/ra_hir_def/src/item_scope.rs b/crates/ra_hir_def/src/item_scope.rs
index ad104bb3d..8b70e13c4 100644
--- a/crates/ra_hir_def/src/item_scope.rs
+++ b/crates/ra_hir_def/src/item_scope.rs
@@ -30,7 +30,7 @@ static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| {
30 BuiltinType::ALL 30 BuiltinType::ALL
31 .iter() 31 .iter()
32 .map(|(name, ty)| { 32 .map(|(name, ty)| {
33 (name.clone(), Resolution { def: PerNs::types(ty.clone().into()), import: None }) 33 (name.clone(), Resolution { def: PerNs::types(ty.clone().into()), import: false })
34 }) 34 })
35 .collect() 35 .collect()
36}); 36});
@@ -54,7 +54,7 @@ impl ItemScope {
54 54
55 pub fn declarations(&self) -> impl Iterator<Item = ModuleDefId> + '_ { 55 pub fn declarations(&self) -> impl Iterator<Item = ModuleDefId> + '_ {
56 self.entries() 56 self.entries()
57 .filter_map(|(_name, res)| if res.import.is_none() { Some(res.def) } else { None }) 57 .filter_map(|(_name, res)| if !res.import { Some(res.def) } else { None })
58 .flat_map(|per_ns| { 58 .flat_map(|per_ns| {
59 per_ns.take_types().into_iter().chain(per_ns.take_values().into_iter()) 59 per_ns.take_types().into_iter().chain(per_ns.take_values().into_iter())
60 }) 60 })
@@ -123,25 +123,21 @@ impl ItemScope {
123 123
124 if existing.def.types.is_none() && res.def.types.is_some() { 124 if existing.def.types.is_none() && res.def.types.is_some() {
125 existing.def.types = res.def.types; 125 existing.def.types = res.def.types;
126 existing.import = import.or(res.import); 126 existing.import = import.is_some() || res.import;
127 changed = true; 127 changed = true;
128 } 128 }
129 if existing.def.values.is_none() && res.def.values.is_some() { 129 if existing.def.values.is_none() && res.def.values.is_some() {
130 existing.def.values = res.def.values; 130 existing.def.values = res.def.values;
131 existing.import = import.or(res.import); 131 existing.import = import.is_some() || res.import;
132 changed = true; 132 changed = true;
133 } 133 }
134 if existing.def.macros.is_none() && res.def.macros.is_some() { 134 if existing.def.macros.is_none() && res.def.macros.is_some() {
135 existing.def.macros = res.def.macros; 135 existing.def.macros = res.def.macros;
136 existing.import = import.or(res.import); 136 existing.import = import.is_some() || res.import;
137 changed = true; 137 changed = true;
138 } 138 }
139 139
140 if existing.def.is_none() 140 if existing.def.is_none() && res.def.is_none() && !existing.import && res.import {
141 && res.def.is_none()
142 && existing.import.is_none()
143 && res.import.is_some()
144 {
145 existing.import = res.import; 141 existing.import = res.import;
146 } 142 }
147 changed 143 changed
@@ -160,6 +156,5 @@ impl ItemScope {
160pub struct Resolution { 156pub struct Resolution {
161 /// None for unresolved 157 /// None for unresolved
162 pub def: PerNs, 158 pub def: PerNs,
163 /// ident by which this is imported into local scope. 159 pub(crate) import: bool,
164 pub(crate) import: Option<LocalImportId>,
165} 160}