Fix towards invalid tabs.
This commit is contained in:
parent
cd2c34cabe
commit
ffe0cfb6d5
1 changed files with 18 additions and 7 deletions
|
@ -680,8 +680,7 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
||||||
/// Skip over YAML whitespace (` `, `\n`, `\r`).
|
/// Skip over YAML whitespace (` `, `\n`, `\r`).
|
||||||
///
|
///
|
||||||
/// # Errors
|
/// # Errors
|
||||||
/// This function returns an error if the character after the whitespaces is a tab (`\t`)
|
/// This function returns an error if no whitespace was found.
|
||||||
/// character or if no whitespace was found.
|
|
||||||
fn skip_yaml_whitespace(&mut self) -> ScanResult {
|
fn skip_yaml_whitespace(&mut self) -> ScanResult {
|
||||||
let mut need_whitespace = true;
|
let mut need_whitespace = true;
|
||||||
loop {
|
loop {
|
||||||
|
@ -711,11 +710,6 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
||||||
|
|
||||||
if need_whitespace {
|
if need_whitespace {
|
||||||
Err(ScanError::new(self.mark(), "expected whitespace"))
|
Err(ScanError::new(self.mark(), "expected whitespace"))
|
||||||
} else if self.ch() == '\t' {
|
|
||||||
Err(ScanError::new(
|
|
||||||
self.mark(),
|
|
||||||
"tabs disallowed in this context",
|
|
||||||
))
|
|
||||||
} else {
|
} else {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1265,6 +1259,17 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
||||||
|
|
||||||
// generate BLOCK-SEQUENCE-START if indented
|
// generate BLOCK-SEQUENCE-START if indented
|
||||||
self.roll_indent(mark.col, None, TokenType::BlockSequenceStart, mark);
|
self.roll_indent(mark.col, None, TokenType::BlockSequenceStart, mark);
|
||||||
|
if self.ch() == '\t' {
|
||||||
|
self.skip_to_next_token()?;
|
||||||
|
self.lookahead(2);
|
||||||
|
if self.buffer[0] == '-' && is_blankz(self.buffer[1]) {
|
||||||
|
return Err(ScanError::new(
|
||||||
|
self.mark,
|
||||||
|
"'-' must be followed by a valid YAML whitespace",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.skip_ws_to_eol(false);
|
self.skip_ws_to_eol(false);
|
||||||
if is_break(self.look_ch()) || is_flow(self.ch()) {
|
if is_break(self.look_ch()) || is_flow(self.ch()) {
|
||||||
self.indents.push(Indent {
|
self.indents.push(Indent {
|
||||||
|
@ -1877,6 +1882,12 @@ impl<T: Iterator<Item = char>> Scanner<T> {
|
||||||
|
|
||||||
self.skip();
|
self.skip();
|
||||||
self.skip_yaml_whitespace()?;
|
self.skip_yaml_whitespace()?;
|
||||||
|
if self.ch() == '\t' {
|
||||||
|
return Err(ScanError::new(
|
||||||
|
self.mark(),
|
||||||
|
"tabs disallowed in this context",
|
||||||
|
));
|
||||||
|
}
|
||||||
self.tokens.push_back(Token(start_mark, TokenType::Key));
|
self.tokens.push_back(Token(start_mark, TokenType::Key));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue