Skip to content

Commit

Permalink
get_hint_if_single_char_arg: fix bug where multi-char letters are not…
Browse files Browse the repository at this point in the history
… detected properly
  • Loading branch information
matthiaskrgr authored and ebroto committed Oct 30, 2020
1 parent c6412ae commit c1eb8ce
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 7 deletions.
2 changes: 1 addition & 1 deletion clippy_lints/src/methods/mod.rs
Expand Up @@ -3204,7 +3204,7 @@ fn get_hint_if_single_char_arg(
if let hir::ExprKind::Lit(lit) = &arg.kind;
if let ast::LitKind::Str(r, style) = lit.node;
let string = r.as_str();
if string.len() == 1;
if string.chars().count() == 1;
then {
let snip = snippet_with_applicability(cx, arg.span, &string, applicability);
let ch = if let ast::StrStyle::Raw(nhash) = style {
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/single_char_pattern.fixed
Expand Up @@ -18,9 +18,9 @@ fn main() {
//
// We may not want to suggest changing these anyway
// See: https://github.com/rust-lang/rust-clippy/issues/650#issuecomment-184328984
x.split("ß");
x.split("ℝ");
x.split("💣");
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');
Expand Down
20 changes: 19 additions & 1 deletion tests/ui/single_char_pattern.stderr
Expand Up @@ -6,6 +6,24 @@ LL | x.split("x");
|
= note: `-D clippy::single-char-pattern` implied by `-D warnings`

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

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

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

error: single-character string constant used as pattern
--> $DIR/single_char_pattern.rs:26:16
|
Expand Down Expand Up @@ -162,5 +180,5 @@ error: single-character string constant used as pattern
LL | x.split(r###"#"###);
| ^^^^^^^^^^ help: try using a `char` instead: `'#'`

error: aborting due to 27 previous errors
error: aborting due to 30 previous errors

2 changes: 1 addition & 1 deletion tests/ui/single_char_push_str.fixed
Expand Up @@ -19,5 +19,5 @@ fn main() {
string.push('\u{0052}');
string.push('a');

get_string!().push_str("ö");
get_string!().push('ö');
}
8 changes: 7 additions & 1 deletion tests/ui/single_char_push_str.stderr
Expand Up @@ -30,5 +30,11 @@ error: calling `push_str()` using a single-character string literal
LL | string.push_str(r##"a"##);
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `string.push('a')`

error: aborting due to 5 previous errors
error: calling `push_str()` using a single-character string literal
--> $DIR/single_char_push_str.rs:22:5
|
LL | get_string!().push_str("ö");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `get_string!().push('ö')`

error: aborting due to 6 previous errors

0 comments on commit c1eb8ce

Please sign in to comment.