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.rs52
1 files changed, 19 insertions, 33 deletions
diff --git a/crates/ra_hir_def/src/item_scope.rs b/crates/ra_hir_def/src/item_scope.rs
index 571ba3b8a..c81b966c3 100644
--- a/crates/ra_hir_def/src/item_scope.rs
+++ b/crates/ra_hir_def/src/item_scope.rs
@@ -5,6 +5,7 @@ use hir_expand::name::Name;
5use once_cell::sync::Lazy; 5use once_cell::sync::Lazy;
6use ra_db::CrateId; 6use ra_db::CrateId;
7use rustc_hash::FxHashMap; 7use rustc_hash::FxHashMap;
8use test_utils::mark;
8 9
9use crate::{ 10use crate::{
10 db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, HasModule, ImplId, 11 db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, HasModule, ImplId,
@@ -126,41 +127,26 @@ impl ItemScope {
126 let mut changed = false; 127 let mut changed = false;
127 let existing = self.visible.entry(name).or_default(); 128 let existing = self.visible.entry(name).or_default();
128 129
129 match (existing.types, def.types) { 130 macro_rules! check_changed {
130 (None, Some(_)) => { 131 ($changed:ident, $existing:expr, $def:expr) => {
131 existing.types = def.types; 132 match ($existing, $def) {
132 changed = true; 133 (None, Some(_)) => {
133 } 134 $existing = $def;
134 (Some(e), Some(d)) if e.0 != d.0 => { 135 $changed = true;
135 existing.types = def.types; 136 }
136 changed = true; 137 (Some(e), Some(d)) if e.0 != d.0 => {
137 } 138 mark::hit!(import_shadowed);
138 _ => {} 139 $existing = $def;
139 } 140 $changed = true;
140 141 }
141 match (existing.values, def.values) { 142 _ => {}
142 (None, Some(_)) => { 143 }
143 existing.values = def.values; 144 };
144 changed = true;
145 }
146 (Some(e), Some(d)) if e.0 != d.0 => {
147 existing.values = def.values;
148 changed = true;
149 }
150 _ => {}
151 } 145 }
152 146
153 match (existing.macros, def.macros) { 147 check_changed!(changed, existing.types, def.types);
154 (None, Some(_)) => { 148 check_changed!(changed, existing.values, def.values);
155 existing.macros = def.macros; 149 check_changed!(changed, existing.macros, def.macros);
156 changed = true;
157 }
158 (Some(e), Some(d)) if e.0 != d.0 => {
159 existing.macros = def.macros;
160 changed = true;
161 }
162 _ => {}
163 }
164 150
165 changed 151 changed
166 } 152 }