diff options
author | Paul Daniel Faria <[email protected]> | 2020-06-25 02:42:44 +0100 |
---|---|---|
committer | Paul Daniel Faria <[email protected]> | 2020-06-25 14:27:00 +0100 |
commit | 0b657ddbfe9754afce9811c70a4e61e4ea9efeaf (patch) | |
tree | 9a99332d1d2fa720fbb0da6af4122a5c4d6526f7 /crates/ra_hir_def/src/item_scope.rs | |
parent | 70d4829560b81e3f5dc8e624da702ed6d345c49c (diff) |
Revert resolution of all glob imports first, replace with tracking of glob imports and shadowing when more specific
Diffstat (limited to 'crates/ra_hir_def/src/item_scope.rs')
-rw-r--r-- | crates/ra_hir_def/src/item_scope.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/crates/ra_hir_def/src/item_scope.rs b/crates/ra_hir_def/src/item_scope.rs index c81b966c3..0184b6af9 100644 --- a/crates/ra_hir_def/src/item_scope.rs +++ b/crates/ra_hir_def/src/item_scope.rs | |||
@@ -128,15 +128,19 @@ impl ItemScope { | |||
128 | let existing = self.visible.entry(name).or_default(); | 128 | let existing = self.visible.entry(name).or_default(); |
129 | 129 | ||
130 | macro_rules! check_changed { | 130 | macro_rules! check_changed { |
131 | ($changed:ident, $existing:expr, $def:expr) => { | 131 | ($changed:ident, ($existing:ident/$def:ident).$field:ident) => { |
132 | match ($existing, $def) { | 132 | match ($existing.$field, $def.$field) { |
133 | (None, Some(_)) => { | 133 | (None, Some(_)) => { |
134 | $existing = $def; | 134 | $existing.from_glob = $def.from_glob; |
135 | $existing.$field = $def.$field; | ||
135 | $changed = true; | 136 | $changed = true; |
136 | } | 137 | } |
137 | (Some(e), Some(d)) if e.0 != d.0 => { | 138 | // Only update if the new def came from a specific import and the existing |
139 | // import came from a glob import. | ||
140 | (Some(_), Some(_)) if $existing.from_glob && !$def.from_glob => { | ||
138 | mark::hit!(import_shadowed); | 141 | mark::hit!(import_shadowed); |
139 | $existing = $def; | 142 | $existing.from_glob = $def.from_glob; |
143 | $existing.$field = $def.$field; | ||
140 | $changed = true; | 144 | $changed = true; |
141 | } | 145 | } |
142 | _ => {} | 146 | _ => {} |
@@ -144,9 +148,9 @@ impl ItemScope { | |||
144 | }; | 148 | }; |
145 | } | 149 | } |
146 | 150 | ||
147 | check_changed!(changed, existing.types, def.types); | 151 | check_changed!(changed, (existing / def).types); |
148 | check_changed!(changed, existing.values, def.values); | 152 | check_changed!(changed, (existing / def).values); |
149 | check_changed!(changed, existing.macros, def.macros); | 153 | check_changed!(changed, (existing / def).macros); |
150 | 154 | ||
151 | changed | 155 | changed |
152 | } | 156 | } |