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
5 changed files with 56 additions and 16 deletions
+3 -2
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
+16 -13
View File
@@ -48,20 +48,23 @@ fn visit_type(&mut self, ty: &Ty, cx: &EarlyContext) {
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);
+6
View File
@@ -17,6 +17,12 @@ struct Foo {}
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);
+30
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`
+1 -1
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