Skip to content

Commit

Permalink
move single_char_pattern tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Cameron Steffen authored and Cameron Steffen committed Oct 10, 2017
1 parent c1a147f commit 18717ae
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 150 deletions.
40 changes: 0 additions & 40 deletions tests/ui/methods.rs
Expand Up @@ -498,46 +498,6 @@ fn clone_on_double_ref() {
println!("{:p} {:p}",*y, z);
}

fn single_char_pattern() {
let x = "foo";
x.split("x");
x.split("xx");
x.split('x');

let y = "x";
x.split(y);
// Not yet testing for multi-byte characters
// Changing `r.len() == 1` to `r.chars().count() == 1` in `lint_single_char_pattern`
// should have done this but produced an ICE
//
// We may not want to suggest changing these anyway
// See: https://github.com/rust-lang-nursery/rust-clippy/issues/650#issuecomment-184328984
x.split("ß");
x.split("ℝ");
x.split("💣");
// Can't use this lint for unicode code points which don't fit in a char
x.split("❤️");
x.contains("x");
x.starts_with("x");
x.ends_with("x");
x.find("x");
x.rfind("x");
x.rsplit("x");
x.split_terminator("x");
x.rsplit_terminator("x");
x.splitn(0, "x");
x.rsplitn(0, "x");
x.matches("x");
x.rmatches("x");
x.match_indices("x");
x.rmatch_indices("x");
x.trim_left_matches("x");
x.trim_right_matches("x");

let h = HashSet::<String>::new();
h.contains("X"); // should not warn
}

#[allow(result_unwrap_used)]
fn temporary_cstring() {
use std::ffi::CString;
Expand Down
116 changes: 6 additions & 110 deletions tests/ui/methods.stderr
Expand Up @@ -627,128 +627,24 @@ error: using `clone` on a double-reference; this will copy the reference instead
|
= note: `-D clone-double-ref` implied by `-D warnings`

error: single-character string constant used as pattern
--> $DIR/methods.rs:503:13
|
503 | x.split("x");
| --------^^^- help: try using a char instead: `x.split('x')`
|
= note: `-D single-char-pattern` implied by `-D warnings`

error: single-character string constant used as pattern
--> $DIR/methods.rs:520:16
|
520 | x.contains("x");
| -----------^^^- help: try using a char instead: `x.contains('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:521:19
|
521 | x.starts_with("x");
| --------------^^^- help: try using a char instead: `x.starts_with('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:522:17
|
522 | x.ends_with("x");
| ------------^^^- help: try using a char instead: `x.ends_with('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:523:12
|
523 | x.find("x");
| -------^^^- help: try using a char instead: `x.find('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:524:13
|
524 | x.rfind("x");
| --------^^^- help: try using a char instead: `x.rfind('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:525:14
|
525 | x.rsplit("x");
| ---------^^^- help: try using a char instead: `x.rsplit('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:526:24
|
526 | x.split_terminator("x");
| -------------------^^^- help: try using a char instead: `x.split_terminator('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:527:25
|
527 | x.rsplit_terminator("x");
| --------------------^^^- help: try using a char instead: `x.rsplit_terminator('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:528:17
|
528 | x.splitn(0, "x");
| ------------^^^- help: try using a char instead: `x.splitn(0, 'x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:529:18
|
529 | x.rsplitn(0, "x");
| -------------^^^- help: try using a char instead: `x.rsplitn(0, 'x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:530:15
|
530 | x.matches("x");
| ----------^^^- help: try using a char instead: `x.matches('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:531:16
|
531 | x.rmatches("x");
| -----------^^^- help: try using a char instead: `x.rmatches('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:532:21
|
532 | x.match_indices("x");
| ----------------^^^- help: try using a char instead: `x.match_indices('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:533:22
|
533 | x.rmatch_indices("x");
| -----------------^^^- help: try using a char instead: `x.rmatch_indices('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:534:25
|
534 | x.trim_left_matches("x");
| --------------------^^^- help: try using a char instead: `x.trim_left_matches('x')`

error: single-character string constant used as pattern
--> $DIR/methods.rs:535:26
|
535 | x.trim_right_matches("x");
| ---------------------^^^- help: try using a char instead: `x.trim_right_matches('x')`

error: you are getting the inner pointer of a temporary `CString`
--> $DIR/methods.rs:545:5
--> $DIR/methods.rs:505:5
|
545 | CString::new("foo").unwrap().as_ptr();
505 | CString::new("foo").unwrap().as_ptr();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `-D temporary-cstring-as-ptr` implied by `-D warnings`
= note: that pointer will be invalid outside this expression
help: assign the `CString` to a variable to extend its lifetime
--> $DIR/methods.rs:545:5
--> $DIR/methods.rs:505:5
|
545 | CString::new("foo").unwrap().as_ptr();
505 | CString::new("foo").unwrap().as_ptr();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
--> $DIR/methods.rs:550:27
--> $DIR/methods.rs:510:27
|
550 | let v2 : Vec<isize> = v.iter().cloned().collect();
510 | let v2 : Vec<isize> = v.iter().cloned().collect();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `-D iter-cloned-collect` implied by `-D warnings`
Expand Down
41 changes: 41 additions & 0 deletions tests/ui/single_char_pattern.rs
@@ -0,0 +1,41 @@
use std::collections::HashSet;

fn main() {
let x = "foo";
x.split("x");
x.split("xx");
x.split('x');

let y = "x";
x.split(y);
// Not yet testing for multi-byte characters
// Changing `r.len() == 1` to `r.chars().count() == 1` in `lint_single_char_pattern`
// should have done this but produced an ICE
//
// We may not want to suggest changing these anyway
// See: https://github.com/rust-lang-nursery/rust-clippy/issues/650#issuecomment-184328984
x.split("ß");
x.split("ℝ");
x.split("💣");
// Can't use this lint for unicode code points which don't fit in a char
x.split("❤️");
x.contains("x");
x.starts_with("x");
x.ends_with("x");
x.find("x");
x.rfind("x");
x.rsplit("x");
x.split_terminator("x");
x.rsplit_terminator("x");
x.splitn(0, "x");
x.rsplitn(0, "x");
x.matches("x");
x.rmatches("x");
x.match_indices("x");
x.rmatch_indices("x");
x.trim_left_matches("x");
x.trim_right_matches("x");

let h = HashSet::<String>::new();
h.contains("X"); // should not warn
}
104 changes: 104 additions & 0 deletions tests/ui/single_char_pattern.stderr
@@ -0,0 +1,104 @@
error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:5:13
|
5 | x.split("x");
| --------^^^- help: try using a char instead: `x.split('x')`
|
= note: `-D single-char-pattern` implied by `-D warnings`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:22:16
|
22 | x.contains("x");
| -----------^^^- help: try using a char instead: `x.contains('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:23:19
|
23 | x.starts_with("x");
| --------------^^^- help: try using a char instead: `x.starts_with('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:24:17
|
24 | x.ends_with("x");
| ------------^^^- help: try using a char instead: `x.ends_with('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:25:12
|
25 | x.find("x");
| -------^^^- help: try using a char instead: `x.find('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:26:13
|
26 | x.rfind("x");
| --------^^^- help: try using a char instead: `x.rfind('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:27:14
|
27 | x.rsplit("x");
| ---------^^^- help: try using a char instead: `x.rsplit('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:28:24
|
28 | x.split_terminator("x");
| -------------------^^^- help: try using a char instead: `x.split_terminator('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:29:25
|
29 | x.rsplit_terminator("x");
| --------------------^^^- help: try using a char instead: `x.rsplit_terminator('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:30:17
|
30 | x.splitn(0, "x");
| ------------^^^- help: try using a char instead: `x.splitn(0, 'x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:31:18
|
31 | x.rsplitn(0, "x");
| -------------^^^- help: try using a char instead: `x.rsplitn(0, 'x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:32:15
|
32 | x.matches("x");
| ----------^^^- help: try using a char instead: `x.matches('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:33:16
|
33 | x.rmatches("x");
| -----------^^^- help: try using a char instead: `x.rmatches('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:34:21
|
34 | x.match_indices("x");
| ----------------^^^- help: try using a char instead: `x.match_indices('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:35:22
|
35 | x.rmatch_indices("x");
| -----------------^^^- help: try using a char instead: `x.rmatch_indices('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:36:25
|
36 | x.trim_left_matches("x");
| --------------------^^^- help: try using a char instead: `x.trim_left_matches('x')`

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:37:26
|
37 | x.trim_right_matches("x");
| ---------------------^^^- help: try using a char instead: `x.trim_right_matches('x')`

0 comments on commit 18717ae

Please sign in to comment.