diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-07-14 16:46:01 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-07-14 16:46:01 +0100 |
commit | ff6cf4f84914529f112b5bbefbefb2fb33c7f67a (patch) | |
tree | 5279549a39259d7c3d19ca5d72c59093c2cf7e8a /crates/ra_ide_db/src | |
parent | 408b5fafc5fa6e18dc61a6e7a514692ae4352b0e (diff) | |
parent | 2163ceb7ef0fc3c5268c9ca5f48bb50ae311947f (diff) |
Merge #5377
5377: Fix classify_name_ref on multi-path macro calls r=matklad a=jonas-schievink
Previously, "go to definition" on `log<|>::info!(...)` would go to the `info!` macro, not to the `log` crate. This fixes that.
Co-authored-by: Jonas Schievink <[email protected]>
Diffstat (limited to 'crates/ra_ide_db/src')
-rw-r--r-- | crates/ra_ide_db/src/defs.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs index 3ef5e74b6..bcaabca92 100644 --- a/crates/ra_ide_db/src/defs.rs +++ b/crates/ra_ide_db/src/defs.rs | |||
@@ -255,8 +255,14 @@ pub fn classify_name_ref( | |||
255 | } | 255 | } |
256 | 256 | ||
257 | if let Some(macro_call) = parent.ancestors().find_map(ast::MacroCall::cast) { | 257 | if let Some(macro_call) = parent.ancestors().find_map(ast::MacroCall::cast) { |
258 | if let Some(macro_def) = sema.resolve_macro_call(¯o_call) { | 258 | if let Some(path) = macro_call.path() { |
259 | return Some(NameRefClass::Definition(Definition::Macro(macro_def))); | 259 | if path.qualifier().is_none() { |
260 | // Only use this to resolve single-segment macro calls like `foo!()`. Multi-segment | ||
261 | // paths are handled below (allowing `log<|>::info!` to resolve to the log crate). | ||
262 | if let Some(macro_def) = sema.resolve_macro_call(¯o_call) { | ||
263 | return Some(NameRefClass::Definition(Definition::Macro(macro_def))); | ||
264 | } | ||
265 | } | ||
260 | } | 266 | } |
261 | } | 267 | } |
262 | 268 | ||