add trim_split_whitespace
This commit is contained in:
parent
760f293d79
commit
fea177fafe
9 changed files with 295 additions and 0 deletions
91
tests/ui/trim_split_whitespace.fixed
Normal file
91
tests/ui/trim_split_whitespace.fixed
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
// run-rustfix
|
||||
#![warn(clippy::trim_split_whitespace)]
|
||||
#![allow(clippy::let_unit_value)]
|
||||
|
||||
struct Custom;
|
||||
impl Custom {
|
||||
fn trim(self) -> Self {
|
||||
self
|
||||
}
|
||||
fn split_whitespace(self) {}
|
||||
}
|
||||
|
||||
struct DerefStr(&'static str);
|
||||
impl std::ops::Deref for DerefStr {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
struct DerefStrAndCustom(&'static str);
|
||||
impl std::ops::Deref for DerefStrAndCustom {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
impl DerefStrAndCustom {
|
||||
fn trim(self) -> Self {
|
||||
self
|
||||
}
|
||||
fn split_whitespace(self) {}
|
||||
}
|
||||
|
||||
struct DerefStrAndCustomSplit(&'static str);
|
||||
impl std::ops::Deref for DerefStrAndCustomSplit {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
impl DerefStrAndCustomSplit {
|
||||
#[allow(dead_code)]
|
||||
fn split_whitespace(self) {}
|
||||
}
|
||||
|
||||
struct DerefStrAndCustomTrim(&'static str);
|
||||
impl std::ops::Deref for DerefStrAndCustomTrim {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
impl DerefStrAndCustomTrim {
|
||||
fn trim(self) -> Self {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// &str
|
||||
let _ = " A B C ".split_whitespace(); // should trigger lint
|
||||
let _ = " A B C ".split_whitespace(); // should trigger lint
|
||||
let _ = " A B C ".split_whitespace(); // should trigger lint
|
||||
|
||||
// String
|
||||
let _ = (" A B C ").to_string().split_whitespace(); // should trigger lint
|
||||
let _ = (" A B C ").to_string().split_whitespace(); // should trigger lint
|
||||
let _ = (" A B C ").to_string().split_whitespace(); // should trigger lint
|
||||
|
||||
// Custom
|
||||
let _ = Custom.trim().split_whitespace(); // should not trigger lint
|
||||
|
||||
// Deref<Target=str>
|
||||
let s = DerefStr(" A B C ");
|
||||
let _ = s.split_whitespace(); // should trigger lint
|
||||
|
||||
// Deref<Target=str> + custom impl
|
||||
let s = DerefStrAndCustom(" A B C ");
|
||||
let _ = s.trim().split_whitespace(); // should not trigger lint
|
||||
|
||||
// Deref<Target=str> + only custom split_ws() impl
|
||||
let s = DerefStrAndCustomSplit(" A B C ");
|
||||
let _ = s.split_whitespace(); // should trigger lint
|
||||
// Expl: trim() is called on str (deref) and returns &str.
|
||||
// Thus split_ws() is called on str as well and the custom impl on S is unused
|
||||
|
||||
// Deref<Target=str> + only custom trim() impl
|
||||
let s = DerefStrAndCustomTrim(" A B C ");
|
||||
let _ = s.trim().split_whitespace(); // should not trigger lint
|
||||
}
|
||||
91
tests/ui/trim_split_whitespace.rs
Normal file
91
tests/ui/trim_split_whitespace.rs
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
// run-rustfix
|
||||
#![warn(clippy::trim_split_whitespace)]
|
||||
#![allow(clippy::let_unit_value)]
|
||||
|
||||
struct Custom;
|
||||
impl Custom {
|
||||
fn trim(self) -> Self {
|
||||
self
|
||||
}
|
||||
fn split_whitespace(self) {}
|
||||
}
|
||||
|
||||
struct DerefStr(&'static str);
|
||||
impl std::ops::Deref for DerefStr {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
struct DerefStrAndCustom(&'static str);
|
||||
impl std::ops::Deref for DerefStrAndCustom {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
impl DerefStrAndCustom {
|
||||
fn trim(self) -> Self {
|
||||
self
|
||||
}
|
||||
fn split_whitespace(self) {}
|
||||
}
|
||||
|
||||
struct DerefStrAndCustomSplit(&'static str);
|
||||
impl std::ops::Deref for DerefStrAndCustomSplit {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
impl DerefStrAndCustomSplit {
|
||||
#[allow(dead_code)]
|
||||
fn split_whitespace(self) {}
|
||||
}
|
||||
|
||||
struct DerefStrAndCustomTrim(&'static str);
|
||||
impl std::ops::Deref for DerefStrAndCustomTrim {
|
||||
type Target = str;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
impl DerefStrAndCustomTrim {
|
||||
fn trim(self) -> Self {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// &str
|
||||
let _ = " A B C ".trim().split_whitespace(); // should trigger lint
|
||||
let _ = " A B C ".trim_start().split_whitespace(); // should trigger lint
|
||||
let _ = " A B C ".trim_end().split_whitespace(); // should trigger lint
|
||||
|
||||
// String
|
||||
let _ = (" A B C ").to_string().trim().split_whitespace(); // should trigger lint
|
||||
let _ = (" A B C ").to_string().trim_start().split_whitespace(); // should trigger lint
|
||||
let _ = (" A B C ").to_string().trim_end().split_whitespace(); // should trigger lint
|
||||
|
||||
// Custom
|
||||
let _ = Custom.trim().split_whitespace(); // should not trigger lint
|
||||
|
||||
// Deref<Target=str>
|
||||
let s = DerefStr(" A B C ");
|
||||
let _ = s.trim().split_whitespace(); // should trigger lint
|
||||
|
||||
// Deref<Target=str> + custom impl
|
||||
let s = DerefStrAndCustom(" A B C ");
|
||||
let _ = s.trim().split_whitespace(); // should not trigger lint
|
||||
|
||||
// Deref<Target=str> + only custom split_ws() impl
|
||||
let s = DerefStrAndCustomSplit(" A B C ");
|
||||
let _ = s.trim().split_whitespace(); // should trigger lint
|
||||
// Expl: trim() is called on str (deref) and returns &str.
|
||||
// Thus split_ws() is called on str as well and the custom impl on S is unused
|
||||
|
||||
// Deref<Target=str> + only custom trim() impl
|
||||
let s = DerefStrAndCustomTrim(" A B C ");
|
||||
let _ = s.trim().split_whitespace(); // should not trigger lint
|
||||
}
|
||||
52
tests/ui/trim_split_whitespace.stderr
Normal file
52
tests/ui/trim_split_whitespace.stderr
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
error: found call to `str::trim` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:62:23
|
||||
|
|
||||
LL | let _ = " A B C ".trim().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^ help: remove `trim()`
|
||||
|
|
||||
= note: `-D clippy::trim-split-whitespace` implied by `-D warnings`
|
||||
|
||||
error: found call to `str::trim_start` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:63:23
|
||||
|
|
||||
LL | let _ = " A B C ".trim_start().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^^^^^^^ help: remove `trim_start()`
|
||||
|
||||
error: found call to `str::trim_end` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:64:23
|
||||
|
|
||||
LL | let _ = " A B C ".trim_end().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^^^^^ help: remove `trim_end()`
|
||||
|
||||
error: found call to `str::trim` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:67:37
|
||||
|
|
||||
LL | let _ = (" A B C ").to_string().trim().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^ help: remove `trim()`
|
||||
|
||||
error: found call to `str::trim_start` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:68:37
|
||||
|
|
||||
LL | let _ = (" A B C ").to_string().trim_start().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^^^^^^^ help: remove `trim_start()`
|
||||
|
||||
error: found call to `str::trim_end` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:69:37
|
||||
|
|
||||
LL | let _ = (" A B C ").to_string().trim_end().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^^^^^ help: remove `trim_end()`
|
||||
|
||||
error: found call to `str::trim` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:76:15
|
||||
|
|
||||
LL | let _ = s.trim().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^ help: remove `trim()`
|
||||
|
||||
error: found call to `str::trim` before `str::split_whitespace`
|
||||
--> $DIR/trim_split_whitespace.rs:84:15
|
||||
|
|
||||
LL | let _ = s.trim().split_whitespace(); // should trigger lint
|
||||
| ^^^^^^^ help: remove `trim()`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue