1
Fork 0

Call LateLintPass::check_attribute from with_lint_attrs

This commit is contained in:
Alex Macleod 2023-09-10 18:17:47 +00:00
parent 6645a93cef
commit ce3b044298
4 changed files with 35 additions and 22 deletions

View file

@ -21,7 +21,6 @@ use rustc_data_structures::sync::join;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::def_id::{LocalDefId, LocalModDefId}; use rustc_hir::def_id::{LocalDefId, LocalModDefId};
use rustc_hir::intravisit as hir_visit; use rustc_hir::intravisit as hir_visit;
use rustc_hir::intravisit::Visitor;
use rustc_middle::hir::nested_filter; use rustc_middle::hir::nested_filter;
use rustc_middle::ty::{self, TyCtxt}; use rustc_middle::ty::{self, TyCtxt};
use rustc_session::lint::LintPass; use rustc_session::lint::LintPass;
@ -61,6 +60,9 @@ impl<'tcx, T: LateLintPass<'tcx>> LateContextAndPass<'tcx, T> {
self.context.last_node_with_lint_attrs = id; self.context.last_node_with_lint_attrs = id;
debug!("late context: enter_attrs({:?})", attrs); debug!("late context: enter_attrs({:?})", attrs);
lint_callback!(self, enter_lint_attrs, attrs); lint_callback!(self, enter_lint_attrs, attrs);
for attr in attrs {
lint_callback!(self, check_attribute, attr);
}
f(self); f(self);
debug!("late context: exit_attrs({:?})", attrs); debug!("late context: exit_attrs({:?})", attrs);
lint_callback!(self, exit_lint_attrs, attrs); lint_callback!(self, exit_lint_attrs, attrs);
@ -377,20 +379,18 @@ fn late_lint_mod_inner<'tcx, T: LateLintPass<'tcx>>(
let (module, _span, hir_id) = tcx.hir().get_module(module_def_id); let (module, _span, hir_id) = tcx.hir().get_module(module_def_id);
// There is no module lint that will have the crate itself as an item, so check it here. cx.with_lint_attrs(hir_id, |cx| {
if hir_id == hir::CRATE_HIR_ID { // There is no module lint that will have the crate itself as an item, so check it here.
lint_callback!(cx, check_crate,); if hir_id == hir::CRATE_HIR_ID {
} lint_callback!(cx, check_crate,);
cx.process_mod(module, hir_id);
// Visit the crate attributes
if hir_id == hir::CRATE_HIR_ID {
for attr in tcx.hir().attrs(hir::CRATE_HIR_ID).iter() {
cx.visit_attribute(attr)
} }
lint_callback!(cx, check_crate_post,);
} cx.process_mod(module, hir_id);
if hir_id == hir::CRATE_HIR_ID {
lint_callback!(cx, check_crate_post,);
}
});
} }
fn late_lint_crate<'tcx>(tcx: TyCtxt<'tcx>) { fn late_lint_crate<'tcx>(tcx: TyCtxt<'tcx>) {
@ -431,7 +431,6 @@ fn late_lint_crate_inner<'tcx, T: LateLintPass<'tcx>>(
// item), warn for it here. // item), warn for it here.
lint_callback!(cx, check_crate,); lint_callback!(cx, check_crate,);
tcx.hir().walk_toplevel_module(cx); tcx.hir().walk_toplevel_module(cx);
tcx.hir().walk_attributes(cx);
lint_callback!(cx, check_crate_post,); lint_callback!(cx, check_crate_post,);
}) })
} }

View file

@ -22,6 +22,13 @@ struct T4;
#[cfg_attr(panic = "unwind", expect(dead_code))] #[cfg_attr(panic = "unwind", expect(dead_code))]
struct CfgT; struct CfgT;
#[allow(clippy::allow_attributes, unused)]
struct Allowed;
#[expect(clippy::allow_attributes)]
#[allow(unused)]
struct Expected;
fn ignore_external() { fn ignore_external() {
external! { external! {
#[allow(clippy::needless_borrow)] // Should not lint #[allow(clippy::needless_borrow)] // Should not lint

View file

@ -22,6 +22,13 @@ struct T4;
#[cfg_attr(panic = "unwind", allow(dead_code))] #[cfg_attr(panic = "unwind", allow(dead_code))]
struct CfgT; struct CfgT;
#[allow(clippy::allow_attributes, unused)]
struct Allowed;
#[expect(clippy::allow_attributes)]
#[allow(unused)]
struct Expected;
fn ignore_external() { fn ignore_external() {
external! { external! {
#[allow(clippy::needless_borrow)] // Should not lint #[allow(clippy::needless_borrow)] // Should not lint

View file

@ -1,10 +1,3 @@
error: `clippy::restriction` is not meant to be enabled as a group
|
= note: because of the command line `--warn clippy::restriction`
= help: enable the restriction lints you need individually
= note: `-D clippy::blanket-clippy-restriction-lints` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::blanket_clippy_restriction_lints)]`
error: `clippy::restriction` is not meant to be enabled as a group error: `clippy::restriction` is not meant to be enabled as a group
--> $DIR/blanket_clippy_restriction_lints.rs:6:9 --> $DIR/blanket_clippy_restriction_lints.rs:6:9
| |
@ -12,6 +5,8 @@ LL | #![warn(clippy::restriction)]
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
| |
= help: enable the restriction lints you need individually = help: enable the restriction lints you need individually
= note: `-D clippy::blanket-clippy-restriction-lints` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::blanket_clippy_restriction_lints)]`
error: `clippy::restriction` is not meant to be enabled as a group error: `clippy::restriction` is not meant to be enabled as a group
--> $DIR/blanket_clippy_restriction_lints.rs:8:9 --> $DIR/blanket_clippy_restriction_lints.rs:8:9
@ -29,5 +24,10 @@ LL | #![forbid(clippy::restriction)]
| |
= help: enable the restriction lints you need individually = help: enable the restriction lints you need individually
error: `clippy::restriction` is not meant to be enabled as a group
|
= note: because of the command line `--warn clippy::restriction`
= help: enable the restriction lints you need individually
error: aborting due to 4 previous errors error: aborting due to 4 previous errors