From 31dc4a1456f1a8791ab84cab230c6c27ed1da1f8 Mon Sep 17 00:00:00 2001 From: Ethiraric Date: Fri, 19 Jan 2024 18:33:09 +0100 Subject: [PATCH] Fixes towards implicit document end. --- parser/src/parser.rs | 11 +++++++++++ parser/tests/yaml-test-suite.rs | 4 ---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/parser/src/parser.rs b/parser/src/parser.rs index 658ffd5..b0b3188 100644 --- a/parser/src/parser.rs +++ b/parser/src/parser.rs @@ -271,9 +271,11 @@ impl> Parser { self.token = None; //self.peek_token(); } + /// Pops the top-most state and make it the current state. fn pop_state(&mut self) { self.state = self.states.pop().unwrap(); } + /// Push a new state atop the state stack. fn push_state(&mut self, state: State) { self.states.push(state); } @@ -569,8 +571,17 @@ impl> Parser { if explicit_end { self.state = State::ImplicitDocumentStart; } else { + if let Token(mark, TokenType::VersionDirective(..) | TokenType::TagDirective(..)) = + *self.peek_token()? + { + return Err(ScanError::new( + mark, + "missing explicit document end marker before directive", + )); + } self.state = State::DocumentStart; } + Ok((Event::DocumentEnd, marker)) } diff --git a/parser/tests/yaml-test-suite.rs b/parser/tests/yaml-test-suite.rs index a64a90c..7c5ace6 100644 --- a/parser/tests/yaml-test-suite.rs +++ b/parser/tests/yaml-test-suite.rs @@ -298,10 +298,6 @@ fn expected_events(expected_tree: &str) -> Vec { #[rustfmt::skip] static EXPECTED_FAILURES: &[&str] = &[ // Directives (various) - "9HCY", // Directive after content - "EB22", // Directive after content - "MUS6-01", // no document end marker? - "RHX7", // no document end marker "SF5V", // duplicate directive "W4TN", // scalar confused as directive // Losing trailing newline