Add cfg_attr predicate completion

Example
---
```rust
#[cfg_attr($0, must_use)]
struct Foo;
```
This commit is contained in:
A4-Tacks 2025-09-04 14:57:41 +08:00
parent 1f4e5e82ff
commit b7a2f21d58
No known key found for this signature in database
GPG key ID: DBD861323040663B
2 changed files with 53 additions and 1 deletions

View file

@ -70,7 +70,7 @@ pub(crate) fn complete_known_attribute_input(
lint::complete_lint(acc, ctx, colon_prefix, &existing_lints, &lints);
}
["cfg"] => cfg::complete_cfg(acc, ctx),
["cfg"] | ["cfg_attr"] => cfg::complete_cfg(acc, ctx),
["macro_use"] => macro_use::complete_macro_use(
acc,
ctx,

View file

@ -835,6 +835,58 @@ mod cfg {
);
}
#[test]
fn inside_cfg_attr() {
check(
r#"
//- /main.rs cfg:test,dbg=false,opt_level=2
#[cfg_attr($0)]
"#,
expect![[r#"
ba dbg
ba opt_level
ba test
ba true
"#]],
);
check(
r#"
//- /main.rs cfg:test,dbg=false,opt_level=2
#[cfg_attr(b$0)]
"#,
expect![[r#"
ba dbg
ba opt_level
ba test
ba true
"#]],
);
check(
r#"
//- /main.rs cfg:test,dbg=false,opt_level=2
#[cfg_attr($0, allow(deprecated))]
"#,
expect![[r#"
ba dbg
ba opt_level
ba test
ba true
"#]],
);
check(
r#"
//- /main.rs cfg:test,dbg=false,opt_level=2
#[cfg_attr(b$0, allow(deprecated))]
"#,
expect![[r#"
ba dbg
ba opt_level
ba test
ba true
"#]],
);
}
#[test]
fn cfg_target_endian() {
check(