Skip to content

Commit

Permalink
Auto merge of rust-lang#18172 - lnicola:expect-attr-completions, r=da…
Browse files Browse the repository at this point in the history
…vidbarsky

fix: Support expect in attribute completion and hover

Fixes rust-lang#18171
  • Loading branch information
bors committed Sep 23, 2024
2 parents fc58c94 + 26fdbf4 commit f75aebe
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub(crate) fn complete_known_attribute_input(
&parse_tt_as_comma_sep_paths(tt, ctx.edition)?,
FEATURES,
),
"allow" | "warn" | "deny" | "forbid" => {
"allow" | "expect" | "deny" | "forbid" | "warn" => {
let existing_lints = parse_tt_as_comma_sep_paths(tt, ctx.edition)?;

let lints: Vec<Lint> = CLIPPY_LINT_GROUPS
Expand Down Expand Up @@ -222,7 +222,7 @@ macro_rules! attrs {
[@ {} {$($tt:tt)*}] => { &[$($tt)*] as _ };
// starting matcher
[$($tt:tt),*] => {
attrs!(@ { $($tt)* } { "allow", "cfg", "cfg_attr", "deny", "forbid", "warn" })
attrs!(@ { $($tt)* } { "allow", "cfg", "cfg_attr", "deny", "expect", "forbid", "warn" })
};
}

Expand Down Expand Up @@ -303,6 +303,7 @@ const ATTRIBUTES: &[AttrCompletion] = &[
attr(r#"doc = "…""#, Some("doc"), Some(r#"doc = "${0:docs}""#)),
attr(r#"doc(alias = "…")"#, Some("docalias"), Some(r#"doc(alias = "${0:docs}")"#)),
attr(r#"doc(hidden)"#, Some("dochidden"), Some(r#"doc(hidden)"#)),
attr("expect(…)", Some("expect"), Some("expect(${0:lint})")),
attr(
r#"export_name = "…""#,
Some("export_name"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ struct Foo;
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand Down Expand Up @@ -75,6 +76,7 @@ fn with_existing_attr() {
at cfg(…)
at cfg_attr(…)
at deny(…)
at expect(…)
at forbid(…)
at warn(…)
kw crate::
Expand All @@ -97,6 +99,7 @@ fn attr_on_source_file() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at feature(…)
at forbid(…)
at must_use
Expand Down Expand Up @@ -127,6 +130,7 @@ fn attr_on_module() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at macro_use
at must_use
Expand All @@ -149,6 +153,7 @@ fn attr_on_module() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_implicit_prelude
Expand All @@ -174,6 +179,7 @@ fn attr_on_macro_rules() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at macro_export
at macro_use
Expand All @@ -199,6 +205,7 @@ fn attr_on_macro_def() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand All @@ -222,6 +229,7 @@ fn attr_on_extern_crate() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at macro_use
at must_use
Expand All @@ -246,6 +254,7 @@ fn attr_on_use() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand All @@ -269,6 +278,7 @@ fn attr_on_type_alias() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand Down Expand Up @@ -299,6 +309,7 @@ struct Foo;
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand Down Expand Up @@ -326,6 +337,7 @@ fn attr_on_enum() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand All @@ -351,6 +363,7 @@ fn attr_on_const() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand All @@ -374,6 +387,7 @@ fn attr_on_static() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at export_name = "…"
at forbid(…)
at global_allocator
Expand Down Expand Up @@ -402,6 +416,7 @@ fn attr_on_trait() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at must_use
Expand All @@ -427,6 +442,7 @@ fn attr_on_impl() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand All @@ -446,6 +462,7 @@ fn attr_on_impl() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at must_use
at no_mangle
Expand All @@ -469,6 +486,7 @@ fn attr_on_extern_block() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at link
at must_use
Expand All @@ -489,6 +507,7 @@ fn attr_on_extern_block() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at forbid(…)
at link
at must_use
Expand All @@ -509,6 +528,7 @@ fn attr_on_variant() {
at cfg(…)
at cfg_attr(…)
at deny(…)
at expect(…)
at forbid(…)
at non_exhaustive
at warn(…)
Expand All @@ -532,6 +552,7 @@ fn attr_on_fn() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at export_name = "…"
at forbid(…)
at ignore = "…"
Expand Down Expand Up @@ -572,6 +593,7 @@ fn attr_in_source_file_end() {
at doc = "…"
at doc(alias = "…")
at doc(hidden)
at expect(…)
at export_name = "…"
at forbid(…)
at global_allocator
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/ide/src/hover/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ pub(super) fn try_for_lint(attr: &ast::Attr, token: &SyntaxToken) -> Option<Hove
}
let (is_clippy, lints) = match &*path {
"feature" => (false, FEATURES),
"allow" | "deny" | "forbid" | "warn" => {
"allow" | "deny" | "expect" | "forbid" | "warn" => {
let is_clippy = algo::non_trivia_sibling(token.clone().into(), Direction::Prev)
.filter(|t| t.kind() == T![:])
.and_then(|t| algo::non_trivia_sibling(t, Direction::Prev))
Expand Down
28 changes: 26 additions & 2 deletions src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6336,7 +6336,19 @@ fn hover_lint() {
arithmetic operation overflows
"#]],
)
);
check(
r#"#![expect(arithmetic_overflow$0)]"#,
expect![[r#"
*arithmetic_overflow*
```
arithmetic_overflow
```
___
arithmetic operation overflows
"#]],
);
}

#[test]
Expand All @@ -6352,7 +6364,19 @@ fn hover_clippy_lint() {
Checks for `foo = bar; bar = foo` sequences.
"#]],
)
);
check(
r#"#![expect(clippy::almost_swapped$0)]"#,
expect![[r#"
*almost_swapped*
```
clippy::almost_swapped
```
___
Checks for `foo = bar; bar = foo` sequences.
"#]],
);
}

#[test]
Expand Down

0 comments on commit f75aebe

Please sign in to comment.