diff options
author | Aleksey Kladov <[email protected]> | 2019-01-24 20:32:41 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-01-24 20:32:41 +0000 |
commit | 4c514a3e02b019cdd3a17c9bcd78d93c210ab267 (patch) | |
tree | acd4a571cec5c44d1ccbc705578f47a898da4139 /crates/ra_hir/src/adt.rs | |
parent | 11dda8a0fb905a1b41a64001d564632eb062b9aa (diff) |
move enum variant to the new API
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r-- | crates/ra_hir/src/adt.rs | 64 |
1 files changed, 19 insertions, 45 deletions
diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index 17ece93a7..b2631d6a6 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs | |||
@@ -4,14 +4,12 @@ | |||
4 | use std::sync::Arc; | 4 | use std::sync::Arc; |
5 | 5 | ||
6 | use ra_syntax::{ | 6 | use ra_syntax::{ |
7 | SyntaxNode, | 7 | ast::{self, NameOwner, StructFlavor} |
8 | ast::{self, NameOwner, StructFlavor, AstNode} | ||
9 | }; | 8 | }; |
10 | 9 | ||
11 | use crate::{ | 10 | use crate::{ |
12 | DefId, DefLoc, Name, AsName, Struct, Enum, EnumVariant, Module, HirFileId, | 11 | Name, AsName, Struct, Enum, EnumVariant, Module, HirFileId, |
13 | HirDatabase, DefKind, | 12 | HirDatabase, |
14 | SourceItemId, | ||
15 | type_ref::TypeRef, | 13 | type_ref::TypeRef, |
16 | ids::ItemLoc, | 14 | ids::ItemLoc, |
17 | }; | 15 | }; |
@@ -66,26 +64,17 @@ impl StructData { | |||
66 | } | 64 | } |
67 | } | 65 | } |
68 | 66 | ||
69 | fn get_def_id( | 67 | impl EnumVariant { |
70 | db: &impl HirDatabase, | 68 | pub(crate) fn from_ast( |
71 | module: Module, | 69 | db: &impl HirDatabase, |
72 | file_id: HirFileId, | 70 | module: Module, |
73 | node: &SyntaxNode, | 71 | file_id: HirFileId, |
74 | expected_kind: DefKind, | 72 | ast: &ast::EnumVariant, |
75 | ) -> DefId { | 73 | ) -> EnumVariant { |
76 | let file_items = db.file_items(file_id); | 74 | let loc = ItemLoc::from_ast(db, module, file_id, ast); |
77 | 75 | let id = db.as_ref().enum_variants.loc2id(&loc); | |
78 | let item_id = file_items.id_of(file_id, node); | 76 | EnumVariant { id } |
79 | let source_item_id = SourceItemId { | 77 | } |
80 | file_id, | ||
81 | item_id: Some(item_id), | ||
82 | }; | ||
83 | let loc = DefLoc { | ||
84 | module, | ||
85 | kind: expected_kind, | ||
86 | source_item_id, | ||
87 | }; | ||
88 | loc.id(db) | ||
89 | } | 78 | } |
90 | 79 | ||
91 | #[derive(Debug, Clone, PartialEq, Eq)] | 80 | #[derive(Debug, Clone, PartialEq, Eq)] |
@@ -107,17 +96,7 @@ impl EnumData { | |||
107 | vl.variants() | 96 | vl.variants() |
108 | .filter_map(|variant_def| { | 97 | .filter_map(|variant_def| { |
109 | let name = variant_def.name().map(|n| n.as_name()); | 98 | let name = variant_def.name().map(|n| n.as_name()); |
110 | 99 | name.map(|n| (n, EnumVariant::from_ast(db, module, file_id, variant_def))) | |
111 | name.map(|n| { | ||
112 | let def_id = get_def_id( | ||
113 | db, | ||
114 | module, | ||
115 | file_id, | ||
116 | variant_def.syntax(), | ||
117 | DefKind::EnumVariant, | ||
118 | ); | ||
119 | (n, EnumVariant::new(def_id)) | ||
120 | }) | ||
121 | }) | 100 | }) |
122 | .collect() | 101 | .collect() |
123 | } else { | 102 | } else { |
@@ -148,17 +127,12 @@ impl EnumVariantData { | |||
148 | 127 | ||
149 | pub(crate) fn enum_variant_data_query( | 128 | pub(crate) fn enum_variant_data_query( |
150 | db: &impl HirDatabase, | 129 | db: &impl HirDatabase, |
151 | def_id: DefId, | 130 | var: EnumVariant, |
152 | ) -> Arc<EnumVariantData> { | 131 | ) -> Arc<EnumVariantData> { |
153 | let def_loc = def_id.loc(db); | 132 | let (file_id, variant_def) = var.source(db); |
154 | assert!(def_loc.kind == DefKind::EnumVariant); | ||
155 | let syntax = db.file_item(def_loc.source_item_id); | ||
156 | let variant_def = ast::EnumVariant::cast(&syntax) | ||
157 | .expect("enum variant def should point to EnumVariant node"); | ||
158 | let enum_def = variant_def.parent_enum(); | 133 | let enum_def = variant_def.parent_enum(); |
159 | let e = Enum::from_ast(db, def_loc.module, def_loc.source_item_id.file_id, enum_def); | 134 | let e = Enum::from_ast(db, var.module(db), file_id, enum_def); |
160 | 135 | Arc::new(EnumVariantData::new(&*variant_def, e)) | |
161 | Arc::new(EnumVariantData::new(variant_def, e)) | ||
162 | } | 136 | } |
163 | } | 137 | } |
164 | 138 | ||