[`cmp_owned`]: https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned
[`cognitive_complexity`]: https://rust-lang.github.io/rust-clippy/master/index.html#cognitive_complexity
[`collapsible_if`]: https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
-[`const_static_lifetime`]: https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime
[`copy_iterator`]: https://rust-lang.github.io/rust-clippy/master/index.html#copy_iterator
[`crosspointer_transmute`]: https://rust-lang.github.io/rust-clippy/master/index.html#crosspointer_transmute
[`dbg_macro`]: https://rust-lang.github.io/rust-clippy/master/index.html#dbg_macro
[`redundant_field_names`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names
[`redundant_pattern`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern
[`redundant_pattern_matching`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching
+[`redundant_static_lifetime`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetime
[`ref_in_deref`]: https://rust-lang.github.io/rust-clippy/master/index.html#ref_in_deref
[`regex_macro`]: https://rust-lang.github.io/rust-clippy/master/index.html#regex_macro
[`replace_consts`]: https://rust-lang.github.io/rust-clippy/master/index.html#replace_consts
[`single_match`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_match
[`single_match_else`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_match_else
[`slow_vector_initialization`]: https://rust-lang.github.io/rust-clippy/master/index.html#slow_vector_initialization
-[`static_static_lifetime`]: https://rust-lang.github.io/rust-clippy/master/index.html#static_static_lifetime
[`str_to_string`]: https://rust-lang.github.io/rust-clippy/master/index.html#str_to_string
[`string_add`]: https://rust-lang.github.io/rust-clippy/master/index.html#string_add
[`string_add_assign`]: https://rust-lang.github.io/rust-clippy/master/index.html#string_add_assign
+++ /dev/null
-use crate::utils::{in_macro_or_desugar, snippet, span_lint_and_then};
-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! {
- /// **What it does:** Checks for constants and statics with an explicit `'static` lifetime.
- ///
- /// **Why is this bad?** Adding `'static` to every reference can create very
- /// complicated types.
- ///
- /// **Known problems:** None.
- ///
- /// **Example:**
- /// ```ignore
- /// const FOO: &'static [(&'static str, &'static str, fn(&Bar) -> bool)] =
- /// &[...]
- /// static FOO: &'static [(&'static str, &'static str, fn(&Bar) -> bool)] =
- /// &[...]
- /// ```
- /// This code can be rewritten as
- /// ```ignore
- /// const FOO: &[(&str, &str, fn(&Bar) -> bool)] = &[...]
- /// static FOO: &[(&str, &str, fn(&Bar) -> bool)] = &[...]
- /// ```
- pub CONST_STATIC_LIFETIME,
- style,
- "Using explicit `'static` lifetime for constants or statics when elision rules would allow omitting them."
-}
-
-declare_lint_pass!(StaticConst => [CONST_STATIC_LIFETIME]);
-
-impl StaticConst {
- // Recursively visit types
- pub fn visit_type(&mut self, ty: &Ty, cx: &EarlyContext<'_>, reason: &str) {
- match ty.node {
- // Be careful of nested structures (arrays and tuples)
- TyKind::Array(ref ty, _) => {
- self.visit_type(&*ty, cx, reason);
- },
- TyKind::Tup(ref tup) => {
- for tup_ty in tup {
- self.visit_type(&*tup_ty, cx, reason);
- }
- },
- // 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, reason, |db| {
- db.span_suggestion(
- ty.span,
- "consider removing `'static`",
- sugg,
- Applicability::MachineApplicable, //snippet
- );
- });
- }
- },
- _ => {},
- }
- }
- self.visit_type(&*borrow_type.ty, cx, reason);
- },
- TyKind::Slice(ref ty) => {
- self.visit_type(ty, cx, reason);
- },
- _ => {},
- }
- }
-}
-
-impl EarlyLintPass for StaticConst {
- fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
- if !in_macro_or_desugar(item.span) {
- if let ItemKind::Const(ref var_type, _) = item.node {
- self.visit_type(var_type, cx, "Constants have by default a `'static` lifetime");
- // Don't check associated consts because `'static` cannot be elided on those (issue #2438)
- }
-
- if let ItemKind::Static(ref var_type, _, _) = item.node {
- self.visit_type(var_type, cx, "Statics have by default a `'static` lifetime");
- }
- }
- }
-}
pub mod checked_conversions;
pub mod cognitive_complexity;
pub mod collapsible_if;
-pub mod const_static_lifetime;
pub mod copies;
pub mod copy_iterator;
pub mod dbg_macro;
pub mod redundant_clone;
pub mod redundant_field_names;
pub mod redundant_pattern_matching;
+pub mod redundant_static_lifetime;
pub mod reference;
pub mod regex;
pub mod replace_consts;
reg.register_late_lint_pass(box invalid_ref::InvalidRef);
reg.register_late_lint_pass(box identity_conversion::IdentityConversion::default());
reg.register_late_lint_pass(box types::ImplicitHasher);
- reg.register_early_lint_pass(box const_static_lifetime::StaticConst);
+ reg.register_early_lint_pass(box redundant_static_lifetime::RedundantStaticLifetime);
reg.register_late_lint_pass(box fallible_impl_from::FallibleImplFrom);
reg.register_late_lint_pass(box replace_consts::ReplaceConsts);
reg.register_late_lint_pass(box types::UnitArg);
bytecount::NAIVE_BYTECOUNT,
cognitive_complexity::COGNITIVE_COMPLEXITY,
collapsible_if::COLLAPSIBLE_IF,
- const_static_lifetime::CONST_STATIC_LIFETIME,
copies::IFS_SAME_COND,
copies::IF_SAME_THEN_ELSE,
derive::DERIVE_HASH_XOR_EQ,
ranges::RANGE_ZIP_WITH_LEN,
redundant_field_names::REDUNDANT_FIELD_NAMES,
redundant_pattern_matching::REDUNDANT_PATTERN_MATCHING,
+ redundant_static_lifetime::REDUNDANT_STATIC_LIFETIME,
reference::DEREF_ADDROF,
reference::REF_IN_DEREF,
regex::INVALID_REGEX,
block_in_if_condition::BLOCK_IN_IF_CONDITION_EXPR,
block_in_if_condition::BLOCK_IN_IF_CONDITION_STMT,
collapsible_if::COLLAPSIBLE_IF,
- const_static_lifetime::CONST_STATIC_LIFETIME,
enum_variants::ENUM_VARIANT_NAMES,
enum_variants::MODULE_INCEPTION,
eq_op::OP_REF,
question_mark::QUESTION_MARK,
redundant_field_names::REDUNDANT_FIELD_NAMES,
redundant_pattern_matching::REDUNDANT_PATTERN_MATCHING,
+ redundant_static_lifetime::REDUNDANT_STATIC_LIFETIME,
regex::REGEX_MACRO,
regex::TRIVIAL_REGEX,
returns::LET_AND_RETURN,
--- /dev/null
+use crate::utils::{in_macro_or_desugar, snippet, span_lint_and_then};
+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! {
+ /// **What it does:** Checks for constants and statics with an explicit `'static` lifetime.
+ ///
+ /// **Why is this bad?** Adding `'static` to every reference can create very
+ /// complicated types.
+ ///
+ /// **Known problems:** None.
+ ///
+ /// **Example:**
+ /// ```ignore
+ /// const FOO: &'static [(&'static str, &'static str, fn(&Bar) -> bool)] =
+ /// &[...]
+ /// static FOO: &'static [(&'static str, &'static str, fn(&Bar) -> bool)] =
+ /// &[...]
+ /// ```
+ /// This code can be rewritten as
+ /// ```ignore
+ /// const FOO: &[(&str, &str, fn(&Bar) -> bool)] = &[...]
+ /// static FOO: &[(&str, &str, fn(&Bar) -> bool)] = &[...]
+ /// ```
+ pub REDUNDANT_STATIC_LIFETIME,
+ style,
+ "Using explicit `'static` lifetime for constants or statics when elision rules would allow omitting them."
+}
+
+declare_lint_pass!(RedundantStaticLifetime => [REDUNDANT_STATIC_LIFETIME]);
+
+impl RedundantStaticLifetime {
+ // Recursively visit types
+ pub fn visit_type(&mut self, ty: &Ty, cx: &EarlyContext<'_>, reason: &str) {
+ match ty.node {
+ // Be careful of nested structures (arrays and tuples)
+ TyKind::Array(ref ty, _) => {
+ self.visit_type(&*ty, cx, reason);
+ },
+ TyKind::Tup(ref tup) => {
+ for tup_ty in tup {
+ self.visit_type(&*tup_ty, cx, reason);
+ }
+ },
+ // 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, REDUNDANT_STATIC_LIFETIME, lifetime.ident.span, reason, |db| {
+ db.span_suggestion(
+ ty.span,
+ "consider removing `'static`",
+ sugg,
+ Applicability::MachineApplicable, //snippet
+ );
+ });
+ }
+ },
+ _ => {},
+ }
+ }
+ self.visit_type(&*borrow_type.ty, cx, reason);
+ },
+ TyKind::Slice(ref ty) => {
+ self.visit_type(ty, cx, reason);
+ },
+ _ => {},
+ }
+ }
+}
+
+impl EarlyLintPass for RedundantStaticLifetime {
+ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
+ if !in_macro_or_desugar(item.span) {
+ if let ItemKind::Const(ref var_type, _) = item.node {
+ self.visit_type(var_type, cx, "Constants have by default a `'static` lifetime");
+ // Don't check associated consts because `'static` cannot be elided on those (issue #2438)
+ }
+
+ if let ItemKind::Static(ref var_type, _, _) = item.node {
+ self.visit_type(var_type, cx, "Statics have by default a `'static` lifetime");
+ }
+ }
+ }
+}
+++ /dev/null
-#[derive(Debug)]
-struct Foo {}
-
-const VAR_ONE: &'static str = "Test constant #1"; // ERROR Consider removing 'static.
-
-const VAR_TWO: &str = "Test constant #2"; // This line should not raise a warning.
-
-const VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
-
-const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
-
-const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
-
-const VAR_SIX: &'static u8 = &5;
-
-const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
-
-const VAR_HEIGHT: &'static Foo = &Foo {};
-
-const VAR_SLICE: &'static [u8] = b"Test constant #1"; // ERROR Consider removing 'static.
-
-const VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
-
-const VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
-
-static STATIC_VAR_ONE: &'static str = "Test static #1"; // ERROR Consider removing 'static.
-
-static STATIC_VAR_TWO: &str = "Test static #2"; // This line should not raise a warning.
-
-static STATIC_VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
-
-static STATIC_VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
-
-static STATIC_VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
-
-static STATIC_VAR_SIX: &'static u8 = &5;
-
-static STATIC_VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
-
-static STATIC_VAR_HEIGHT: &'static Foo = &Foo {};
-
-static STATIC_VAR_SLICE: &'static [u8] = b"Test static #3"; // ERROR Consider removing 'static.
-
-static STATIC_VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
-
-static STATIC_VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
-
-fn main() {
- let false_positive: &'static str = "test";
- println!("{}", VAR_ONE);
- println!("{}", VAR_TWO);
- println!("{:?}", VAR_THREE);
- println!("{:?}", VAR_FOUR);
- println!("{:?}", VAR_FIVE);
- println!("{:?}", VAR_SIX);
- println!("{:?}", VAR_SEVEN);
- println!("{:?}", VAR_HEIGHT);
- println!("{}", false_positive);
-}
-
-trait Bar {
- const TRAIT_VAR: &'static str;
-}
-
-impl Foo {
- const IMPL_VAR: &'static str = "var";
-}
-
-impl Bar for Foo {
- const TRAIT_VAR: &'static str = "foo";
-}
+++ /dev/null
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:4:17
- |
-LL | const VAR_ONE: &'static str = "Test constant #1"; // ERROR Consider removing 'static.
- | -^^^^^^^---- help: consider removing `'static`: `&str`
- |
- = note: `-D clippy::const-static-lifetime` implied by `-D warnings`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:8:21
- |
-LL | const VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:10:32
- |
-LL | const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:10:47
- |
-LL | const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:12:18
- |
-LL | const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
- | -^^^^^^^------------------ help: consider removing `'static`: `&[&[&'static str]]`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:12:30
- |
-LL | const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:14:17
- |
-LL | const VAR_SIX: &'static u8 = &5;
- | -^^^^^^^--- help: consider removing `'static`: `&u8`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:16:29
- |
-LL | const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
- | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:16:39
- |
-LL | const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:18:20
- |
-LL | const VAR_HEIGHT: &'static Foo = &Foo {};
- | -^^^^^^^---- help: consider removing `'static`: `&Foo`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:20:19
- |
-LL | const VAR_SLICE: &'static [u8] = b"Test constant #1"; // ERROR Consider removing 'static.
- | -^^^^^^^----- help: consider removing `'static`: `&[u8]`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:22:19
- |
-LL | const VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
- | -^^^^^^^--------- help: consider removing `'static`: `&(u8, u8)`
-
-error: Constants have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:24:19
- |
-LL | const VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
- | -^^^^^^^-------- help: consider removing `'static`: `&[u8; 1]`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:26:25
- |
-LL | static STATIC_VAR_ONE: &'static str = "Test static #1"; // ERROR Consider removing 'static.
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:30:29
- |
-LL | static STATIC_VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:32:40
- |
-LL | static STATIC_VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:32:55
- |
-LL | static STATIC_VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:34:26
- |
-LL | static STATIC_VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
- | -^^^^^^^------------------ help: consider removing `'static`: `&[&[&'static str]]`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:34:38
- |
-LL | static STATIC_VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:36:25
- |
-LL | static STATIC_VAR_SIX: &'static u8 = &5;
- | -^^^^^^^--- help: consider removing `'static`: `&u8`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:38:37
- |
-LL | static STATIC_VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
- | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:38:47
- |
-LL | static STATIC_VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
- | -^^^^^^^---- help: consider removing `'static`: `&str`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:40:28
- |
-LL | static STATIC_VAR_HEIGHT: &'static Foo = &Foo {};
- | -^^^^^^^---- help: consider removing `'static`: `&Foo`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:42:27
- |
-LL | static STATIC_VAR_SLICE: &'static [u8] = b"Test static #3"; // ERROR Consider removing 'static.
- | -^^^^^^^----- help: consider removing `'static`: `&[u8]`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:44:27
- |
-LL | static STATIC_VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
- | -^^^^^^^--------- help: consider removing `'static`: `&(u8, u8)`
-
-error: Statics have by default a `'static` lifetime
- --> $DIR/const_static_lifetime.rs:46:27
- |
-LL | static STATIC_VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
- | -^^^^^^^-------- help: consider removing `'static`: `&[u8; 1]`
-
-error: aborting due to 26 previous errors
-
--- /dev/null
+#[derive(Debug)]
+struct Foo {}
+
+const VAR_ONE: &'static str = "Test constant #1"; // ERROR Consider removing 'static.
+
+const VAR_TWO: &str = "Test constant #2"; // This line should not raise a warning.
+
+const VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
+
+const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
+
+const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
+
+const VAR_SIX: &'static u8 = &5;
+
+const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
+
+const VAR_HEIGHT: &'static Foo = &Foo {};
+
+const VAR_SLICE: &'static [u8] = b"Test constant #1"; // ERROR Consider removing 'static.
+
+const VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
+
+const VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
+
+static STATIC_VAR_ONE: &'static str = "Test static #1"; // ERROR Consider removing 'static.
+
+static STATIC_VAR_TWO: &str = "Test static #2"; // This line should not raise a warning.
+
+static STATIC_VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
+
+static STATIC_VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
+
+static STATIC_VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
+
+static STATIC_VAR_SIX: &'static u8 = &5;
+
+static STATIC_VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
+
+static STATIC_VAR_HEIGHT: &'static Foo = &Foo {};
+
+static STATIC_VAR_SLICE: &'static [u8] = b"Test static #3"; // ERROR Consider removing 'static.
+
+static STATIC_VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
+
+static STATIC_VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
+
+fn main() {
+ let false_positive: &'static str = "test";
+ println!("{}", VAR_ONE);
+ println!("{}", VAR_TWO);
+ println!("{:?}", VAR_THREE);
+ println!("{:?}", VAR_FOUR);
+ println!("{:?}", VAR_FIVE);
+ println!("{:?}", VAR_SIX);
+ println!("{:?}", VAR_SEVEN);
+ println!("{:?}", VAR_HEIGHT);
+ println!("{}", false_positive);
+}
+
+trait Bar {
+ const TRAIT_VAR: &'static str;
+}
+
+impl Foo {
+ const IMPL_VAR: &'static str = "var";
+}
+
+impl Bar for Foo {
+ const TRAIT_VAR: &'static str = "foo";
+}
--- /dev/null
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:4:17
+ |
+LL | const VAR_ONE: &'static str = "Test constant #1"; // ERROR Consider removing 'static.
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+ |
+ = note: `-D clippy::redundant-static-lifetime` implied by `-D warnings`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:8:21
+ |
+LL | const VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:10:32
+ |
+LL | const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:10:47
+ |
+LL | const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:12:18
+ |
+LL | const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
+ | -^^^^^^^------------------ help: consider removing `'static`: `&[&[&'static str]]`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:12:30
+ |
+LL | const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:14:17
+ |
+LL | const VAR_SIX: &'static u8 = &5;
+ | -^^^^^^^--- help: consider removing `'static`: `&u8`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:16:29
+ |
+LL | const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
+ | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:16:39
+ |
+LL | const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:18:20
+ |
+LL | const VAR_HEIGHT: &'static Foo = &Foo {};
+ | -^^^^^^^---- help: consider removing `'static`: `&Foo`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:20:19
+ |
+LL | const VAR_SLICE: &'static [u8] = b"Test constant #1"; // ERROR Consider removing 'static.
+ | -^^^^^^^----- help: consider removing `'static`: `&[u8]`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:22:19
+ |
+LL | const VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
+ | -^^^^^^^--------- help: consider removing `'static`: `&(u8, u8)`
+
+error: Constants have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:24:19
+ |
+LL | const VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
+ | -^^^^^^^-------- help: consider removing `'static`: `&[u8; 1]`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:26:25
+ |
+LL | static STATIC_VAR_ONE: &'static str = "Test static #1"; // ERROR Consider removing 'static.
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:30:29
+ |
+LL | static STATIC_VAR_THREE: &[&'static str] = &["one", "two"]; // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:32:40
+ |
+LL | static STATIC_VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:32:55
+ |
+LL | static STATIC_VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:34:26
+ |
+LL | static STATIC_VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
+ | -^^^^^^^------------------ help: consider removing `'static`: `&[&[&'static str]]`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:34:38
+ |
+LL | static STATIC_VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:36:25
+ |
+LL | static STATIC_VAR_SIX: &'static u8 = &5;
+ | -^^^^^^^--- help: consider removing `'static`: `&u8`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:38:37
+ |
+LL | static STATIC_VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
+ | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:38:47
+ |
+LL | static STATIC_VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
+ | -^^^^^^^---- help: consider removing `'static`: `&str`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:40:28
+ |
+LL | static STATIC_VAR_HEIGHT: &'static Foo = &Foo {};
+ | -^^^^^^^---- help: consider removing `'static`: `&Foo`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:42:27
+ |
+LL | static STATIC_VAR_SLICE: &'static [u8] = b"Test static #3"; // ERROR Consider removing 'static.
+ | -^^^^^^^----- help: consider removing `'static`: `&[u8]`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:44:27
+ |
+LL | static STATIC_VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
+ | -^^^^^^^--------- help: consider removing `'static`: `&(u8, u8)`
+
+error: Statics have by default a `'static` lifetime
+ --> $DIR/redundant_static_lifetime.rs:46:27
+ |
+LL | static STATIC_VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
+ | -^^^^^^^-------- help: consider removing `'static`: `&[u8; 1]`
+
+error: aborting due to 26 previous errors
+