use crate::{ParseError, TokenKind};
use super::types::Command;
use super::commandparser_type::CommandParser;
impl CommandParser {
pub(super) fn advance(&mut self) {
if self.pos < self.tokens.len() {
self.pos += 1;
}
}
pub(super) fn consume(&mut self, kind: &TokenKind) -> bool {
if self.check(kind) {
self.advance();
true
} else {
false
}
}
#[allow(dead_code)]
pub(super) fn consume_ident(&mut self, name: &str) -> bool {
if self.check_ident(name) {
self.advance();
true
} else {
false
}
}
pub(super) fn parse_import(&mut self) -> Result<Command, ParseError> {
let start_span = self.current_span();
self.advance();
let module = self.parse_dotted_name()?;
let span = start_span.merge(&self.current_span());
Ok(Command::Import { module, span })
}
pub(super) fn parse_namespace(&mut self) -> Result<Command, ParseError> {
let start_span = self.current_span();
self.advance();
let name = self.parse_ident()?;
let span = start_span.merge(&self.current_span());
Ok(Command::Namespace { name, span })
}
pub(super) fn parse_end(&mut self) -> Result<Command, ParseError> {
let span = self.current_span();
self.advance();
Ok(Command::End { span })
}
pub(super) fn parse_section(&mut self) -> Result<Command, ParseError> {
let start_span = self.current_span();
self.advance();
let name = self.parse_ident()?;
let span = start_span.merge(&self.current_span());
Ok(Command::Section { name, span })
}
pub(super) fn parse_set_option(&mut self) -> Result<Command, ParseError> {
let start_span = self.current_span();
self.advance();
let name = self.parse_dotted_name()?;
let value = self.collect_rest_as_string();
let span = start_span.merge(&self.current_span());
Ok(Command::SetOption { name, value, span })
}
}