diff options
Diffstat (limited to 'crates/ra_hir/src/resolve.rs')
-rw-r--r-- | crates/ra_hir/src/resolve.rs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs index ef75308f6..d9bdd0e22 100644 --- a/crates/ra_hir/src/resolve.rs +++ b/crates/ra_hir/src/resolve.rs | |||
@@ -6,7 +6,6 @@ use rustc_hash::{FxHashMap, FxHashSet}; | |||
6 | use crate::{ | 6 | use crate::{ |
7 | code_model::Crate, | 7 | code_model::Crate, |
8 | db::HirDatabase, | 8 | db::HirDatabase, |
9 | either::Either, | ||
10 | expr::{ | 9 | expr::{ |
11 | scope::{ExprScopes, ScopeId}, | 10 | scope::{ExprScopes, ScopeId}, |
12 | PatId, | 11 | PatId, |
@@ -126,7 +125,7 @@ impl Resolver { | |||
126 | let mut resolution = PerNs::none(); | 125 | let mut resolution = PerNs::none(); |
127 | for scope in self.scopes.iter().rev() { | 126 | for scope in self.scopes.iter().rev() { |
128 | resolution = resolution.or(scope.resolve_name(db, name)); | 127 | resolution = resolution.or(scope.resolve_name(db, name)); |
129 | if resolution.is_both() { | 128 | if resolution.is_all() { |
130 | return resolution; | 129 | return resolution; |
131 | } | 130 | } |
132 | } | 131 | } |
@@ -139,10 +138,7 @@ impl Resolver { | |||
139 | path: &Path, | 138 | path: &Path, |
140 | ) -> Option<MacroDef> { | 139 | ) -> Option<MacroDef> { |
141 | let (item_map, module) = self.module()?; | 140 | let (item_map, module) = self.module()?; |
142 | match item_map.resolve_path_with_macro(db, module, path) { | 141 | item_map.resolve_path(db, module, path).0.get_macros() |
143 | (Either::B(macro_def), None) => Some(macro_def), | ||
144 | _ => None, | ||
145 | } | ||
146 | } | 142 | } |
147 | 143 | ||
148 | /// Returns the resolved path segments | 144 | /// Returns the resolved path segments |
@@ -191,6 +187,9 @@ impl Resolver { | |||
191 | if current.values.is_none() { | 187 | if current.values.is_none() { |
192 | current.values = res.values; | 188 | current.values = res.values; |
193 | } | 189 | } |
190 | if current.macros.is_none() { | ||
191 | current.macros = res.macros; | ||
192 | } | ||
194 | }); | 193 | }); |
195 | } | 194 | } |
196 | names | 195 | names |
@@ -313,6 +312,9 @@ impl Scope { | |||
313 | m.crate_def_map[m.module_id].scope.entries().for_each(|(name, res)| { | 312 | m.crate_def_map[m.module_id].scope.entries().for_each(|(name, res)| { |
314 | f(name.clone(), res.def.map(Resolution::Def)); | 313 | f(name.clone(), res.def.map(Resolution::Def)); |
315 | }); | 314 | }); |
315 | m.crate_def_map[m.module_id].scope.legacy_macros().for_each(|(name, macro_)| { | ||
316 | f(name.clone(), PerNs::macros(macro_)); | ||
317 | }); | ||
316 | m.crate_def_map.extern_prelude().iter().for_each(|(name, def)| { | 318 | m.crate_def_map.extern_prelude().iter().for_each(|(name, def)| { |
317 | f(name.clone(), PerNs::types(Resolution::Def(*def))); | 319 | f(name.clone(), PerNs::types(Resolution::Def(*def))); |
318 | }); | 320 | }); |