summaryrefslogtreecommitdiff
path: root/compiler/rustc_parse_format
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2021-03-27 12:37:19 +0900
committerGitHub <noreply@github.com>2021-03-27 12:37:19 +0900
commitd7216bae233d8e5f1191ec0c7dcf741789a235b0 (patch)
tree623dac55705b8a62b134636e71590c76363dd770 /compiler/rustc_parse_format
parent14d0d51f6ffa43e1c096f28b812bb9aabb387a13 (diff)
parentae8ef70a499907c929f5d7ad6539cd1187da336b (diff)
downloadrust-d7216bae233d8e5f1191ec0c7dcf741789a235b0.tar.gz
Rollup merge of #83343 - osa1:issue83340, r=jackh726
Simplify and fix byte skipping in format! string parser Fixes '\\' handling in format strings. Fixes #83340
Diffstat (limited to 'compiler/rustc_parse_format')
-rw-r--r--compiler/rustc_parse_format/src/lib.rs23
1 files changed, 9 insertions, 14 deletions
diff --git a/compiler/rustc_parse_format/src/lib.rs b/compiler/rustc_parse_format/src/lib.rs
index c2fc2bfcd33..a5fdf064e94 100644
--- a/compiler/rustc_parse_format/src/lib.rs
+++ b/compiler/rustc_parse_format/src/lib.rs
@@ -735,25 +735,24 @@ fn find_skips_from_snippet(
};
fn find_skips(snippet: &str, is_raw: bool) -> Vec<usize> {
- let mut eat_ws = false;
let mut s = snippet.char_indices().peekable();
let mut skips = vec![];
while let Some((pos, c)) = s.next() {
match (c, s.peek()) {
// skip whitespace and empty lines ending in '\\'
('\\', Some((next_pos, '\n'))) if !is_raw => {
- eat_ws = true;
skips.push(pos);
skips.push(*next_pos);
let _ = s.next();
- }
- ('\\', Some((next_pos, '\n' | 'n' | 't'))) if eat_ws => {
- skips.push(pos);
- skips.push(*next_pos);
- let _ = s.next();
- }
- (' ' | '\n' | '\t', _) if eat_ws => {
- skips.push(pos);
+
+ while let Some((pos, c)) = s.peek() {
+ if matches!(c, ' ' | '\n' | '\t') {
+ skips.push(*pos);
+ let _ = s.next();
+ } else {
+ break;
+ }
+ }
}
('\\', Some((next_pos, 'n' | 't' | 'r' | '0' | '\\' | '\'' | '\"'))) => {
skips.push(*next_pos);
@@ -804,10 +803,6 @@ fn find_skips_from_snippet(
}
}
}
- _ if eat_ws => {
- // `take_while(|c| c.is_whitespace())`
- eat_ws = false;
- }
_ => {}
}
}