]> git.lizzy.rs Git - rust.git/blobdiff - clippy_lints/src/const_static_lifetime.rs
Merge branch 'macro-use' into HEAD
[rust.git] / clippy_lints / src / const_static_lifetime.rs
index 69a4c0ae8808bb489e487ad504892b1e1cf53fed..8bb209a649025d8366e5079faa4d59642e72d79b 100644 (file)
@@ -1,6 +1,7 @@
-use syntax::ast::{Item, ItemKind, Ty, TyKind};
+use syntax::ast::*;
 use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass};
-use utils::{in_macro, span_lint_and_then};
+use rustc::{declare_lint, lint_array};
+use crate::utils::{in_macro, snippet, span_lint_and_then};
 
 /// **What it does:** Checks for constants with an explicit `'static` lifetime.
 ///
 /// ```rust
 ///  const FOO: &[(&str, &str, fn(&Bar) -> bool)] = &[...]
 /// ```
-
-declare_lint! {
+declare_clippy_lint! {
     pub CONST_STATIC_LIFETIME,
-    Warn,
+    style,
     "Using explicit `'static` lifetime for constants when elision rules would allow omitting them."
 }
 
@@ -52,14 +52,15 @@ fn visit_type(&mut self, ty: &Ty, cx: &EarlyContext) {
                         TyKind::Path(..) | TyKind::Slice(..) | TyKind::Array(..) |
                         TyKind::Tup(..) => {
                             if lifetime.ident.name == "'static" {
-                                let mut sug: String = String::new();
+                                let snip = snippet(cx, borrow_type.ty.span, "<type>");
+                                let sugg = format!("&{}", snip);
                                 span_lint_and_then(
                                     cx,
                                     CONST_STATIC_LIFETIME,
-                                    lifetime.span,
+                                    lifetime.ident.span,
                                     "Constants have by default a `'static` lifetime",
                                     |db| {
-                                        db.span_suggestion(lifetime.span, "consider removing `'static`", sug);
+                                        db.span_suggestion(ty.span, "consider removing `'static`", sugg);
                                     },
                                 );
                             }
@@ -86,4 +87,6 @@ fn check_item(&mut self, cx: &EarlyContext, item: &Item) {
             }
         }
     }
+
+    // Don't check associated consts because `'static` cannot be elided on those (issue #2438)
 }