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