aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/adt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/adt.rs')
-rw-r--r--crates/ra_hir_def/src/adt.rs33
1 files changed, 23 insertions, 10 deletions
diff --git a/crates/ra_hir_def/src/adt.rs b/crates/ra_hir_def/src/adt.rs
index 753becc3d..2bc34d449 100644
--- a/crates/ra_hir_def/src/adt.rs
+++ b/crates/ra_hir_def/src/adt.rs
@@ -12,9 +12,15 @@ use ra_prof::profile;
12use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner, VisibilityOwner}; 12use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner, VisibilityOwner};
13 13
14use crate::{ 14use crate::{
15 body::CfgExpander, db::DefDatabase, src::HasChildSource, src::HasSource, trace::Trace, 15 body::{CfgExpander, LowerCtx},
16 type_ref::TypeRef, visibility::RawVisibility, EnumId, HasModule, LocalEnumVariantId, 16 db::DefDatabase,
17 LocalFieldId, Lookup, ModuleId, StructId, UnionId, VariantId, 17 src::HasChildSource,
18 src::HasSource,
19 trace::Trace,
20 type_ref::TypeRef,
21 visibility::RawVisibility,
22 EnumId, HasModule, LocalEnumVariantId, LocalFieldId, Lookup, ModuleId, StructId, UnionId,
23 VariantId,
18}; 24};
19 25
20/// Note that we use `StructData` for unions as well! 26/// Note that we use `StructData` for unions as well!
@@ -111,7 +117,14 @@ fn lower_enum(
111 ast: &InFile<ast::EnumDef>, 117 ast: &InFile<ast::EnumDef>,
112 module_id: ModuleId, 118 module_id: ModuleId,
113) { 119) {
114 for var in ast.value.variant_list().into_iter().flat_map(|it| it.variants()) { 120 let expander = CfgExpander::new(db, ast.file_id, module_id.krate);
121 let variants = ast
122 .value
123 .variant_list()
124 .into_iter()
125 .flat_map(|it| it.variants())
126 .filter(|var| expander.is_cfg_enabled(var));
127 for var in variants {
115 trace.alloc( 128 trace.alloc(
116 || var.clone(), 129 || var.clone(),
117 || EnumVariantData { 130 || EnumVariantData {
@@ -198,11 +211,12 @@ fn lower_struct(
198 trace: &mut Trace<FieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>, 211 trace: &mut Trace<FieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>,
199 ast: &InFile<ast::StructKind>, 212 ast: &InFile<ast::StructKind>,
200) -> StructKind { 213) -> StructKind {
214 let ctx = LowerCtx::new(db, ast.file_id);
215
201 match &ast.value { 216 match &ast.value {
202 ast::StructKind::Tuple(fl) => { 217 ast::StructKind::Tuple(fl) => {
203 for (i, fd) in fl.fields().enumerate() { 218 for (i, fd) in fl.fields().enumerate() {
204 let attrs = expander.parse_attrs(&fd); 219 if !expander.is_cfg_enabled(&fd) {
205 if !expander.is_cfg_enabled(&attrs) {
206 continue; 220 continue;
207 } 221 }
208 222
@@ -210,7 +224,7 @@ fn lower_struct(
210 || Either::Left(fd.clone()), 224 || Either::Left(fd.clone()),
211 || FieldData { 225 || FieldData {
212 name: Name::new_tuple_field(i), 226 name: Name::new_tuple_field(i),
213 type_ref: TypeRef::from_ast_opt(fd.type_ref()), 227 type_ref: TypeRef::from_ast_opt(&ctx, fd.type_ref()),
214 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())), 228 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())),
215 }, 229 },
216 ); 230 );
@@ -219,8 +233,7 @@ fn lower_struct(
219 } 233 }
220 ast::StructKind::Record(fl) => { 234 ast::StructKind::Record(fl) => {
221 for fd in fl.fields() { 235 for fd in fl.fields() {
222 let attrs = expander.parse_attrs(&fd); 236 if !expander.is_cfg_enabled(&fd) {
223 if !expander.is_cfg_enabled(&attrs) {
224 continue; 237 continue;
225 } 238 }
226 239
@@ -228,7 +241,7 @@ fn lower_struct(
228 || Either::Right(fd.clone()), 241 || Either::Right(fd.clone()),
229 || FieldData { 242 || FieldData {
230 name: fd.name().map(|n| n.as_name()).unwrap_or_else(Name::missing), 243 name: fd.name().map(|n| n.as_name()).unwrap_or_else(Name::missing),
231 type_ref: TypeRef::from_ast_opt(fd.ascribed_type()), 244 type_ref: TypeRef::from_ast_opt(&ctx, fd.ascribed_type()),
232 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())), 245 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())),
233 }, 246 },
234 ); 247 );