mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-13 21:54:42 +00:00
Fix classify_name_ref on multi-path macro calls
This commit is contained in:
parent
139214d8ca
commit
2163ceb7ef
2 changed files with 26 additions and 2 deletions
|
@ -866,4 +866,22 @@ type Alias<T> = T<|>;
|
||||||
"#,
|
"#,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn goto_def_for_macro_container() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
//- /lib.rs
|
||||||
|
foo::module<|>::mac!();
|
||||||
|
|
||||||
|
//- /foo/lib.rs
|
||||||
|
pub mod module {
|
||||||
|
//^^^^^^
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! _mac { () => { () } }
|
||||||
|
pub use crate::_mac as mac;
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -255,8 +255,14 @@ pub fn classify_name_ref(
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(macro_call) = parent.ancestors().find_map(ast::MacroCall::cast) {
|
if let Some(macro_call) = parent.ancestors().find_map(ast::MacroCall::cast) {
|
||||||
if let Some(macro_def) = sema.resolve_macro_call(¯o_call) {
|
if let Some(path) = macro_call.path() {
|
||||||
return Some(NameRefClass::Definition(Definition::Macro(macro_def)));
|
if path.qualifier().is_none() {
|
||||||
|
// Only use this to resolve single-segment macro calls like `foo!()`. Multi-segment
|
||||||
|
// paths are handled below (allowing `log<|>::info!` to resolve to the log crate).
|
||||||
|
if let Some(macro_def) = sema.resolve_macro_call(¯o_call) {
|
||||||
|
return Some(NameRefClass::Definition(Definition::Macro(macro_def)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue