about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVictor Song <vsong1618@gmail.com>2024-02-17 17:19:19 -0600
committerVictor Song <vsong1618@gmail.com>2024-02-18 05:33:50 -0600
commitd1e8a5956ffd73e65288b447c68ac11a7ac26577 (patch)
tree64f63d78a410e2060a30307a4464d5b2641d9a33
parent5471e0645a497ab331ae38adc965aa15b74aa8c9 (diff)
downloadrust-d1e8a5956ffd73e65288b447c68ac11a7ac26577.tar.gz
rust-d1e8a5956ffd73e65288b447c68ac11a7ac26577.zip
fix: make `#[allow]` work on field for `pub_underscore_fields`
Add test for future regression
-rw-r--r--clippy_lints/src/pub_underscore_fields.rs10
-rw-r--r--tests/ui-toml/pub_underscore_fields/pub_underscore_fields.rs6
2 files changed, 12 insertions, 4 deletions
diff --git a/clippy_lints/src/pub_underscore_fields.rs b/clippy_lints/src/pub_underscore_fields.rs
index 88b5a6cfe2a..d20d4a605a2 100644
--- a/clippy_lints/src/pub_underscore_fields.rs
+++ b/clippy_lints/src/pub_underscore_fields.rs
@@ -1,6 +1,6 @@
 use clippy_config::types::PubUnderscoreFieldsBehaviour;
 use clippy_utils::attrs::is_doc_hidden;
-use clippy_utils::diagnostics::span_lint_and_help;
+use clippy_utils::diagnostics::span_lint_hir_and_then;
 use clippy_utils::is_path_lang_item;
 use rustc_hir::{FieldDef, Item, ItemKind, LangItem};
 use rustc_lint::{LateContext, LateLintPass};
@@ -69,13 +69,15 @@ impl<'tcx> LateLintPass<'tcx> for PubUnderscoreFields {
                 // We ignore fields that are `PhantomData`.
                 && !is_path_lang_item(cx, field.ty, LangItem::PhantomData)
             {
-                span_lint_and_help(
+                span_lint_hir_and_then(
                     cx,
                     PUB_UNDERSCORE_FIELDS,
+                    field.hir_id,
                     field.vis_span.to(field.ident.span),
                     "field marked as public but also inferred as unused because it's prefixed with `_`",
-                    None,
-                    "consider removing the underscore, or making the field private",
+                    |diag| {
+                        diag.help("consider removing the underscore, or making the field private");
+                    },
                 );
             }
         }
diff --git a/tests/ui-toml/pub_underscore_fields/pub_underscore_fields.rs b/tests/ui-toml/pub_underscore_fields/pub_underscore_fields.rs
index 1d8fee7daad..4ee8dbb8834 100644
--- a/tests/ui-toml/pub_underscore_fields/pub_underscore_fields.rs
+++ b/tests/ui-toml/pub_underscore_fields/pub_underscore_fields.rs
@@ -63,4 +63,10 @@ fn main() {
         _pub: String,
         pub(crate) _mark: PhantomData<u8>,
     }
+
+    // shouldn't warn when `#[allow]` is used on field level
+    pub struct AllowedViolations {
+        #[allow(clippy::pub_underscore_fields)]
+        pub _first: u32,
+    }
 }