Fix DK95-00, I guess.

This commit is contained in:
Ethiraric 2023-12-22 15:43:28 +01:00
parent e683932e7a
commit 88833f8a06
2 changed files with 18 additions and 9 deletions

View file

@ -595,6 +595,11 @@ impl<T: Iterator<Item = char>> Scanner<T> {
Ok(()) Ok(())
} }
/// Skip over all whitespace and comments until the next token.
///
/// # Errors
/// This function returns an error if a tabulation is encountered where there should not be
/// one.
fn skip_to_next_token(&mut self) -> ScanResult { fn skip_to_next_token(&mut self) -> ScanResult {
loop { loop {
// TODO(chenyh) BOM // TODO(chenyh) BOM
@ -604,7 +609,10 @@ impl<T: Iterator<Item = char>> Scanner<T> {
// "Indentation" only exists as long as a block is started, but does not exist // "Indentation" only exists as long as a block is started, but does not exist
// inside of flow-style constructs. Tabs are allowed as part of leaading // inside of flow-style constructs. Tabs are allowed as part of leaading
// whitespaces outside of indentation. // whitespaces outside of indentation.
'\t' if self.is_within_block() && self.leading_whitespace => { '\t' if self.is_within_block()
&& self.leading_whitespace
&& (self.mark.col as isize) < self.indent =>
{
return Err(ScanError::new( return Err(ScanError::new(
self.mark, self.mark,
"tabs disallowed within this context (block indentation)", "tabs disallowed within this context (block indentation)",
@ -1239,18 +1247,13 @@ impl<T: Iterator<Item = char>> Scanner<T> {
} }
} }
// Eat whitespaces and comments to the end of the line. while is_blank(self.look_ch()) {
self.lookahead(1);
while is_blank(self.ch()) {
self.skip(); self.skip();
self.lookahead(1);
} }
if self.ch() == '#' { if self.ch() == '#' {
while !is_breakz(self.ch()) { while !is_breakz(self.look_ch()) {
self.skip(); self.skip();
self.lookahead(1);
} }
} }
@ -1267,6 +1270,13 @@ impl<T: Iterator<Item = char>> Scanner<T> {
self.skip_line(); self.skip_line();
} }
if self.look_ch() == '\t' {
return Err(ScanError::new(
start_mark,
"a block scalar content cannot start with a tab",
));
}
if increment > 0 { if increment > 0 {
indent = if self.indent >= 0 { indent = if self.indent >= 0 {
(self.indent + increment as isize) as usize (self.indent + increment as isize) as usize

View file

@ -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
"DK95-00",
"Y79Y-06", "Y79Y-06",
"Y79Y-03", // unexpected pass "Y79Y-03", // unexpected pass
"Y79Y-04", // unexpected pass "Y79Y-04", // unexpected pass