aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/adt.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-24 20:32:41 +0000
committerAleksey Kladov <[email protected]>2019-01-24 20:32:41 +0000
commit4c514a3e02b019cdd3a17c9bcd78d93c210ab267 (patch)
treeacd4a571cec5c44d1ccbc705578f47a898da4139 /crates/ra_hir/src/adt.rs
parent11dda8a0fb905a1b41a64001d564632eb062b9aa (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.rs64
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 @@
4use std::sync::Arc; 4use std::sync::Arc;
5 5
6use ra_syntax::{ 6use ra_syntax::{
7 SyntaxNode, 7 ast::{self, NameOwner, StructFlavor}
8 ast::{self, NameOwner, StructFlavor, AstNode}
9}; 8};
10 9
11use crate::{ 10use 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
69fn get_def_id( 67impl 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