aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_db
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-02-28 14:27:52 +0000
committerAleksey Kladov <[email protected]>2020-02-28 14:27:52 +0000
commit209eb32796c6fd56d1b378690c807cf73ce54235 (patch)
treea7bc47a44969c8c236289bb3750c819a510dc5c4 /crates/ra_ide_db
parent9ef6359950fa2f3ecb9a7d4120f01e4baeaad978 (diff)
Classify name takes const patterns into account
Diffstat (limited to 'crates/ra_ide_db')
-rw-r--r--crates/ra_ide_db/src/defs.rs27
-rw-r--r--crates/ra_ide_db/src/imports_locator.rs3
2 files changed, 28 insertions, 2 deletions
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs
index 484755158..3079d1197 100644
--- a/crates/ra_ide_db/src/defs.rs
+++ b/crates/ra_ide_db/src/defs.rs
@@ -68,7 +68,32 @@ impl NameDefinition {
68 } 68 }
69} 69}
70 70
71pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<NameDefinition> { 71pub enum NameClass {
72 NameDefinition(NameDefinition),
73 /// `None` in `if let None = Some(82) {}`
74 ConstReference(NameDefinition),
75}
76
77impl NameClass {
78 pub fn into_definition(self) -> Option<NameDefinition> {
79 match self {
80 NameClass::NameDefinition(it) => Some(it),
81 NameClass::ConstReference(_) => None,
82 }
83 }
84
85 pub fn definition(self) -> NameDefinition {
86 match self {
87 NameClass::NameDefinition(it) | NameClass::ConstReference(it) => it,
88 }
89 }
90}
91
92pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<NameClass> {
93 classify_name_inner(sema, name).map(NameClass::NameDefinition)
94}
95
96fn classify_name_inner(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<NameDefinition> {
72 let _p = profile("classify_name"); 97 let _p = profile("classify_name");
73 let parent = name.syntax().parent()?; 98 let parent = name.syntax().parent()?;
74 99
diff --git a/crates/ra_ide_db/src/imports_locator.rs b/crates/ra_ide_db/src/imports_locator.rs
index e590d2a5c..e5fc3c470 100644
--- a/crates/ra_ide_db/src/imports_locator.rs
+++ b/crates/ra_ide_db/src/imports_locator.rs
@@ -59,6 +59,7 @@ impl<'a> ImportsLocator<'a> {
59 } else { 59 } else {
60 candidate_node 60 candidate_node
61 }; 61 };
62 classify_name(&self.sema, &ast::Name::cast(candidate_name_node)?) 62 let name = ast::Name::cast(candidate_name_node)?;
63 classify_name(&self.sema, &name)?.into_definition()
63 } 64 }
64} 65}