Skip to content

Commit

Permalink
fix(lexer): not skipped whitespace warning for '\x0c'
Browse files Browse the repository at this point in the history
  • Loading branch information
bvanjoi committed Mar 9, 2023
1 parent 9b60e6c commit d223c26
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 10 deletions.
6 changes: 3 additions & 3 deletions compiler/rustc_lexer/src/unescape.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,10 +298,10 @@ where
}
let tail = &tail[first_non_space..];
if let Some(c) = tail.chars().nth(0) {
// For error reporting, we would like the span to contain the character that was not
// skipped. The +1 is necessary to account for the leading \ that started the escape.
let end = start + first_non_space + c.len_utf8() + 1;
if c.is_whitespace() {
// For error reporting, we would like the span to contain the character that was not
// skipped. The +1 is necessary to account for the leading \ that started the escape.
let end = start + first_non_space + c.len_utf8() + 1;
callback(start..end, Err(EscapeError::UnskippedWhitespaceWarning));
}
}
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_parse/locales/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,7 @@ parse_zero_chars = empty character literal
parse_lone_slash = invalid trailing slash in literal
.label = {parse_lone_slash}
parse_unskipped_whitespace = non-ASCII whitespace symbol '{$ch}' is not skipped
parse_unskipped_whitespace = whitespace symbol '{$ch}' is not skipped
.label = {parse_unskipped_whitespace}
parse_multiple_skipped_lines = multiple lines skipped by escaped newline
Expand Down
22 changes: 21 additions & 1 deletion tests/ui/str/str-escape.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,31 @@
// check-pass
// ignore-tidy-tab

fn main() {
let s = "\
";
//~^^^ WARNING multiple lines skipped by escaped newline
assert_eq!(s, "");

let s = "foo\
  bar
";
//~^^^ WARNING non-ASCII whitespace symbol '\u{a0}' is not skipped
//~^^^ WARNING whitespace symbol '\u{a0}' is not skipped
assert_eq!(s, "foo  bar\n ");

let s = "a\
b";
assert_eq!(s, "ab");

let s = "a\
b";
assert_eq!(s, "ab");

let s = "a\
b";
//~^^ WARNING whitespace symbol '\u{c}' is not skipped
// '\x0c' is ASCII whitespace, but it may not need skipped
// discussion: https://github.com/rust-lang/rust/pull/108403
assert_eq!(s, "a\x0cb");
}
20 changes: 15 additions & 5 deletions tests/ui/str/str-escape.stderr
Original file line number Diff line number Diff line change
@@ -1,21 +1,31 @@
warning: multiple lines skipped by escaped newline
--> $DIR/str-escape.rs:3:14
--> $DIR/str-escape.rs:5:14
|
LL | let s = "\
| ______________^
LL | |
LL | | ";
| |_____________^ skipping everything up to and including this point

warning: non-ASCII whitespace symbol '\u{a0}' is not skipped
--> $DIR/str-escape.rs:7:17
warning: whitespace symbol '\u{a0}' is not skipped
--> $DIR/str-escape.rs:11:17
|
LL | let s = "foo\
| _________________^
LL | |   bar
| | ^ non-ASCII whitespace symbol '\u{a0}' is not skipped
| | ^ whitespace symbol '\u{a0}' is not skipped
| |___|
|

warning: 2 warnings emitted
warning: whitespace symbol '\u{c}' is not skipped
--> $DIR/str-escape.rs:25:15
|
LL | let s = "a\
| _______________^
LL | | b";
| | ^- whitespace symbol '\u{c}' is not skipped
| |____|
|

warning: 3 warnings emitted

0 comments on commit d223c26

Please sign in to comment.