More fixes towards invalid tabs.
This commit is contained in:
parent
326082e0bc
commit
5a8c5a3d44
2 changed files with 45 additions and 2 deletions
|
@ -638,6 +638,50 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Skip over YAML whitespace (` `, `\n`, `\r`).
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// This function returns an error if the character after the whitespaces is a tab (`\t`)
|
||||||
|
/// character or if no whitespace was found.
|
||||||
|
fn skip_yaml_whitespace(&mut self) -> ScanResult {
|
||||||
|
let mut need_whitespace = true;
|
||||||
|
loop {
|
||||||
|
match self.look_ch() {
|
||||||
|
' ' => {
|
||||||
|
self.skip();
|
||||||
|
|
||||||
|
need_whitespace = false;
|
||||||
|
}
|
||||||
|
'\n' | '\r' => {
|
||||||
|
self.lookahead(2);
|
||||||
|
self.skip_line();
|
||||||
|
if self.flow_level == 0 {
|
||||||
|
self.allow_simple_key();
|
||||||
|
}
|
||||||
|
need_whitespace = false;
|
||||||
|
}
|
||||||
|
'#' => {
|
||||||
|
while !is_breakz(self.ch()) {
|
||||||
|
self.skip();
|
||||||
|
self.lookahead(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if need_whitespace {
|
||||||
|
Err(ScanError::new(self.mark(), "expected whitespace"))
|
||||||
|
} else if self.ch() == '\t' {
|
||||||
|
Err(ScanError::new(
|
||||||
|
self.mark(),
|
||||||
|
"tabs disallowed in this context",
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn fetch_stream_start(&mut self) {
|
fn fetch_stream_start(&mut self) {
|
||||||
let mark = self.mark;
|
let mark = self.mark;
|
||||||
self.indent = -1;
|
self.indent = -1;
|
||||||
|
@ -1760,6 +1804,7 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.skip();
|
self.skip();
|
||||||
|
self.skip_yaml_whitespace()?;
|
||||||
self.tokens.push_back(Token(start_mark, TokenType::Key));
|
self.tokens.push_back(Token(start_mark, TokenType::Key));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,7 +299,6 @@ fn expected_events(expected_tree: &str) -> Vec<String> {
|
||||||
static EXPECTED_FAILURES: &[&str] = &[
|
static EXPECTED_FAILURES: &[&str] = &[
|
||||||
// These seem to be plain bugs
|
// These seem to be plain bugs
|
||||||
// TAB as start of plain scalar instead of whitespace
|
// TAB as start of plain scalar instead of whitespace
|
||||||
"Y79Y-06",
|
|
||||||
"Y79Y-03", // unexpected pass
|
"Y79Y-03", // unexpected pass
|
||||||
"Y79Y-04", // unexpected pass
|
"Y79Y-04", // unexpected pass
|
||||||
"Y79Y-05", // unexpected pass
|
"Y79Y-05", // unexpected pass
|
||||||
|
@ -307,7 +306,6 @@ static EXPECTED_FAILURES: &[&str] = &[
|
||||||
"DK95-04",
|
"DK95-04",
|
||||||
// TABs after marker ? or : (space required?)
|
// TABs after marker ? or : (space required?)
|
||||||
"Y79Y-07",
|
"Y79Y-07",
|
||||||
"Y79Y-08",
|
|
||||||
"Y79Y-09",
|
"Y79Y-09",
|
||||||
// Other TABs
|
// Other TABs
|
||||||
"DK95-01", // in double-quoted scalar
|
"DK95-01", // in double-quoted scalar
|
||||||
|
|
Loading…
Reference in a new issue