Auto merge of #9454 - kraktus:use_self, r=flip1995
Do not lint `use_self` in proc macro expansion fix https://github.com/rust-lang/rust-clippy/issues/9440 fix https://github.com/rust-lang/rust-clippy/issues/8910 fix https://github.com/rust-lang/rust-clippy/issues/6902 changelog: [`use_self`]: Do not lint in proc macro expansion
This commit is contained in:
commit
2e55b42dd7
3 changed files with 21 additions and 5 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||
use clippy_utils::ty::same_type_and_consts;
|
||||
use clippy_utils::{meets_msrv, msrvs};
|
||||
use clippy_utils::{is_from_proc_macro, meets_msrv, msrvs};
|
||||
use if_chain::if_chain;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::Applicability;
|
||||
|
|
@ -87,7 +87,7 @@ impl_lint_pass!(UseSelf => [USE_SELF]);
|
|||
const SEGMENTS_MSG: &str = "segments should be composed of at least 1 element";
|
||||
|
||||
impl<'tcx> LateLintPass<'tcx> for UseSelf {
|
||||
fn check_item(&mut self, _cx: &LateContext<'_>, item: &Item<'_>) {
|
||||
fn check_item(&mut self, cx: &LateContext<'tcx>, item: &Item<'tcx>) {
|
||||
if matches!(item.kind, ItemKind::OpaqueTy(_)) {
|
||||
// skip over `ItemKind::OpaqueTy` in order to lint `foo() -> impl <..>`
|
||||
return;
|
||||
|
|
@ -103,6 +103,7 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf {
|
|||
if parameters.as_ref().map_or(true, |params| {
|
||||
!params.parenthesized && !params.args.iter().any(|arg| matches!(arg, GenericArg::Lifetime(_)))
|
||||
});
|
||||
if !is_from_proc_macro(cx, item); // expensive, should be last check
|
||||
then {
|
||||
StackItem::Check {
|
||||
impl_id: item.def_id,
|
||||
|
|
@ -213,9 +214,6 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf {
|
|||
hir_ty_to_ty(cx.tcx, hir_ty)
|
||||
};
|
||||
if same_type_and_consts(ty, cx.tcx.type_of(impl_id));
|
||||
let hir = cx.tcx.hir();
|
||||
// prevents false positive on `#[derive(serde::Deserialize)]`
|
||||
if !hir.span(hir.get_parent_node(hir_ty.hir_id)).in_derive_expansion();
|
||||
then {
|
||||
span_lint(cx, hir_ty.span);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue