mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 09:14:20 +00:00
feat: add more tests for the const_is_empty
lint
Suggested by @xFredNet and @matthiaskrgr.
This commit is contained in:
parent
288497093b
commit
1159e2c00f
@ -1,4 +1,6 @@
|
||||
#![feature(inline_const)]
|
||||
#![warn(clippy::const_is_empty)]
|
||||
#![allow(clippy::needless_late_init, unused_must_use)]
|
||||
|
||||
fn test_literal() {
|
||||
if "".is_empty() {
|
||||
@ -99,3 +101,69 @@ fn main() {
|
||||
let _ = b"".is_empty();
|
||||
//~^ ERROR: this expression always evaluates to true
|
||||
}
|
||||
|
||||
fn str_from_arg(var: &str) {
|
||||
var.is_empty();
|
||||
// Do not lint, we know nothiny about var
|
||||
}
|
||||
|
||||
fn update_str() {
|
||||
let mut value = "duck";
|
||||
value = "penguin";
|
||||
|
||||
let _ = value.is_empty();
|
||||
// Do not lint since value is mutable
|
||||
}
|
||||
|
||||
fn macros() {
|
||||
// Content from Macro
|
||||
let file = include_str!("const_is_empty.rs");
|
||||
let _ = file.is_empty();
|
||||
// No lint because initializer comes from a macro result
|
||||
|
||||
let var = env!("PATH");
|
||||
let _ = var.is_empty();
|
||||
// No lint because initializer comes from a macro result
|
||||
}
|
||||
|
||||
fn conditional_value() {
|
||||
let value;
|
||||
|
||||
if true {
|
||||
value = "hey";
|
||||
} else {
|
||||
value = "hej";
|
||||
}
|
||||
|
||||
let _ = value.is_empty();
|
||||
// Do not lint, current constant folding is too simple to detect this
|
||||
}
|
||||
|
||||
fn cfg_conditioned() {
|
||||
#[cfg(test)]
|
||||
let val = "";
|
||||
#[cfg(not(test))]
|
||||
let val = "foo";
|
||||
|
||||
let _ = val.is_empty();
|
||||
// Do not lint, value depend on a #[cfg(…)] directive
|
||||
}
|
||||
|
||||
fn not_cfg_conditioned() {
|
||||
let val = "";
|
||||
#[cfg(not(target_os = "inexistent"))]
|
||||
let _ = val.is_empty();
|
||||
//~^ ERROR: this expression always evaluates to true
|
||||
}
|
||||
|
||||
const fn const_rand() -> &'static str {
|
||||
"17"
|
||||
}
|
||||
|
||||
fn const_expressions() {
|
||||
let _ = const { if true { "1" } else { "2" } }.is_empty();
|
||||
// Do not lint, we do not recurse into boolean expressions
|
||||
|
||||
let _ = const_rand().is_empty();
|
||||
// Do not lint, we do not recurse into functions
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:4:8
|
||||
--> tests/ui/const_is_empty.rs:6:8
|
||||
|
|
||||
LL | if "".is_empty() {
|
||||
| ^^^^^^^^^^^^^
|
||||
@ -8,148 +8,154 @@ LL | if "".is_empty() {
|
||||
= help: to override `-D warnings` add `#[allow(clippy::const_is_empty)]`
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:7:8
|
||||
--> tests/ui/const_is_empty.rs:9:8
|
||||
|
|
||||
LL | if "foobar".is_empty() {
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:13:8
|
||||
--> tests/ui/const_is_empty.rs:15:8
|
||||
|
|
||||
LL | if b"".is_empty() {
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:16:8
|
||||
--> tests/ui/const_is_empty.rs:18:8
|
||||
|
|
||||
LL | if b"foobar".is_empty() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:33:8
|
||||
--> tests/ui/const_is_empty.rs:35:8
|
||||
|
|
||||
LL | if empty2.is_empty() {
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:36:8
|
||||
--> tests/ui/const_is_empty.rs:38:8
|
||||
|
|
||||
LL | if non_empty2.is_empty() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:58:13
|
||||
--> tests/ui/const_is_empty.rs:60:13
|
||||
|
|
||||
LL | let _ = EMPTY_STR.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:60:13
|
||||
--> tests/ui/const_is_empty.rs:62:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_STR.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:62:13
|
||||
--> tests/ui/const_is_empty.rs:64:13
|
||||
|
|
||||
LL | let _ = EMPTY_BSTR.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:64:13
|
||||
--> tests/ui/const_is_empty.rs:66:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_BSTR.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:66:13
|
||||
--> tests/ui/const_is_empty.rs:68:13
|
||||
|
|
||||
LL | let _ = EMPTY_ARRAY.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:68:13
|
||||
--> tests/ui/const_is_empty.rs:70:13
|
||||
|
|
||||
LL | let _ = EMPTY_ARRAY_REPEAT.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:70:13
|
||||
--> tests/ui/const_is_empty.rs:72:13
|
||||
|
|
||||
LL | let _ = EMPTY_U8_SLICE.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:72:13
|
||||
--> tests/ui/const_is_empty.rs:74:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_U8_SLICE.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:74:13
|
||||
--> tests/ui/const_is_empty.rs:76:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_ARRAY.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:76:13
|
||||
--> tests/ui/const_is_empty.rs:78:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_ARRAY_REPEAT.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:78:13
|
||||
--> tests/ui/const_is_empty.rs:80:13
|
||||
|
|
||||
LL | let _ = EMPTY_REF_ARRAY.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:80:13
|
||||
--> tests/ui/const_is_empty.rs:82:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_REF_ARRAY.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:82:13
|
||||
--> tests/ui/const_is_empty.rs:84:13
|
||||
|
|
||||
LL | let _ = EMPTY_SLICE.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:84:13
|
||||
--> tests/ui/const_is_empty.rs:86:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_SLICE.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:86:13
|
||||
--> tests/ui/const_is_empty.rs:88:13
|
||||
|
|
||||
LL | let _ = NON_EMPTY_SLICE_REPEAT.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:92:13
|
||||
--> tests/ui/const_is_empty.rs:94:13
|
||||
|
|
||||
LL | let _ = value.is_empty();
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to false
|
||||
--> tests/ui/const_is_empty.rs:95:13
|
||||
--> tests/ui/const_is_empty.rs:97:13
|
||||
|
|
||||
LL | let _ = x.is_empty();
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:97:13
|
||||
--> tests/ui/const_is_empty.rs:99:13
|
||||
|
|
||||
LL | let _ = "".is_empty();
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:99:13
|
||||
--> tests/ui/const_is_empty.rs:101:13
|
||||
|
|
||||
LL | let _ = b"".is_empty();
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 25 previous errors
|
||||
error: this expression always evaluates to true
|
||||
--> tests/ui/const_is_empty.rs:155:13
|
||||
|
|
||||
LL | let _ = val.is_empty();
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 26 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user