about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkraktus <kraktus@users.noreply.github.com>2022-09-10 11:36:31 +0200
committerkraktus <kraktus@users.noreply.github.com>2022-09-10 11:42:37 +0200
commitc433d542cf64304d2f701c42165bbb4ae55c0309 (patch)
tree293fa61a3ba0c365357b9f0a18e3f518cb9d76fb
parent5652ccbc0ff4e3895caca34a147db04c40d734c6 (diff)
downloadrust-c433d542cf64304d2f701c42165bbb4ae55c0309.tar.gz
rust-c433d542cf64304d2f701c42165bbb4ae55c0309.zip
Do not lint `use_self` in proc macro expansion
-rw-r--r--clippy_lints/src/use_self.rs5
-rw-r--r--tests/ui/use_self.fixed9
-rw-r--r--tests/ui/use_self.rs9
3 files changed, 21 insertions, 2 deletions
diff --git a/clippy_lints/src/use_self.rs b/clippy_lints/src/use_self.rs
index 486ea5e5ccf..d1c00341818 100644
--- a/clippy_lints/src/use_self.rs
+++ b/clippy_lints/src/use_self.rs
@@ -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,
diff --git a/tests/ui/use_self.fixed b/tests/ui/use_self.fixed
index 4f80aaecc90..37986187da1 100644
--- a/tests/ui/use_self.fixed
+++ b/tests/ui/use_self.fixed
@@ -608,3 +608,12 @@ mod issue8845 {
         }
     }
 }
+
+mod issue6902 {
+    use serde::Serialize;
+
+    #[derive(Serialize)]
+    pub enum Foo {
+        Bar = 1,
+    }
+}
diff --git a/tests/ui/use_self.rs b/tests/ui/use_self.rs
index 52da72db53c..1b2b3337c92 100644
--- a/tests/ui/use_self.rs
+++ b/tests/ui/use_self.rs
@@ -608,3 +608,12 @@ mod issue8845 {
         }
     }
 }
+
+mod issue6902 {
+    use serde::Serialize;
+
+    #[derive(Serialize)]
+    pub enum Foo {
+        Bar = 1,
+    }
+}