From e52bdc55ef05bae8e647a5a0a9f8c3605c4cdd34 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Tue, 16 Feb 2021 19:27:08 +0100 Subject: Implement ast::AstNode for NameLike and move it to node_ext --- crates/ide/src/references.rs | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) (limited to 'crates/ide/src/references.rs') diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs index a83b82f1b..55f95ebae 100644 --- a/crates/ide/src/references.rs +++ b/crates/ide/src/references.rs @@ -101,29 +101,21 @@ fn find_def( syntax: &SyntaxNode, position: FilePosition, ) -> Option { - if let Some(name) = sema.find_node_at_offset_with_descend::(&syntax, position.offset) - { - let class = NameClass::classify(sema, &name)?; - Some(class.referenced_or_defined(sema.db)) - } else if let Some(lifetime) = - sema.find_node_at_offset_with_descend::(&syntax, position.offset) - { - let def = if let Some(def) = - NameRefClass::classify_lifetime(sema, &lifetime).map(|class| class.referenced(sema.db)) - { - def - } else { - NameClass::classify_lifetime(sema, &lifetime)?.referenced_or_defined(sema.db) - }; - Some(def) - } else if let Some(name_ref) = - sema.find_node_at_offset_with_descend::(&syntax, position.offset) - { - let class = NameRefClass::classify(sema, &name_ref)?; - Some(class.referenced(sema.db)) - } else { - None - } + let def = match sema.find_node_at_offset_with_descend(syntax, position.offset)? { + ast::NameLike::NameRef(name_ref) => { + NameRefClass::classify(sema, &name_ref)?.referenced(sema.db) + } + ast::NameLike::Name(name) => { + NameClass::classify(sema, &name)?.referenced_or_defined(sema.db) + } + ast::NameLike::Lifetime(lifetime) => NameRefClass::classify_lifetime(sema, &lifetime) + .map(|class| class.referenced(sema.db)) + .or_else(|| { + NameClass::classify_lifetime(sema, &lifetime) + .map(|class| class.referenced_or_defined(sema.db)) + })?, + }; + Some(def) } fn decl_access(def: &Definition, syntax: &SyntaxNode, range: TextRange) -> Option { -- cgit v1.2.3