Feature/scanner/option #27

Merged
bazaah merged 19 commits from feature/scanner/option into master 2021-09-09 19:29:29 +00:00
1 changed files with 17 additions and 14 deletions
Showing only changes of commit 2272f1d9b1 - Show all commits

View File

@ -290,11 +290,8 @@ impl Scanner
return Ok(());
}
// Reset indent to starting level
self.unroll_indent(tokens, STARTING_INDENT)?;
// Reset saved key
self.remove_saved_key()?;
// Ensure we can read the 'YAML' or 'TAG' identifiers
cache!(~buffer, @1, 4, opts)?;
// Safety: we check above that we have len >= 1 (e.g a '%')
//
@ -310,6 +307,12 @@ impl Scanner
// Scan the directive token from the .buffer
let token = scan_directive(opts, &mut buffer, &mut stats, &kind)?;
// Reset indent to starting level
self.unroll_indent(tokens, STARTING_INDENT)?;
// Reset saved key
self.remove_saved_key()?;
// A key cannot follow a directive (a newline is required)
self.simple_key_allowed = false;
@ -339,11 +342,11 @@ impl Scanner
return Ok(());
}
self.save_key(!REQUIRED)?;
let (token, amt) = scan_node_tag(opts, buffer, &mut stats)?;
advance!(buffer, amt);
self.save_key(!REQUIRED)?;
// A key may not start after a tag (only before)
self.simple_key_allowed = false;
@ -379,12 +382,12 @@ impl Scanner
_ => return Ok(()),
};
// An anchor / alias may start a simple key
self.save_key(!REQUIRED)?;
// Scan the token from the .buffer
let token = scan_anchor(opts, &mut buffer, &mut stats, &kind)?;
// An anchor / alias may start a simple key
self.save_key(!REQUIRED)?;
// A key may not start after an anchor (only before)
self.simple_key_allowed = false;
@ -415,11 +418,11 @@ impl Scanner
return Ok(());
}
self.save_key(!REQUIRED)?;
let (range, amt) = scan_flow_scalar(opts, buffer, &mut stats, single)?;
let token = range.into_token(buffer)?;
self.save_key(!REQUIRED)?;
// A key cannot follow a flow scalar, as we're either
// currently in a key (which should be followed by a
// value), or a value which needs a separator (e.g line
@ -444,10 +447,10 @@ impl Scanner
let buffer = *base;
let mut stats = self.stats.clone();
self.save_key(!REQUIRED)?;
let (token, amt) = scan_plain_scalar(opts, buffer, &mut stats, &self.context)?;
self.save_key(!REQUIRED)?;
// A simple key cannot follow a plain scalar, there must be
// an indicator or new line before a key is valid
// again.