mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
Explicitly check for reference locals or fields in Name classification
This commit is contained in:
parent
87621de2b9
commit
c65bb7f8b9
11 changed files with 67 additions and 50 deletions
|
@ -60,12 +60,11 @@ pub(crate) fn goto_definition(
|
|||
reference_definition(&sema, Either::Right(&name_ref))
|
||||
},
|
||||
ast::Name(name) => {
|
||||
let def = NameClass::classify(&sema, &name)?.referenced_or_defined();
|
||||
try_find_trait_item_definition(sema.db, &def)
|
||||
.or_else(|| def.try_to_nav(sema.db))
|
||||
let def = NameClass::classify(&sema, &name)?.defined_or_referenced_local();
|
||||
try_find_trait_item_definition(sema.db, &def).or_else(|| def.try_to_nav(sema.db))
|
||||
},
|
||||
ast::Lifetime(lt) => if let Some(name_class) = NameClass::classify_lifetime(&sema, <) {
|
||||
let def = name_class.referenced_or_defined();
|
||||
let def = name_class.defined_or_referenced_local();
|
||||
def.try_to_nav(sema.db)
|
||||
} else {
|
||||
reference_definition(&sema, Either::Left(<))
|
||||
|
@ -140,7 +139,7 @@ pub(crate) fn reference_definition(
|
|||
|lifetime| NameRefClass::classify_lifetime(sema, lifetime),
|
||||
|name_ref| NameRefClass::classify(sema, name_ref),
|
||||
)?;
|
||||
let def = name_kind.referenced();
|
||||
let def = name_kind.referenced_local();
|
||||
def.try_to_nav(sema.db)
|
||||
}
|
||||
|
||||
|
@ -878,10 +877,11 @@ fn main() {
|
|||
r#"
|
||||
enum Foo {
|
||||
Bar { x: i32 }
|
||||
} //^
|
||||
}
|
||||
fn baz(foo: Foo) {
|
||||
match foo {
|
||||
Foo::Bar { x$0 } => x
|
||||
//^
|
||||
};
|
||||
}
|
||||
"#,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue