Correctly handle string indices in literal_string_with_formatting_arg
This commit is contained in:
parent
968669b00a
commit
ad695da7d2
3 changed files with 14 additions and 1 deletions
|
|
@ -9,6 +9,7 @@
|
|||
#![feature(iter_partition_in_place)]
|
||||
#![feature(let_chains)]
|
||||
#![feature(never_type)]
|
||||
#![feature(round_char_boundary)]
|
||||
#![feature(rustc_private)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
#![feature(unwrap_infallible)]
|
||||
|
|
|
|||
|
|
@ -108,7 +108,15 @@ impl LateLintPass<'_> for LiteralStringWithFormattingArg {
|
|||
if error.span.end >= current.len() {
|
||||
break;
|
||||
}
|
||||
current = ¤t[error.span.end + 1..];
|
||||
// We find the closest char to where the error location ends.
|
||||
let pos = current.floor_char_boundary(error.span.end);
|
||||
// We get the next character.
|
||||
current = if let Some((next_char_pos, _)) = current[pos..].char_indices().nth(1) {
|
||||
// We make the parser start from this new location.
|
||||
¤t[pos + next_char_pos..]
|
||||
} else {
|
||||
break;
|
||||
};
|
||||
diff_len = fmt_str.len() - current.len();
|
||||
parser = Parser::new(current, None, None, false, ParseMode::Format);
|
||||
} else if let Piece::NextArgument(arg) = piece {
|
||||
|
|
|
|||
|
|
@ -30,4 +30,8 @@ fn main() {
|
|||
}";
|
||||
// Unicode characters escape should not lint either.
|
||||
"\u{0052}".to_string();
|
||||
|
||||
// Regression test for <https://github.com/rust-lang/rust-clippy/issues/13838>.
|
||||
let x: Option<usize> = Some(0);
|
||||
x.expect("{…}");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue