Skip to content

Commit

Permalink
Auto merge of #11569 - Alexendoo:needless-raw-string-descr, r=llogiq
Browse files Browse the repository at this point in the history
Describe the type of string in raw_strings lints

changelog: none
  • Loading branch information
bors committed Sep 26, 2023
2 parents 493ab53 + 6cdff10 commit 4494b69
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 73 deletions.
30 changes: 14 additions & 16 deletions clippy_lints/src/raw_strings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ impl EarlyLintPass for RawStrings {
if !snippet(cx, expr.span, prefix).trim().starts_with(prefix) {
return;
}
let descr = lit.kind.descr();

if !str.contains(['\\', '"']) {
span_lint_and_then(
Expand All @@ -89,20 +90,17 @@ impl EarlyLintPass for RawStrings {
let r_pos = expr.span.lo() + BytePos::from_usize(prefix.len() - 1);
let start = start.with_lo(r_pos);

if end.is_empty() {
diag.span_suggestion(
start,
"use a string literal instead",
format!("\"{str}\""),
Applicability::MachineApplicable,
);
} else {
diag.multipart_suggestion(
"try",
vec![(start, String::new()), (end, String::new())],
Applicability::MachineApplicable,
);
let mut remove = vec![(start, String::new())];
// avoid debug ICE from empty suggestions
if !end.is_empty() {
remove.push((end, String::new()));
}

diag.multipart_suggestion_verbose(
format!("use a plain {descr} literal instead"),
remove,
Applicability::MachineApplicable,
);
},
);
if !matches!(cx.get_lint_level(NEEDLESS_RAW_STRINGS), rustc_lint::Allow) {
Expand Down Expand Up @@ -149,9 +147,9 @@ impl EarlyLintPass for RawStrings {
let (start, end) = hash_spans(expr.span, prefix, req, max);

let message = match max - req {
_ if req == 0 => "remove all the hashes around the literal".to_string(),
1 => "remove one hash from both sides of the literal".to_string(),
n => format!("remove {n} hashes from both sides of the literal"),
_ if req == 0 => format!("remove all the hashes around the {descr} literal"),
1 => format!("remove one hash from both sides of the {descr} literal"),
n => format!("remove {n} hashes from both sides of the {descr} literal"),
};

diag.multipart_suggestion(
Expand Down
4 changes: 4 additions & 0 deletions tests/ui/needless_raw_string.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@ fn main() {
multiline
string
";

"no hashes";
b"no hashes";
c"no hashes";
}
4 changes: 4 additions & 0 deletions tests/ui/needless_raw_string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@ fn main() {
multiline
string
"#;

r"no hashes";
br"no hashes";
cr"no hashes";
}
46 changes: 41 additions & 5 deletions tests/ui/needless_raw_string.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ LL | r#"aaa"#;
|
= note: `-D clippy::needless-raw-strings` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::needless_raw_strings)]`
help: try
help: use a plain string literal instead
|
LL - r#"aaa"#;
LL + "aaa";
Expand All @@ -18,7 +18,7 @@ error: unnecessary raw string literal
LL | br#"aaa"#;
| ^^^^^^^^^
|
help: try
help: use a plain byte string literal instead
|
LL - br#"aaa"#;
LL + b"aaa";
Expand All @@ -30,7 +30,7 @@ error: unnecessary raw string literal
LL | cr#"aaa"#;
| ^^^^^^^^^
|
help: try
help: use a plain C string literal instead
|
LL - cr#"aaa"#;
LL + c"aaa";
Expand All @@ -46,7 +46,7 @@ LL | | string
LL | | "#;
| |______^
|
help: try
help: use a plain string literal instead
|
LL ~ "
LL | a
Expand All @@ -55,5 +55,41 @@ LL | string
LL ~ ";
|

error: aborting due to 4 previous errors
error: unnecessary raw string literal
--> $DIR/needless_raw_string.rs:22:5
|
LL | r"no hashes";
| ^^^^^^^^^^^^
|
help: use a plain string literal instead
|
LL - r"no hashes";
LL + "no hashes";
|

error: unnecessary raw string literal
--> $DIR/needless_raw_string.rs:23:5
|
LL | br"no hashes";
| ^^^^^^^^^^^^^
|
help: use a plain byte string literal instead
|
LL - br"no hashes";
LL + b"no hashes";
|

error: unnecessary raw string literal
--> $DIR/needless_raw_string.rs:24:5
|
LL | cr"no hashes";
| ^^^^^^^^^^^^^
|
help: use a plain C string literal instead
|
LL - cr"no hashes";
LL + c"no hashes";
|

error: aborting due to 7 previous errors

30 changes: 15 additions & 15 deletions tests/ui/needless_raw_string_hashes.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ LL | r#"\aaa"#;
|
= note: `-D clippy::needless-raw-string-hashes` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::needless_raw_string_hashes)]`
help: remove all the hashes around the literal
help: remove all the hashes around the string literal
|
LL - r#"\aaa"#;
LL + r"\aaa";
Expand All @@ -18,7 +18,7 @@ error: unnecessary hashes around raw string literal
LL | r##"Hello "world"!"##;
| ^^^^^^^^^^^^^^^^^^^^^
|
help: remove one hash from both sides of the literal
help: remove one hash from both sides of the string literal
|
LL - r##"Hello "world"!"##;
LL + r#"Hello "world"!"#;
Expand All @@ -30,7 +30,7 @@ error: unnecessary hashes around raw string literal
LL | r######" "### "## "# "######;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove 2 hashes from both sides of the literal
help: remove 2 hashes from both sides of the string literal
|
LL - r######" "### "## "# "######;
LL + r####" "### "## "# "####;
Expand All @@ -42,7 +42,7 @@ error: unnecessary hashes around raw string literal
LL | r######" "aa" "# "## "######;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove 3 hashes from both sides of the literal
help: remove 3 hashes from both sides of the string literal
|
LL - r######" "aa" "# "## "######;
LL + r###" "aa" "# "## "###;
Expand All @@ -54,7 +54,7 @@ error: unnecessary hashes around raw string literal
LL | br#"\aaa"#;
| ^^^^^^^^^^
|
help: remove all the hashes around the literal
help: remove all the hashes around the byte string literal
|
LL - br#"\aaa"#;
LL + br"\aaa";
Expand All @@ -66,7 +66,7 @@ error: unnecessary hashes around raw string literal
LL | br##"Hello "world"!"##;
| ^^^^^^^^^^^^^^^^^^^^^^
|
help: remove one hash from both sides of the literal
help: remove one hash from both sides of the byte string literal
|
LL - br##"Hello "world"!"##;
LL + br#"Hello "world"!"#;
Expand All @@ -78,7 +78,7 @@ error: unnecessary hashes around raw string literal
LL | br######" "### "## "# "######;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove 2 hashes from both sides of the literal
help: remove 2 hashes from both sides of the byte string literal
|
LL - br######" "### "## "# "######;
LL + br####" "### "## "# "####;
Expand All @@ -90,7 +90,7 @@ error: unnecessary hashes around raw string literal
LL | br######" "aa" "# "## "######;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove 3 hashes from both sides of the literal
help: remove 3 hashes from both sides of the byte string literal
|
LL - br######" "aa" "# "## "######;
LL + br###" "aa" "# "## "###;
Expand All @@ -102,7 +102,7 @@ error: unnecessary hashes around raw string literal
LL | cr#"\aaa"#;
| ^^^^^^^^^^
|
help: remove all the hashes around the literal
help: remove all the hashes around the C string literal
|
LL - cr#"\aaa"#;
LL + cr"\aaa";
Expand All @@ -114,7 +114,7 @@ error: unnecessary hashes around raw string literal
LL | cr##"Hello "world"!"##;
| ^^^^^^^^^^^^^^^^^^^^^^
|
help: remove one hash from both sides of the literal
help: remove one hash from both sides of the C string literal
|
LL - cr##"Hello "world"!"##;
LL + cr#"Hello "world"!"#;
Expand All @@ -126,7 +126,7 @@ error: unnecessary hashes around raw string literal
LL | cr######" "### "## "# "######;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove 2 hashes from both sides of the literal
help: remove 2 hashes from both sides of the C string literal
|
LL - cr######" "### "## "# "######;
LL + cr####" "### "## "# "####;
Expand All @@ -138,7 +138,7 @@ error: unnecessary hashes around raw string literal
LL | cr######" "aa" "# "## "######;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove 3 hashes from both sides of the literal
help: remove 3 hashes from both sides of the C string literal
|
LL - cr######" "aa" "# "## "######;
LL + cr###" "aa" "# "## "###;
Expand All @@ -154,7 +154,7 @@ LL | | string
LL | | "#;
| |______^
|
help: remove all the hashes around the literal
help: remove all the hashes around the string literal
|
LL ~ r"
LL | \a
Expand All @@ -169,7 +169,7 @@ error: unnecessary hashes around raw string literal
LL | r###"rust"###;
| ^^^^^^^^^^^^^
|
help: remove all the hashes around the literal
help: remove all the hashes around the string literal
|
LL - r###"rust"###;
LL + r"rust";
Expand All @@ -181,7 +181,7 @@ error: unnecessary hashes around raw string literal
LL | r#"hello world"#;
| ^^^^^^^^^^^^^^^^
|
help: remove all the hashes around the literal
help: remove all the hashes around the string literal
|
LL - r#"hello world"#;
LL + r"hello world";
Expand Down
10 changes: 4 additions & 6 deletions tests/ui/write_literal_2.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//@no-rustfix: overlapping suggestions
#![allow(unused_must_use)]
#![warn(clippy::needless_raw_strings, clippy::write_literal)]
#![warn(clippy::write_literal)]

use std::io::Write;

Expand All @@ -11,9 +11,7 @@ fn main() {
//~^ ERROR: literal with an empty format string
//~| NOTE: `-D clippy::write-literal` implied by `-D warnings`
writeln!(v, r"{}", r"{hello}");
//~^ ERROR: unnecessary raw string literal
//~| NOTE: `-D clippy::needless-raw-strings` implied by `-D warnings`
//~| ERROR: literal with an empty format string
//~^ ERROR: literal with an empty format string
writeln!(v, "{}", '\'');
//~^ ERROR: literal with an empty format string
writeln!(v, "{}", '"');
Expand All @@ -26,8 +24,8 @@ fn main() {
v,
"some {}",
"hello \
//~^ ERROR: literal with an empty format string
world!"
world!",
//~^^ ERROR: literal with an empty format string
);
writeln!(
v,
Expand Down

0 comments on commit 4494b69

Please sign in to comment.