From 71c54f318f5bb062bb8370431ada8bec95c09683 Mon Sep 17 00:00:00 2001 From: Ethiraric Date: Mon, 22 Jan 2024 21:33:18 +0100 Subject: [PATCH] Fix tests related to anchor/alias indentation. I have no idea what I'm doing. --- parser/src/scanner.rs | 15 +++++++++++++-- parser/tests/yaml-test-suite.rs | 2 -- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/parser/src/scanner.rs b/parser/src/scanner.rs index 4a49666..b9d0f16 100644 --- a/parser/src/scanner.rs +++ b/parser/src/scanner.rs @@ -1463,6 +1463,13 @@ impl> Scanner { )); } + // ???, fixes test G9HC. + if let Some(Token(mark, TokenType::Anchor(..) | TokenType::Tag(..))) = self.tokens.back() { + if self.mark.col == 0 && mark.col == 0 && self.indent > -1 { + return Err(ScanError::new(*mark, "invalid indentation for anchor")); + } + } + // Skip over the `-`. let mark = self.mark; self.skip(); @@ -2047,6 +2054,10 @@ impl> Scanner { let indent = self.indent + 1; let start_mark = self.mark; + if self.flow_level > 0 && (start_mark.col as isize) < indent { + return Err(ScanError::new(start_mark, "foo")); + } + let mut string = String::new(); let mut leading_break = String::new(); let mut trailing_breaks = String::new(); @@ -2371,10 +2382,10 @@ impl> Scanner { } } - /// Save the last token in [`Self::tokens`] as a simple key. + /// Mark the next token to be inserted as a potential simple key. fn save_simple_key(&mut self) { if self.simple_key_allowed { - let required = self.flow_level > 0 + let required = self.flow_level == 0 && self.indent == (self.mark.col as isize) && self.indents.last().unwrap().needs_block_end; let mut sk = SimpleKey::new(self.mark); diff --git a/parser/tests/yaml-test-suite.rs b/parser/tests/yaml-test-suite.rs index dbd00db..a1e421d 100644 --- a/parser/tests/yaml-test-suite.rs +++ b/parser/tests/yaml-test-suite.rs @@ -315,8 +315,6 @@ fn expected_events(expected_tree: &str) -> Vec { #[rustfmt::skip] static EXPECTED_FAILURES: &[&str] = &[ // Misc - "G9HC", // Anchor indent problem(?) - "H7J7", // Anchor indent / linebreak problem? "3UYS", // Escaped / "HRE5", // Escaped ' in double-quoted (should not work) "QB6E", // Indent for multiline double-quoted scalar