Skip to content

Commit d855280

Browse files
bors[bot]bnjjj
andauthored
Merge #4285
4285: add support of cfg attributes on enum variants r=edwin0cheng a=bnjjj close #4279 Co-authored-by: Benjamin Coenen <[email protected]>
2 parents 57ec813 + bed115d commit d855280

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

crates/ra_hir_def/src/adt.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,13 @@ fn lower_enum(
117117
ast: &InFile<ast::EnumDef>,
118118
module_id: ModuleId,
119119
) {
120-
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 =
122+
ast.value.variant_list().into_iter().flat_map(|it| it.variants()).filter(|var| {
123+
let attrs = expander.parse_attrs(var);
124+
expander.is_cfg_enabled(&attrs)
125+
});
126+
for var in variants {
121127
trace.alloc(
122128
|| var.clone(),
123129
|| EnumVariantData {

crates/ra_hir_ty/src/tests.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,33 @@ fn no_such_field_with_feature_flag_diagnostics() {
360360
assert_snapshot!(diagnostics, @r###""###);
361361
}
362362

363+
#[test]
364+
fn no_such_field_enum_with_feature_flag_diagnostics() {
365+
let diagnostics = TestDB::with_files(
366+
r#"
367+
//- /lib.rs crate:foo cfg:feature=foo
368+
enum Foo {
369+
#[cfg(not(feature = "foo"))]
370+
Buz,
371+
#[cfg(feature = "foo")]
372+
Bar,
373+
Baz
374+
}
375+
376+
fn test_fn(f: Foo) {
377+
match f {
378+
Foo::Bar => {},
379+
Foo::Baz => {},
380+
}
381+
}
382+
"#,
383+
)
384+
.diagnostics()
385+
.0;
386+
387+
assert_snapshot!(diagnostics, @r###""###);
388+
}
389+
363390
#[test]
364391
fn no_such_field_with_feature_flag_diagnostics_on_struct_lit() {
365392
let diagnostics = TestDB::with_files(

0 commit comments

Comments
 (0)