Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/source_analyzer.rs')
-rw-r--r--crates/hir/src/source_analyzer.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index be0116862b..fe1d5b5764 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -839,12 +839,25 @@ impl SourceAnalyzer {
db: &dyn HirDatabase,
macro_call: InFile<&ast::MacroCall>,
) -> Option<MacroFileId> {
- let krate = self.resolver.krate();
// FIXME: This causes us to parse, generally this is the wrong approach for resolving a
// macro call to a macro call id!
- let macro_call_id = macro_call.as_call_id(db.upcast(), krate, |path| {
- self.resolver.resolve_path_as_macro_def(db.upcast(), path, Some(MacroSubNs::Bang))
- })?;
+ let macro_call_id = macro_call
+ .as_call_id(
+ db.upcast(),
+ self.resolver.module(),
+ |path| {
+ self.resolver.resolve_path_as_macro_def(
+ db.upcast(),
+ path,
+ Some(MacroSubNs::Bang),
+ )
+ },
+ |module| {
+ self.resolver.module().def_map(db.upcast()).path_for_module(db.upcast(), module)
+ },
+ )
+ .ok()?
+ .value?;
// why the 64?
Some(macro_call_id.as_macro_file()).filter(|it| it.expansion_level(db.upcast()) < 64)
}