Inline name classification reference calls

This commit is contained in:
Lukas Wirth
2021-07-11 15:39:09 +02:00
parent c65bb7f8b9
commit c41f1279a3
9 changed files with 117 additions and 80 deletions

View File

@@ -23,12 +23,15 @@ pub(crate) fn goto_declaration(
let parent = token.parent()?;
let def = match_ast! {
match parent {
ast::NameRef(name_ref) => {
let name_kind = NameRefClass::classify(&sema, &name_ref)?;
name_kind.referenced_local()
ast::NameRef(name_ref) => match NameRefClass::classify(&sema, &name_ref)? {
NameRefClass::Definition(def) => def,
NameRefClass::FieldShorthand { local_ref, field_ref: _ } => {
Definition::Local(local_ref)
}
},
ast::Name(name) => {
NameClass::classify(&sema, &name)?.defined_or_referenced_local()
ast::Name(name) => match NameClass::classify(&sema, &name)? {
NameClass::Definition(it) | NameClass::ConstReference(it) => it,
NameClass::PatFieldShorthand { local_def, field_ref: _ } => Definition::Local(local_def),
},
_ => return None,
}