Add "explicit" flag to Event::DocumentStart
(#5)
Allows the event consumer to know whether the document explicitly starts with a `---`
This commit is contained in:
parent
926fdfb01b
commit
6c57b5b5e4
5 changed files with 32 additions and 26 deletions
|
@ -49,8 +49,14 @@ pub enum Event {
|
|||
StreamStart,
|
||||
/// Last event that will be generated by the parser. Signals EOF.
|
||||
StreamEnd,
|
||||
/// The YAML start document directive (`---`).
|
||||
DocumentStart,
|
||||
/// The start of a YAML document.
|
||||
///
|
||||
/// When the boolean is `true`, it is an explicit document start
|
||||
/// directive (`---`).
|
||||
///
|
||||
/// When the boolean is `false`, it is an implicit document start
|
||||
/// (without `---`).
|
||||
DocumentStart(bool),
|
||||
/// The YAML end document directive (`...`).
|
||||
DocumentEnd,
|
||||
/// A YAML Alias.
|
||||
|
@ -441,7 +447,7 @@ impl<T: Input> Parser<T> {
|
|||
span: Span,
|
||||
recv: &mut R,
|
||||
) -> Result<(), ScanError> {
|
||||
if first_ev != Event::DocumentStart {
|
||||
if !matches!(first_ev, Event::DocumentStart(_)) {
|
||||
return Err(ScanError::new_str(
|
||||
span.start,
|
||||
"did not find expected <document-start>",
|
||||
|
@ -599,7 +605,7 @@ impl<T: Input> Parser<T> {
|
|||
self.parser_process_directives()?;
|
||||
self.push_state(State::DocumentEnd);
|
||||
self.state = State::BlockNode;
|
||||
Ok((Event::DocumentStart, span))
|
||||
Ok((Event::DocumentStart(false), span))
|
||||
}
|
||||
_ => {
|
||||
// explicit document
|
||||
|
@ -648,7 +654,7 @@ impl<T: Input> Parser<T> {
|
|||
self.push_state(State::DocumentEnd);
|
||||
self.state = State::DocumentContent;
|
||||
self.skip();
|
||||
Ok((Event::DocumentStart, mark))
|
||||
Ok((Event::DocumentStart(true), mark))
|
||||
}
|
||||
Token(span, _) => Err(ScanError::new_str(
|
||||
span.start,
|
||||
|
|
|
@ -45,7 +45,7 @@ fn test_empty_doc() {
|
|||
run_parser("---").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(true),
|
||||
Event::Scalar("~".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
@ -59,7 +59,7 @@ fn test_utf() {
|
|||
run_parser("a: 你好").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("a".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::Scalar("你好".to_string(), TScalarStyle::Plain, 0, None),
|
||||
|
@ -83,7 +83,7 @@ a: b # This is another comment
|
|||
run_parser(s).unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("a".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::Scalar("b".to_string(), TScalarStyle::Plain, 0, None),
|
||||
|
@ -106,7 +106,7 @@ fn test_quoting() {
|
|||
run_parser(s).unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::Scalar("plain".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::Scalar("squote".to_string(), TScalarStyle::SingleQuoted, 0, None),
|
||||
|
@ -131,13 +131,13 @@ a scalar
|
|||
run_parser(s).unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::Scalar("a scalar".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(true),
|
||||
Event::Scalar("a scalar".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(true),
|
||||
Event::Scalar("a scalar".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
@ -152,7 +152,7 @@ fn test_github_27() {
|
|||
run_parser("&a").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::Scalar(String::new(), TScalarStyle::Plain, 1, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
@ -194,7 +194,7 @@ foobar";
|
|||
run_parser(s).unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(true),
|
||||
Event::Scalar("foobar".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
@ -218,7 +218,7 @@ a: |-
|
|||
run_parser(s).unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("a".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::Scalar("a\n b".to_string(), TScalarStyle::Literal, 0, None),
|
||||
|
@ -236,7 +236,7 @@ fn test_bad_docstart() {
|
|||
run_parser("----").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::Scalar("----".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
@ -247,7 +247,7 @@ fn test_bad_docstart() {
|
|||
run_parser("--- #comment").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(true),
|
||||
Event::Scalar("~".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
@ -258,7 +258,7 @@ fn test_bad_docstart() {
|
|||
run_parser("---- #comment").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::Scalar("----".to_string(), TScalarStyle::Plain, 0, None),
|
||||
Event::DocumentEnd,
|
||||
Event::StreamEnd,
|
||||
|
|
|
@ -34,7 +34,7 @@ fn test_issue1() {
|
|||
|
||||
let expected = [
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("a".to_string(), TScalarStyle::Plain, 0, None),
|
||||
|
@ -57,7 +57,7 @@ fn test_issue1() {
|
|||
run_parser("[foo: [bar]]: baz").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::MappingStart(0, None),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::MappingStart(0, None),
|
||||
|
@ -79,7 +79,7 @@ fn test_issue1() {
|
|||
run_parser("[:]").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("~".to_string(), TScalarStyle::Plain, 0, None),
|
||||
|
@ -96,7 +96,7 @@ fn test_issue1() {
|
|||
run_parser("[: [:]]").unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("~".to_string(), TScalarStyle::Plain, 0, None),
|
||||
|
@ -123,7 +123,7 @@ fn test_issue1() {
|
|||
// third nested sequences, but not the second.
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("a".to_string(), TScalarStyle::Plain, 0, None),
|
||||
|
@ -153,7 +153,7 @@ fn test_issue1() {
|
|||
run_parser(r#"["a":[]]"#).unwrap(),
|
||||
[
|
||||
Event::StreamStart,
|
||||
Event::DocumentStart,
|
||||
Event::DocumentStart(false),
|
||||
Event::SequenceStart(0, None),
|
||||
Event::MappingStart(0, None),
|
||||
Event::Scalar("a".to_string(), TScalarStyle::DoubleQuoted, 0, None),
|
||||
|
|
|
@ -26,7 +26,7 @@ struct YamlChecker {
|
|||
impl EventReceiver for YamlChecker {
|
||||
fn on_event(&mut self, ev: Event) {
|
||||
let tev = match ev {
|
||||
Event::DocumentStart => TestEvent::OnDocumentStart,
|
||||
Event::DocumentStart(_) => TestEvent::OnDocumentStart,
|
||||
Event::DocumentEnd => TestEvent::OnDocumentEnd,
|
||||
Event::SequenceStart(..) => TestEvent::OnSequenceStart,
|
||||
Event::SequenceEnd => TestEvent::OnSequenceEnd,
|
||||
|
|
|
@ -142,7 +142,7 @@ impl EventReceiver for EventReporter {
|
|||
Event::StreamStart => "+STR".into(),
|
||||
Event::StreamEnd => "-STR".into(),
|
||||
|
||||
Event::DocumentStart => "+DOC".into(),
|
||||
Event::DocumentStart(_) => "+DOC".into(),
|
||||
Event::DocumentEnd => "-DOC".into(),
|
||||
|
||||
Event::SequenceStart(idx, tag) => {
|
||||
|
|
Loading…
Reference in a new issue