From 0b657ddbfe9754afce9811c70a4e61e4ea9efeaf Mon Sep 17 00:00:00 2001 From: Paul Daniel Faria Date: Wed, 24 Jun 2020 21:42:44 -0400 Subject: Revert resolution of all glob imports first, replace with tracking of glob imports and shadowing when more specific --- crates/ra_hir_def/src/item_scope.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'crates/ra_hir_def/src/item_scope.rs') 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 { let existing = self.visible.entry(name).or_default(); macro_rules! check_changed { - ($changed:ident, $existing:expr, $def:expr) => { - match ($existing, $def) { + ($changed:ident, ($existing:ident/$def:ident).$field:ident) => { + match ($existing.$field, $def.$field) { (None, Some(_)) => { - $existing = $def; + $existing.from_glob = $def.from_glob; + $existing.$field = $def.$field; $changed = true; } - (Some(e), Some(d)) if e.0 != d.0 => { + // Only update if the new def came from a specific import and the existing + // import came from a glob import. + (Some(_), Some(_)) if $existing.from_glob && !$def.from_glob => { mark::hit!(import_shadowed); - $existing = $def; + $existing.from_glob = $def.from_glob; + $existing.$field = $def.$field; $changed = true; } _ => {} @@ -144,9 +148,9 @@ impl ItemScope { }; } - check_changed!(changed, existing.types, def.types); - check_changed!(changed, existing.values, def.values); - check_changed!(changed, existing.macros, def.macros); + check_changed!(changed, (existing / def).types); + check_changed!(changed, (existing / def).values); + check_changed!(changed, (existing / def).macros); changed } -- cgit v1.2.3