diff options
Diffstat (limited to 'crates/ra_hir_def/src/item_scope.rs')
-rw-r--r-- | crates/ra_hir_def/src/item_scope.rs | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/crates/ra_hir_def/src/item_scope.rs b/crates/ra_hir_def/src/item_scope.rs index b03ba939a..571ba3b8a 100644 --- a/crates/ra_hir_def/src/item_scope.rs +++ b/crates/ra_hir_def/src/item_scope.rs | |||
@@ -126,17 +126,40 @@ impl ItemScope { | |||
126 | let mut changed = false; | 126 | let mut changed = false; |
127 | let existing = self.visible.entry(name).or_default(); | 127 | let existing = self.visible.entry(name).or_default(); |
128 | 128 | ||
129 | if existing.types.is_none() && def.types.is_some() { | 129 | match (existing.types, def.types) { |
130 | existing.types = def.types; | 130 | (None, Some(_)) => { |
131 | changed = true; | 131 | existing.types = def.types; |
132 | changed = true; | ||
133 | } | ||
134 | (Some(e), Some(d)) if e.0 != d.0 => { | ||
135 | existing.types = def.types; | ||
136 | changed = true; | ||
137 | } | ||
138 | _ => {} | ||
132 | } | 139 | } |
133 | if existing.values.is_none() && def.values.is_some() { | 140 | |
134 | existing.values = def.values; | 141 | match (existing.values, def.values) { |
135 | changed = true; | 142 | (None, Some(_)) => { |
143 | existing.values = def.values; | ||
144 | changed = true; | ||
145 | } | ||
146 | (Some(e), Some(d)) if e.0 != d.0 => { | ||
147 | existing.values = def.values; | ||
148 | changed = true; | ||
149 | } | ||
150 | _ => {} | ||
136 | } | 151 | } |
137 | if existing.macros.is_none() && def.macros.is_some() { | 152 | |
138 | existing.macros = def.macros; | 153 | match (existing.macros, def.macros) { |
139 | changed = true; | 154 | (None, Some(_)) => { |
155 | 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 | _ => {} | ||
140 | } | 163 | } |
141 | 164 | ||
142 | changed | 165 | changed |