aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_db/src
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-03-03 17:22:52 +0000
committerAleksey Kladov <[email protected]>2020-03-03 17:22:52 +0000
commit7d71cc72b5902300ed03db409b2a858517a1f5e0 (patch)
tree8cc0425d7b25c5da3f6a633a3addfb38640c5002 /crates/ra_ide_db/src
parent674770ef0473cf938d734f54bcf33524d9fdf5f8 (diff)
Refactor reference search a bit
Diffstat (limited to 'crates/ra_ide_db/src')
-rw-r--r--crates/ra_ide_db/src/defs.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs
index 7b1030a14..8a5161dfe 100644
--- a/crates/ra_ide_db/src/defs.rs
+++ b/crates/ra_ide_db/src/defs.rs
@@ -6,7 +6,7 @@
6// FIXME: this badly needs rename/rewrite (matklad, 2020-02-06). 6// FIXME: this badly needs rename/rewrite (matklad, 2020-02-06).
7 7
8use hir::{ 8use hir::{
9 Adt, FieldSource, HasSource, ImplDef, Local, MacroDef, Module, ModuleDef, Semantics, 9 Adt, FieldSource, HasSource, ImplDef, Local, MacroDef, Module, ModuleDef, Name, Semantics,
10 StructField, TypeParam, 10 StructField, TypeParam,
11}; 11};
12use ra_prof::profile; 12use ra_prof::profile;
@@ -66,6 +66,32 @@ impl NameDefinition {
66 NameDefinition::TypeParam(_) => None, 66 NameDefinition::TypeParam(_) => None,
67 } 67 }
68 } 68 }
69
70 pub fn name(&self, db: &RootDatabase) -> Option<Name> {
71 let name = match self {
72 NameDefinition::Macro(it) => it.name(db)?,
73 NameDefinition::StructField(it) => it.name(db),
74 NameDefinition::ModuleDef(def) => match def {
75 hir::ModuleDef::Module(it) => it.name(db)?,
76 hir::ModuleDef::Function(it) => it.name(db),
77 hir::ModuleDef::Adt(def) => match def {
78 hir::Adt::Struct(it) => it.name(db),
79 hir::Adt::Union(it) => it.name(db),
80 hir::Adt::Enum(it) => it.name(db),
81 },
82 hir::ModuleDef::EnumVariant(it) => it.name(db),
83 hir::ModuleDef::Const(it) => it.name(db)?,
84 hir::ModuleDef::Static(it) => it.name(db)?,
85 hir::ModuleDef::Trait(it) => it.name(db),
86 hir::ModuleDef::TypeAlias(it) => it.name(db),
87 hir::ModuleDef::BuiltinType(_) => return None,
88 },
89 NameDefinition::SelfType(_) => return None,
90 NameDefinition::Local(it) => it.name(db)?,
91 NameDefinition::TypeParam(it) => it.name(db),
92 };
93 Some(name)
94 }
69} 95}
70 96
71pub enum NameClass { 97pub enum NameClass {