Skip to content

Commit

Permalink
Improve documentation on Parser::consume_token and friends (apache#994)
Browse files Browse the repository at this point in the history
  • Loading branch information
alamb authored and serprex committed Nov 6, 2023
1 parent 07e867c commit b6efd14
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/parser/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2350,15 +2350,16 @@ impl<'a> Parser<'a> {
}
}

/// Report unexpected token
/// Report `found` was encountered instead of `expected`
pub fn expected<T>(&self, expected: &str, found: TokenWithLocation) -> Result<T, ParserError> {
parser_err!(
format!("Expected {expected}, found: {found}"),
found.location
)
}

/// Look for an expected keyword and consume it if it exists
/// If the current token is the `expected` keyword, consume it and returns
/// true. Otherwise, no tokens are consumed and returns false.
#[must_use]
pub fn parse_keyword(&mut self, expected: Keyword) -> bool {
match self.peek_token().token {
Expand All @@ -2370,7 +2371,9 @@ impl<'a> Parser<'a> {
}
}

/// Look for an expected sequence of keywords and consume them if they exist
/// If the current and subsequent tokens exactly match the `keywords`
/// sequence, consume them and returns true. Otherwise, no tokens are
/// consumed and returns false
#[must_use]
pub fn parse_keywords(&mut self, keywords: &[Keyword]) -> bool {
let index = self.index;
Expand All @@ -2385,7 +2388,9 @@ impl<'a> Parser<'a> {
true
}

/// Look for one of the given keywords and return the one that matches.
/// If the current token is one of the given `keywords`, consume the token
/// and return the keyword that matches. Otherwise, no tokens are consumed
/// and returns `None`.
#[must_use]
pub fn parse_one_of_keywords(&mut self, keywords: &[Keyword]) -> Option<Keyword> {
match self.peek_token().token {
Expand All @@ -2402,7 +2407,8 @@ impl<'a> Parser<'a> {
}
}

/// Bail out if the current token is not one of the expected keywords, or consume it if it is
/// If the current token is one of the expected keywords, consume the token
/// and return the keyword that matches. Otherwise, return an error.
pub fn expect_one_of_keywords(&mut self, keywords: &[Keyword]) -> Result<Keyword, ParserError> {
if let Some(keyword) = self.parse_one_of_keywords(keywords) {
Ok(keyword)
Expand All @@ -2415,7 +2421,8 @@ impl<'a> Parser<'a> {
}
}

/// Bail out if the current token is not an expected keyword, or consume it if it is
/// If the current token is the `expected` keyword, consume the token.
/// Otherwise return an error.
pub fn expect_keyword(&mut self, expected: Keyword) -> Result<(), ParserError> {
if self.parse_keyword(expected) {
Ok(())
Expand All @@ -2424,8 +2431,8 @@ impl<'a> Parser<'a> {
}
}

/// Bail out if the following tokens are not the expected sequence of
/// keywords, or consume them if they are.
/// If the current and subsequent tokens exactly match the `keywords`
/// sequence, consume them and returns Ok. Otherwise, return an Error.
pub fn expect_keywords(&mut self, expected: &[Keyword]) -> Result<(), ParserError> {
for &kw in expected {
self.expect_keyword(kw)?;
Expand Down

0 comments on commit b6efd14

Please sign in to comment.