aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/references.rs
diff options
context:
space:
mode:
authorLukas Wirth <[email protected]>2021-02-16 18:27:08 +0000
committerLukas Wirth <[email protected]>2021-02-16 18:27:08 +0000
commite52bdc55ef05bae8e647a5a0a9f8c3605c4cdd34 (patch)
tree9204791d0e03e6407072d806737aa0ffd3a6d332 /crates/ide/src/references.rs
parent80f9618f3775d22fddbfa6fac041aed6519eca4e (diff)
Implement ast::AstNode for NameLike and move it to node_ext
Diffstat (limited to 'crates/ide/src/references.rs')
-rw-r--r--crates/ide/src/references.rs38
1 files changed, 15 insertions, 23 deletions
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(
101 syntax: &SyntaxNode, 101 syntax: &SyntaxNode,
102 position: FilePosition, 102 position: FilePosition,
103) -> Option<Definition> { 103) -> Option<Definition> {
104 if let Some(name) = sema.find_node_at_offset_with_descend::<ast::Name>(&syntax, position.offset) 104 let def = match sema.find_node_at_offset_with_descend(syntax, position.offset)? {
105 { 105 ast::NameLike::NameRef(name_ref) => {
106 let class = NameClass::classify(sema, &name)?; 106 NameRefClass::classify(sema, &name_ref)?.referenced(sema.db)
107 Some(class.referenced_or_defined(sema.db)) 107 }
108 } else if let Some(lifetime) = 108 ast::NameLike::Name(name) => {
109 sema.find_node_at_offset_with_descend::<ast::Lifetime>(&syntax, position.offset) 109 NameClass::classify(sema, &name)?.referenced_or_defined(sema.db)
110 { 110 }
111 let def = if let Some(def) = 111 ast::NameLike::Lifetime(lifetime) => NameRefClass::classify_lifetime(sema, &lifetime)
112 NameRefClass::classify_lifetime(sema, &lifetime).map(|class| class.referenced(sema.db)) 112 .map(|class| class.referenced(sema.db))
113 { 113 .or_else(|| {
114 def 114 NameClass::classify_lifetime(sema, &lifetime)
115 } else { 115 .map(|class| class.referenced_or_defined(sema.db))
116 NameClass::classify_lifetime(sema, &lifetime)?.referenced_or_defined(sema.db) 116 })?,
117 }; 117 };
118 Some(def) 118 Some(def)
119 } else if let Some(name_ref) =
120 sema.find_node_at_offset_with_descend::<ast::NameRef>(&syntax, position.offset)
121 {
122 let class = NameRefClass::classify(sema, &name_ref)?;
123 Some(class.referenced(sema.db))
124 } else {
125 None
126 }
127} 119}
128 120
129fn decl_access(def: &Definition, syntax: &SyntaxNode, range: TextRange) -> Option<ReferenceAccess> { 121fn decl_access(def: &Definition, syntax: &SyntaxNode, range: TextRange) -> Option<ReferenceAccess> {