about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkrk <keremkat@gmail.com>2019-06-10 19:25:00 +0200
committerflip1995 <hello@philkrones.com>2019-06-14 09:41:47 +0200
commit87e9dee884988aa4385723ec08d69c548f7f50a2 (patch)
tree11ef2443f2b06db023d83eec7163f9ba738abdfb
parentff1b533c1383a6dbde3f1d3d5fe467b627281d09 (diff)
downloadrust-87e9dee884988aa4385723ec08d69c548f7f50a2.tar.gz
rust-87e9dee884988aa4385723ec08d69c548f7f50a2.zip
Use RedundantStaticLifetime in StaticStatic.
-rw-r--r--clippy_lints/src/static_static_lifetime.rs54
1 files changed, 5 insertions, 49 deletions
diff --git a/clippy_lints/src/static_static_lifetime.rs b/clippy_lints/src/static_static_lifetime.rs
index 338d9e76602..518cb5e7a7a 100644
--- a/clippy_lints/src/static_static_lifetime.rs
+++ b/clippy_lints/src/static_static_lifetime.rs
@@ -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! {
@@ -31,51 +31,9 @@ declare_lint_pass!(StaticStatic => [STATIC_STATIC_LIFETIME]);
 impl StaticStatic {
     // 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,
-                                    STATIC_STATIC_LIFETIME,
-                                    lifetime.ident.span,
-                                    "Statics 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(STATIC_STATIC_LIFETIME, "Statics have by default a `'static` lifetime");
+        rsl.visit_type(ty, cx)
     }
 }
 
@@ -88,6 +46,4 @@ impl EarlyLintPass for StaticStatic {
             }
         }
     }
-
-    // Don't check associated consts because `'static` cannot be elided on those (issue #2438)
 }