diff options
author | Aleksey Kladov <[email protected]> | 2020-02-28 14:27:52 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-02-28 14:27:52 +0000 |
commit | 209eb32796c6fd56d1b378690c807cf73ce54235 (patch) | |
tree | a7bc47a44969c8c236289bb3750c819a510dc5c4 /crates/ra_ide_db/src/defs.rs | |
parent | 9ef6359950fa2f3ecb9a7d4120f01e4baeaad978 (diff) |
Classify name takes const patterns into account
Diffstat (limited to 'crates/ra_ide_db/src/defs.rs')
-rw-r--r-- | crates/ra_ide_db/src/defs.rs | 27 |
1 files changed, 26 insertions, 1 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 | ||
71 | pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<NameDefinition> { | 71 | pub enum NameClass { |
72 | NameDefinition(NameDefinition), | ||
73 | /// `None` in `if let None = Some(82) {}` | ||
74 | ConstReference(NameDefinition), | ||
75 | } | ||
76 | |||
77 | impl 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 | |||
92 | pub fn classify_name(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Option<NameClass> { | ||
93 | classify_name_inner(sema, name).map(NameClass::NameDefinition) | ||
94 | } | ||
95 | |||
96 | fn 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 | ||