diff options
author | Aleksey Kladov <[email protected]> | 2019-11-27 18:32:33 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-11-27 18:35:06 +0000 |
commit | 757e593b253b4df7e6fc8bf15a4d4f34c9d484c5 (patch) | |
tree | d972d3a7e6457efdb5e0c558a8350db1818d07ae /crates/ra_ide_api/src/references/name_definition.rs | |
parent | d9a36a736bfb91578a36505e7237212959bb55fe (diff) |
rename ra_ide_api -> ra_ide
Diffstat (limited to 'crates/ra_ide_api/src/references/name_definition.rs')
-rw-r--r-- | crates/ra_ide_api/src/references/name_definition.rs | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/crates/ra_ide_api/src/references/name_definition.rs b/crates/ra_ide_api/src/references/name_definition.rs deleted file mode 100644 index 10d3a2364..000000000 --- a/crates/ra_ide_api/src/references/name_definition.rs +++ /dev/null | |||
@@ -1,83 +0,0 @@ | |||
1 | //! `NameDefinition` keeps information about the element we want to search references for. | ||
2 | //! The element is represented by `NameKind`. It's located inside some `container` and | ||
3 | //! has a `visibility`, which defines a search scope. | ||
4 | //! Note that the reference search is possible for not all of the classified items. | ||
5 | |||
6 | use hir::{ | ||
7 | Adt, AssocItem, GenericParam, HasSource, ImplBlock, Local, MacroDef, Module, ModuleDef, | ||
8 | StructField, VariantDef, | ||
9 | }; | ||
10 | use ra_syntax::{ast, ast::VisibilityOwner}; | ||
11 | |||
12 | use crate::db::RootDatabase; | ||
13 | |||
14 | #[derive(Debug, PartialEq, Eq)] | ||
15 | pub enum NameKind { | ||
16 | Macro(MacroDef), | ||
17 | Field(StructField), | ||
18 | AssocItem(AssocItem), | ||
19 | Def(ModuleDef), | ||
20 | SelfType(ImplBlock), | ||
21 | Local(Local), | ||
22 | GenericParam(GenericParam), | ||
23 | } | ||
24 | |||
25 | #[derive(PartialEq, Eq)] | ||
26 | pub(crate) struct NameDefinition { | ||
27 | pub visibility: Option<ast::Visibility>, | ||
28 | pub container: Module, | ||
29 | pub kind: NameKind, | ||
30 | } | ||
31 | |||
32 | pub(super) fn from_assoc_item(db: &RootDatabase, item: AssocItem) -> NameDefinition { | ||
33 | let container = item.module(db); | ||
34 | let visibility = match item { | ||
35 | AssocItem::Function(f) => f.source(db).value.visibility(), | ||
36 | AssocItem::Const(c) => c.source(db).value.visibility(), | ||
37 | AssocItem::TypeAlias(a) => a.source(db).value.visibility(), | ||
38 | }; | ||
39 | let kind = NameKind::AssocItem(item); | ||
40 | NameDefinition { kind, container, visibility } | ||
41 | } | ||
42 | |||
43 | pub(super) fn from_struct_field(db: &RootDatabase, field: StructField) -> NameDefinition { | ||
44 | let kind = NameKind::Field(field); | ||
45 | let parent = field.parent_def(db); | ||
46 | let container = parent.module(db); | ||
47 | let visibility = match parent { | ||
48 | VariantDef::Struct(s) => s.source(db).value.visibility(), | ||
49 | VariantDef::Union(e) => e.source(db).value.visibility(), | ||
50 | VariantDef::EnumVariant(e) => e.source(db).value.parent_enum().visibility(), | ||
51 | }; | ||
52 | NameDefinition { kind, container, visibility } | ||
53 | } | ||
54 | |||
55 | pub(super) fn from_module_def( | ||
56 | db: &RootDatabase, | ||
57 | def: ModuleDef, | ||
58 | module: Option<Module>, | ||
59 | ) -> NameDefinition { | ||
60 | let kind = NameKind::Def(def); | ||
61 | let (container, visibility) = match def { | ||
62 | ModuleDef::Module(it) => { | ||
63 | let container = it.parent(db).or_else(|| Some(it)).unwrap(); | ||
64 | let visibility = it.declaration_source(db).and_then(|s| s.value.visibility()); | ||
65 | (container, visibility) | ||
66 | } | ||
67 | ModuleDef::EnumVariant(it) => { | ||
68 | let container = it.module(db); | ||
69 | let visibility = it.source(db).value.parent_enum().visibility(); | ||
70 | (container, visibility) | ||
71 | } | ||
72 | ModuleDef::Function(it) => (it.module(db), it.source(db).value.visibility()), | ||
73 | ModuleDef::Const(it) => (it.module(db), it.source(db).value.visibility()), | ||
74 | ModuleDef::Static(it) => (it.module(db), it.source(db).value.visibility()), | ||
75 | ModuleDef::Trait(it) => (it.module(db), it.source(db).value.visibility()), | ||
76 | ModuleDef::TypeAlias(it) => (it.module(db), it.source(db).value.visibility()), | ||
77 | ModuleDef::Adt(Adt::Struct(it)) => (it.module(db), it.source(db).value.visibility()), | ||
78 | ModuleDef::Adt(Adt::Union(it)) => (it.module(db), it.source(db).value.visibility()), | ||
79 | ModuleDef::Adt(Adt::Enum(it)) => (it.module(db), it.source(db).value.visibility()), | ||
80 | ModuleDef::BuiltinType(..) => (module.unwrap(), None), | ||
81 | }; | ||
82 | NameDefinition { kind, container, visibility } | ||
83 | } | ||