Merge pull request #2232 from rust-lang-nursery/fixup-const-static-lifetime

Fixup "const static lifetime" lint for non-path types
This commit is contained in:
Oliver Schneider 2017-11-19 09:28:47 +01:00 committed by GitHub
commit acc81cf921
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 16 deletions

View file

@ -70,8 +70,9 @@ Please document your lint with a doc comment akin to the following:
Clippy uses UI tests. UI tests check that the output of the compiler is exactly as expected.
Of course there's little sense in writing the output yourself or copying it around.
Therefore you can simply run `tests/ui/update-all-references.sh` and check whether
the output looks as you expect with `git diff`. Commit all `*.stderr` files, too.
Therefore you can simply run `tests/ui/update-all-references.sh` (after running
`cargo test`) and check whether the output looks as you expect with `git diff`. Commit all
`*.stderr` files, too.
### Testing manually

View file

@ -48,20 +48,23 @@ impl StaticConst {
TyKind::Rptr(ref optional_lifetime, ref borrow_type) => {
// Match the 'static lifetime
if let Some(lifetime) = *optional_lifetime {
if let TyKind::Path(_, _) = borrow_type.ty.node {
// Verify that the path is a str
if lifetime.ident.name == "'static" {
let mut sug: String = String::new();
span_lint_and_then(
cx,
CONST_STATIC_LIFETIME,
lifetime.span,
"Constants have by default a `'static` lifetime",
|db| {
db.span_suggestion(lifetime.span, "consider removing `'static`", sug);
},
);
match borrow_type.ty.node {
TyKind::Path(..) | TyKind::Slice(..) | TyKind::Array(..) |
TyKind::Tup(..) => {
if lifetime.ident.name == "'static" {
let mut sug: String = String::new();
span_lint_and_then(
cx,
CONST_STATIC_LIFETIME,
lifetime.span,
"Constants have by default a `'static` lifetime",
|db| {
db.span_suggestion(lifetime.span, "consider removing `'static`", sug);
},
);
}
}
_ => {}
}
}
self.visit_type(&*borrow_type.ty, cx);

View file

@ -17,6 +17,12 @@ 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.
fn main() {
let false_positive: &'static str = "test";
println!("{}", VAR_ONE);

View file

@ -24,6 +24,12 @@ error: Constants have by default a `'static` lifetime
10 | const VAR_FOUR: (&str, (&str, &'static str), &'static str) = ("on", ("th", "th"), "on"); // ERROR Consider removing 'static
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:12:18
|
12 | const VAR_FIVE: &'static [&[&'static str]] = &[&["test"], &["other one"]]; // ERROR Consider removing 'static
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:12:30
|
@ -36,6 +42,12 @@ error: Constants have by default a `'static` lifetime
14 | const VAR_SIX: &'static u8 = &5;
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:16:29
|
16 | const VAR_SEVEN: &[&(&str, &'static [&'static str])] = &[&("one", &["other one"])];
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:16:39
|
@ -48,3 +60,21 @@ error: Constants have by default a `'static` lifetime
18 | const VAR_HEIGHT: &'static Foo = &Foo {};
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:20:19
|
20 | const VAR_SLICE: &'static [u8] = b"Test constant #1"; // ERROR Consider removing 'static.
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:22:19
|
22 | const VAR_TUPLE: &'static (u8, u8) = &(1, 2); // ERROR Consider removing 'static.
| ^^^^^^^ help: consider removing `'static`
error: Constants have by default a `'static` lifetime
--> $DIR/const_static_lifetime.rs:24:19
|
24 | const VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
| ^^^^^^^ help: consider removing `'static`

View file

@ -18,7 +18,7 @@
#
# See all `update-references.sh`, if you just want to update a single test.
if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "" ]]; then
if [[ "$1" == "--help" || "$1" == "-h" ]]; then
echo "usage: $0"
fi