Skip to content

Commit 5c921a9

Browse files
committed
Auto merge of #4233 - thiagoarrais:jens1o-fix-1208, r=phansch,flip1995
Avoid reporting string_lit_as_bytes for long strings Port of @jens1o code ([b76f939][jens1o_commit]) Fixes #1208 [jens1o_commit]: jens1o@b76f939 <!-- Thank you for making Clippy better! We're collecting our changelog from pull request descriptions. If your PR only updates to the latest nightly, you can leave the `changelog` entry as `none`. Otherwise, please write a short comment explaining your change. If your PR fixes an issue, you can add "fixes #issue_number" into this PR description. This way the issue will be automatically closed when your PR is merged. If you added a new lint, here's a checklist for things that will be checked during review or continuous integration. - [ ] Followed [lint naming conventions][lint_naming] - [ ] Added passing UI tests (including committed `.stderr` file) - [ ] `cargo test` passes locally - [ ] Executed `util/dev update_lints` - [ ] Added lint documentation - [ ] Run `cargo fmt` Note that you can skip the above if you are just opening a WIP PR in order to get feedback. Delete this line and everything above before opening your PR --> changelog: bugfix for long strings as bytes
2 parents 1987bf7 + 7d1a944 commit 5c921a9

File tree

4 files changed

+13
-7
lines changed

4 files changed

+13
-7
lines changed

clippy_lints/src/strings.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ fn is_add(cx: &LateContext<'_, '_>, src: &Expr, target: &Expr) -> bool {
138138
}
139139
}
140140

141+
// Max length a b"foo" string can take
142+
const MAX_LENGTH_BYTE_STRING_LIT: usize = 32;
143+
141144
declare_lint_pass!(StringLitAsBytes => [STRING_LIT_AS_BYTES]);
142145

143146
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for StringLitAsBytes {
@@ -173,6 +176,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for StringLitAsBytes {
173176
);
174177
} else if callsite == expanded
175178
&& lit_content.as_str().chars().all(|c| c.is_ascii())
179+
&& lit_content.as_str().len() <= MAX_LENGTH_BYTE_STRING_LIT
176180
&& !in_macro_or_desugar(args[0].span)
177181
{
178182
span_lint_and_sugg(

tests/ui/string_lit_as_bytes.fixed

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
fn str_lit_as_bytes() {
77
let bs = b"hello there";
88

9-
let bs = br###"raw string with three ### in it and some " ""###;
9+
let bs = br###"raw string with 3# plus " ""###;
1010

11-
// no warning, because this cannot be written as a byte string literal:
11+
// no warning, because these cannot be written as byte string literals:
1212
let ubs = "☃".as_bytes();
13+
let ubs = "hello there! this is a very long string".as_bytes();
1314

1415
let strify = stringify!(foobar).as_bytes();
1516

tests/ui/string_lit_as_bytes.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
fn str_lit_as_bytes() {
77
let bs = "hello there".as_bytes();
88

9-
let bs = r###"raw string with three ### in it and some " ""###.as_bytes();
9+
let bs = r###"raw string with 3# plus " ""###.as_bytes();
1010

11-
// no warning, because this cannot be written as a byte string literal:
11+
// no warning, because these cannot be written as byte string literals:
1212
let ubs = "☃".as_bytes();
13+
let ubs = "hello there! this is a very long string".as_bytes();
1314

1415
let strify = stringify!(foobar).as_bytes();
1516

tests/ui/string_lit_as_bytes.stderr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ LL | let bs = "hello there".as_bytes();
99
error: calling `as_bytes()` on a string literal
1010
--> $DIR/string_lit_as_bytes.rs:9:14
1111
|
12-
LL | let bs = r###"raw string with three ### in it and some " ""###.as_bytes();
13-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `br###"raw string with three ### in it and some " ""###`
12+
LL | let bs = r###"raw string with 3# plus " ""###.as_bytes();
13+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `br###"raw string with 3# plus " ""###`
1414

1515
error: calling `as_bytes()` on `include_str!(..)`
16-
--> $DIR/string_lit_as_bytes.rs:16:22
16+
--> $DIR/string_lit_as_bytes.rs:17:22
1717
|
1818
LL | let includestr = include_str!("entry.rs").as_bytes();
1919
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `include_bytes!(..)` instead: `include_bytes!("entry.rs")`

0 commit comments

Comments
 (0)