]> git.lizzy.rs Git - rust.git/commitdiff
Move type-checking logic in StaticConst to RedundantStaticLifetime.
authorkrk <keremkat@gmail.com>
Mon, 10 Jun 2019 17:01:05 +0000 (19:01 +0200)
committerflip1995 <hello@philkrones.com>
Fri, 14 Jun 2019 07:41:46 +0000 (09:41 +0200)
clippy_lints/src/const_static_lifetime.rs
clippy_lints/src/lib.rs
clippy_lints/src/redundant_static_lifetime.rs [new file with mode: 0644]

index fefd180953f29928fac540cf1e3098ec87d2b86c..a3f88114c3931a6232cf61b0cc5aa262627227c9 100644 (file)
@@ -1,7 +1,7 @@
-use crate::utils::{in_macro_or_desugar, snippet, span_lint_and_then};
+use crate::redundant_static_lifetime::RedundantStaticLifetime;
+use crate::utils::in_macro_or_desugar;
 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass};
 use rustc::{declare_lint_pass, declare_tool_lint};
-use rustc_errors::Applicability;
 use syntax::ast::*;
 
 declare_clippy_lint! {
 impl StaticConst {
     // Recursively visit types
     fn visit_type(&mut self, ty: &Ty, cx: &EarlyContext<'_>) {
-        match ty.node {
-            // Be careful of nested structures (arrays and tuples)
-            TyKind::Array(ref ty, _) => {
-                self.visit_type(&*ty, cx);
-            },
-            TyKind::Tup(ref tup) => {
-                for tup_ty in tup {
-                    self.visit_type(&*tup_ty, cx);
-                }
-            },
-            // This is what we are looking for !
-            TyKind::Rptr(ref optional_lifetime, ref borrow_type) => {
-                // Match the 'static lifetime
-                if let Some(lifetime) = *optional_lifetime {
-                    match borrow_type.ty.node {
-                        TyKind::Path(..) | TyKind::Slice(..) | TyKind::Array(..) | TyKind::Tup(..) => {
-                            if lifetime.ident.name == syntax::symbol::kw::StaticLifetime {
-                                let snip = snippet(cx, borrow_type.ty.span, "<type>");
-                                let sugg = format!("&{}", snip);
-                                span_lint_and_then(
-                                    cx,
-                                    CONST_STATIC_LIFETIME,
-                                    lifetime.ident.span,
-                                    "Constants have by default a `'static` lifetime",
-                                    |db| {
-                                        db.span_suggestion(
-                                            ty.span,
-                                            "consider removing `'static`",
-                                            sugg,
-                                            Applicability::MachineApplicable, //snippet
-                                        );
-                                    },
-                                );
-                            }
-                        },
-                        _ => {},
-                    }
-                }
-                self.visit_type(&*borrow_type.ty, cx);
-            },
-            TyKind::Slice(ref ty) => {
-                self.visit_type(ty, cx);
-            },
-            _ => {},
-        }
+        let mut rsl =
+            RedundantStaticLifetime::new(CONST_STATIC_LIFETIME, "Constants have by default a `'static` lifetime");
+        rsl.visit_type(ty, cx)
     }
 }
 
index 0b1c76859690060d8fa7476e2f4d9eca807d1ea9..563a8c196d56cea5460402336d577e075e711163 100644 (file)
@@ -141,6 +141,7 @@ macro_rules! declare_clippy_lint {
 mod consts;
 #[macro_use]
 mod utils;
+mod redundant_static_lifetime;
 
 // begin lints modules, do not remove this comment, it’s used in `update_lints`
 pub mod approx_const;
diff --git a/clippy_lints/src/redundant_static_lifetime.rs b/clippy_lints/src/redundant_static_lifetime.rs
new file mode 100644 (file)
index 0000000..efac8bf
--- /dev/null
@@ -0,0 +1,57 @@
+use crate::utils::{snippet, span_lint_and_then};
+use rustc::lint::{EarlyContext, Lint};
+use rustc_errors::Applicability;
+use syntax::ast::*;
+
+pub struct RedundantStaticLifetime {
+    lint: &'static Lint,
+    reason: &'static str,
+}
+
+impl RedundantStaticLifetime {
+    pub fn new(lint: &'static Lint, reason: &'static str) -> Self {
+        Self { lint, reason }
+    }
+    // Recursively visit types
+    pub fn visit_type(&mut self, ty: &Ty, cx: &EarlyContext<'_>) {
+        match ty.node {
+            // Be careful of nested structures (arrays and tuples)
+            TyKind::Array(ref ty, _) => {
+                self.visit_type(&*ty, cx);
+            },
+            TyKind::Tup(ref tup) => {
+                for tup_ty in tup {
+                    self.visit_type(&*tup_ty, cx);
+                }
+            },
+            // This is what we are looking for !
+            TyKind::Rptr(ref optional_lifetime, ref borrow_type) => {
+                // Match the 'static lifetime
+                if let Some(lifetime) = *optional_lifetime {
+                    match borrow_type.ty.node {
+                        TyKind::Path(..) | TyKind::Slice(..) | TyKind::Array(..) | TyKind::Tup(..) => {
+                            if lifetime.ident.name == syntax::symbol::kw::StaticLifetime {
+                                let snip = snippet(cx, borrow_type.ty.span, "<type>");
+                                let sugg = format!("&{}", snip);
+                                span_lint_and_then(cx, self.lint, lifetime.ident.span, self.reason, |db| {
+                                    db.span_suggestion(
+                                        ty.span,
+                                        "consider removing `'static`",
+                                        sugg,
+                                        Applicability::MachineApplicable, //snippet
+                                    );
+                                });
+                            }
+                        },
+                        _ => {},
+                    }
+                }
+                self.visit_type(&*borrow_type.ty, cx);
+            },
+            TyKind::Slice(ref ty) => {
+                self.visit_type(ty, cx);
+            },
+            _ => {},
+        }
+    }
+}