about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-09-23 15:16:15 +0000
committerbors <bors@rust-lang.org>2024-09-23 15:16:15 +0000
commitf75aebe7e7ccd56b4ac7932a872428c979360e1c (patch)
tree8771f8b06cf22d434b387a639bfb534e4c85a7f9
parentfc58c94f3e4c52d73beef44b135a32e093c921d5 (diff)
parent26fdbf43f7cdeec63158f793d343c7819f347f6c (diff)
downloadrust-f75aebe7e7ccd56b4ac7932a872428c979360e1c.tar.gz
rust-f75aebe7e7ccd56b4ac7932a872428c979360e1c.zip
Auto merge of #18172 - lnicola:expect-attr-completions, r=davidbarsky
fix: Support expect in attribute completion and hover

Fixes #18171
-rw-r--r--src/tools/rust-analyzer/crates/ide-completion/src/completions/attribute.rs5
-rw-r--r--src/tools/rust-analyzer/crates/ide-completion/src/tests/attribute.rs22
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/hover/render.rs2
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/hover/tests.rs28
4 files changed, 52 insertions, 5 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/completions/attribute.rs b/src/tools/rust-analyzer/crates/ide-completion/src/completions/attribute.rs
index 9821fb4a2fa..d0b489c4e83 100644
--- a/src/tools/rust-analyzer/crates/ide-completion/src/completions/attribute.rs
+++ b/src/tools/rust-analyzer/crates/ide-completion/src/completions/attribute.rs
@@ -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
@@ -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" })
     };
 }
 
@@ -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"),
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/tests/attribute.rs b/src/tools/rust-analyzer/crates/ide-completion/src/tests/attribute.rs
index 351abe9850b..1bbe097cc6c 100644
--- a/src/tools/rust-analyzer/crates/ide-completion/src/tests/attribute.rs
+++ b/src/tools/rust-analyzer/crates/ide-completion/src/tests/attribute.rs
@@ -26,6 +26,7 @@ struct Foo;
             at doc = "…"
             at doc(alias = "…")
             at doc(hidden)
+            at expect(…)
             at forbid(…)
             at must_use
             at no_mangle
@@ -75,6 +76,7 @@ fn with_existing_attr() {
             at cfg(…)
             at cfg_attr(…)
             at deny(…)
+            at expect(…)
             at forbid(…)
             at warn(…)
             kw crate::
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -299,6 +309,7 @@ struct Foo;
             at doc = "…"
             at doc(alias = "…")
             at doc(hidden)
+            at expect(…)
             at forbid(…)
             at must_use
             at no_mangle
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -509,6 +528,7 @@ fn attr_on_variant() {
             at cfg(…)
             at cfg_attr(…)
             at deny(…)
+            at expect(…)
             at forbid(…)
             at non_exhaustive
             at warn(…)
@@ -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 = "…"
@@ -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
diff --git a/src/tools/rust-analyzer/crates/ide/src/hover/render.rs b/src/tools/rust-analyzer/crates/ide/src/hover/render.rs
index b02e9b0f073..83adf6548a8 100644
--- a/src/tools/rust-analyzer/crates/ide/src/hover/render.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/hover/render.rs
@@ -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))
diff --git a/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs b/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
index 8805ead818a..cca62d2181f 100644
--- a/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
@@ -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]
@@ -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]