Fix incorrect guard for NameRefClass attribute resolution

This commit is contained in:
Lukas Wirth 2021-07-02 15:17:21 +02:00
parent 16871f6f93
commit f640f2dbb4
2 changed files with 22 additions and 1 deletions

View File

@ -4134,4 +4134,24 @@ pub fn foo() {}
"#]],
)
}
#[test]
fn hover_attr_path_qualifier() {
check(
r#"
//- /foo.rs crate:foo
//- /lib.rs crate:main.rs deps:foo
#[fo$0o::bar()]
struct Foo;
"#,
expect![[r#"
*foo*
```rust
extern crate foo
```
"#]],
)
}
}

View File

@ -393,7 +393,8 @@ impl NameRefClass {
Some(true) => sema.resolve_path(&path).and_then(|resolved| {
match resolved {
// Don't wanna collide with builtin attributes here like `test` hence guard
PathResolution::Def(module @ ModuleDef::Module(_)) if path == top_path => {
// so only resolve to modules that aren't the last segment
PathResolution::Def(module @ ModuleDef::Module(_)) if path != top_path => {
Some(NameRefClass::Definition(Definition::ModuleDef(module)))
}
PathResolution::Macro(mac) if mac.kind() == hir::MacroKind::Attr => {