diff options
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index aa26345b2..6b1160aa7 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -320,8 +320,22 @@ impl CrateDefMap { | |||
320 | (res.resolved_def, res.segment_index) | 320 | (res.resolved_def, res.segment_index) |
321 | } | 321 | } |
322 | 322 | ||
323 | pub(crate) fn find_macro(&self, name: &Name) -> Option<MacroDefId> { | 323 | pub(crate) fn find_macro( |
324 | self.public_macros.get(name).or(self.local_macros.get(name)).map(|it| *it) | 324 | &self, |
325 | db: &impl DefDatabase, | ||
326 | original_module: CrateModuleId, | ||
327 | path: &Path, | ||
328 | ) -> Option<MacroDefId> { | ||
329 | let name = path.expand_macro_expr()?; | ||
330 | // search local first | ||
331 | // FIXME: Remove public_macros check when we have a correct local_macors implementation | ||
332 | let local = self.public_macros.get(&name).or(self.local_macros.get(&name)).map(|it| *it); | ||
333 | if local.is_some() { | ||
334 | return local; | ||
335 | } | ||
336 | |||
337 | let res = self.resolve_path_fp_with_macro(db, ResolveMode::Other, original_module, path); | ||
338 | res.resolved_def.right().map(|m| m.id) | ||
325 | } | 339 | } |
326 | 340 | ||
327 | // Returns Yes if we are sure that additions to `ItemMap` wouldn't change | 341 | // Returns Yes if we are sure that additions to `ItemMap` wouldn't change |