Use Expander for cfg handling in structs

This commit is contained in:
Aleksey Kladov 2020-04-11 17:17:12 +02:00
parent ac21100f32
commit b8eb1597c9

View File

@ -4,7 +4,6 @@
use either::Either;
use hir_expand::{
hygiene::Hygiene,
name::{AsName, Name},
InFile,
};
@ -13,7 +12,7 @@
use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner, VisibilityOwner};
use crate::{
attr::Attrs, db::DefDatabase, src::HasChildSource, src::HasSource, trace::Trace,
body::Expander, db::DefDatabase, src::HasChildSource, src::HasSource, trace::Trace,
type_ref::TypeRef, visibility::RawVisibility, EnumId, HasModule, LocalEnumVariantId,
LocalStructFieldId, Lookup, ModuleId, StructId, UnionId, VariantId,
};
@ -125,8 +124,9 @@ fn lower_enum(
impl VariantData {
fn new(db: &dyn DefDatabase, flavor: InFile<ast::StructKind>, module_id: ModuleId) -> Self {
let mut expander = Expander::new(db, flavor.file_id, module_id);
let mut trace = Trace::new_for_arena();
match lower_struct(db, &mut trace, &flavor, module_id) {
match lower_struct(db, &mut expander, &mut trace, &flavor) {
StructKind::Tuple => VariantData::Tuple(trace.into_arena()),
StructKind::Record => VariantData::Record(trace.into_arena()),
StructKind::Unit => VariantData::Unit,
@ -178,8 +178,9 @@ fn child_source(&self, db: &dyn DefDatabase) -> InFile<ArenaMap<Self::ChildId, S
it.lookup(db).container.module(db),
),
};
let mut expander = Expander::new(db, src.file_id, module_id);
let mut trace = Trace::new_for_map();
lower_struct(db, &mut trace, &src, module_id);
lower_struct(db, &mut expander, &mut trace, &src);
src.with_value(trace.into_map())
}
}
@ -193,16 +194,15 @@ pub enum StructKind {
fn lower_struct(
db: &dyn DefDatabase,
expander: &mut Expander,
trace: &mut Trace<StructFieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>,
ast: &InFile<ast::StructKind>,
module_id: ModuleId,
) -> StructKind {
let crate_graph = db.crate_graph();
match &ast.value {
ast::StructKind::Tuple(fl) => {
for (i, fd) in fl.fields().enumerate() {
let attrs = Attrs::new(&fd, &Hygiene::new(db.upcast(), ast.file_id));
if !attrs.is_cfg_enabled(&crate_graph[module_id.krate].cfg_options) {
let attrs = expander.parse_attrs(&fd);
if !expander.check_cfg(&attrs) {
continue;
}
@ -219,8 +219,8 @@ fn lower_struct(
}
ast::StructKind::Record(fl) => {
for fd in fl.fields() {
let attrs = Attrs::new(&fd, &Hygiene::new(db.upcast(), ast.file_id));
if !attrs.is_cfg_enabled(&crate_graph[module_id.krate].cfg_options) {
let attrs = expander.parse_attrs(&fd);
if !expander.check_cfg(&attrs) {
continue;
}