Skip to content

Commit eba224b

Browse files
authored
Merge pull request #393 from dtolnay/whitespace
Require \r whitespace to be followed by \n
2 parents 45f0dde + 0c550b2 commit eba224b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/parse.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,14 @@ fn skip_whitespace(input: Cursor) -> Cursor {
104104
}
105105
}
106106
match byte {
107-
b' ' | 0x09..=0x0d => {
107+
b' ' | 0x09..=0x0c => {
108108
s = s.advance(1);
109109
continue;
110110
}
111+
b'\r' if s.as_bytes().get(1) == Some(&b'\n') => {
112+
s = s.advance(2);
113+
continue;
114+
}
111115
b if b <= 0x7f => {}
112116
_ => {
113117
let ch = s.chars().next().unwrap();

tests/test.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,18 @@ fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usi
694694
}
695695
}
696696

697+
#[test]
698+
fn whitespace() {
699+
// space, horizontal tab, vertical tab, form feed, carriage return, line
700+
// feed, non-breaking space, left-to-right mark, right-to-left mark
701+
let various_spaces = " \t\u{b}\u{c}\r\n\u{a0}\u{200e}\u{200f}";
702+
let tokens = various_spaces.parse::<TokenStream>().unwrap();
703+
assert_eq!(tokens.into_iter().count(), 0);
704+
705+
let lone_carriage_return = " \r ";
706+
lone_carriage_return.parse::<TokenStream>().unwrap_err();
707+
}
708+
697709
#[test]
698710
fn byte_order_mark() {
699711
let string = "\u{feff}foo";

0 commit comments

Comments
 (0)