From: Jonas Schievink Date: Thu, 18 Mar 2021 00:28:40 +0000 (+0100) Subject: Support `#[cfg]` on all associated items X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=94b3b32c9882ad206df4f11f2f8de0be70a615f4;p=rust.git Support `#[cfg]` on all associated items --- diff --git a/crates/hir_def/src/data.rs b/crates/hir_def/src/data.rs index e976e419ebc..2c70b3bc0e6 100644 --- a/crates/hir_def/src/data.rs +++ b/crates/hir_def/src/data.rs @@ -256,17 +256,17 @@ fn collect_items( let mut items = Vec::new(); for item in assoc_items { + let attrs = item_tree.attrs(db, module.krate, ModItem::from(item).into()); + if !attrs.is_cfg_enabled(&cfg_options) { + continue; + } + match item { AssocItem::Function(id) => { let item = &item_tree[id]; - let attrs = item_tree.attrs(db, module.krate, ModItem::from(id).into()); - if !attrs.is_cfg_enabled(&cfg_options) { - continue; - } let def = FunctionLoc { container, id: ItemTreeId::new(file_id, id) }.intern(db); items.push((item.name.clone(), def.into())); } - // FIXME: cfg? AssocItem::Const(id) => { let item = &item_tree[id]; let name = match item.name.clone() { diff --git a/crates/hir_ty/src/tests/simple.rs b/crates/hir_ty/src/tests/simple.rs index f5069eba51b..bcc43ed700e 100644 --- a/crates/hir_ty/src/tests/simple.rs +++ b/crates/hir_ty/src/tests/simple.rs @@ -2545,3 +2545,22 @@ fn test() { "#]], ) } + +#[test] +fn cfgd_out_assoc_items() { + check_types( + r#" +struct S; + +impl S { + #[cfg(FALSE)] + const C: S = S; +} + +fn f() { + S::C; + //^^^^ {unknown} +} + "#, + ) +}