add comments to parser file

This commit is contained in:
collin 2021-03-05 14:26:59 -08:00
parent 4fada913fb
commit 01e2a13170

View File

@ -19,6 +19,9 @@ use crate::KEYWORD_TOKENS;
use super::*; use super::*;
impl ParserContext { impl ParserContext {
///
/// Returns a [`Program`] AST if all tokens can be consumed and represent a valid Leo program.
///
pub fn parse_program(&mut self) -> SyntaxResult<Program> { pub fn parse_program(&mut self) -> SyntaxResult<Program> {
let mut imports = vec![]; let mut imports = vec![];
let mut circuits = IndexMap::new(); let mut circuits = IndexMap::new();
@ -74,6 +77,9 @@ impl ParserContext {
}) })
} }
///
/// Returns an [`Annotation`] AST node if the next tokens represent a supported annotation.
///
pub fn parse_annotation(&mut self) -> SyntaxResult<Annotation> { pub fn parse_annotation(&mut self) -> SyntaxResult<Annotation> {
let start = self.expect(Token::At)?; let start = self.expect(Token::At)?;
let name = self.expect_ident()?; let name = self.expect_ident()?;
@ -115,6 +121,10 @@ impl ParserContext {
}) })
} }
///
/// Returns a vector of [`PackageAccess`] AST nodes if the next tokens represent package access
/// expressions within an import statement.
///
pub fn parse_package_accesses(&mut self) -> SyntaxResult<Vec<PackageAccess>> { pub fn parse_package_accesses(&mut self) -> SyntaxResult<Vec<PackageAccess>> {
let mut out = vec![]; let mut out = vec![];
self.expect(Token::LeftParen)?; self.expect(Token::LeftParen)?;
@ -129,6 +139,10 @@ impl ParserContext {
Ok(out) Ok(out)
} }
///
/// Returns a [`PackageAccess`] AST node if the next tokens represent a package access expression
/// within an import statement.
///
pub fn parse_package_access(&mut self) -> SyntaxResult<PackageAccess> { pub fn parse_package_access(&mut self) -> SyntaxResult<PackageAccess> {
if let Some(SpannedToken { span, .. }) = self.eat(Token::Mul) { if let Some(SpannedToken { span, .. }) = self.eat(Token::Mul) {
Ok(PackageAccess::Star(span)) Ok(PackageAccess::Star(span))
@ -160,6 +174,9 @@ impl ParserContext {
} }
} }
///
/// Returns an [`Identifier`] AST node if the next tokens represent a valid package name.
///
pub fn parse_package_name(&mut self) -> SyntaxResult<Identifier> { pub fn parse_package_name(&mut self) -> SyntaxResult<Identifier> {
// Build the package name, starting with valid characters up to a dash `-` (Token::Minus). // Build the package name, starting with valid characters up to a dash `-` (Token::Minus).
let mut base = self.expect_loose_identifier()?; let mut base = self.expect_loose_identifier()?;
@ -212,6 +229,10 @@ impl ParserContext {
Ok(base) Ok(base)
} }
///
/// Returns a [`PackageOrPackages`] AST node if the next tokens represent a valid package import
/// with accesses.
///
pub fn parse_package_or_packages(&mut self) -> SyntaxResult<PackageOrPackages> { pub fn parse_package_or_packages(&mut self) -> SyntaxResult<PackageOrPackages> {
let package_name = self.parse_package_name()?; let package_name = self.parse_package_name()?;
self.expect(Token::Dot)?; self.expect(Token::Dot)?;
@ -232,6 +253,9 @@ impl ParserContext {
} }
} }
///
/// Returns a [`ImportStatement`] AST node if the next tokens represent an import statement.
///
pub fn parse_import(&mut self) -> SyntaxResult<ImportStatement> { pub fn parse_import(&mut self) -> SyntaxResult<ImportStatement> {
self.expect(Token::Import)?; self.expect(Token::Import)?;
let package_or_packages = self.parse_package_or_packages()?; let package_or_packages = self.parse_package_or_packages()?;
@ -242,6 +266,10 @@ impl ParserContext {
}) })
} }
///
/// Returns a [`CircuitMember`] AST node if the next tokens represent a circuit member variable
/// or circuit member function.
///
pub fn parse_circuit_member(&mut self) -> SyntaxResult<CircuitMember> { pub fn parse_circuit_member(&mut self) -> SyntaxResult<CircuitMember> {
let peeked = &self.peek()?.token; let peeked = &self.peek()?.token;
if peeked == &Token::Function || peeked == &Token::At { if peeked == &Token::Function || peeked == &Token::At {
@ -257,6 +285,10 @@ impl ParserContext {
} }
} }
///
/// Returns a [`(Identifier, Circuit)`] tuple of AST nodes if the next tokens represent a
/// circuit name and definition statement.
///
pub fn parse_circuit(&mut self) -> SyntaxResult<(Identifier, Circuit)> { pub fn parse_circuit(&mut self) -> SyntaxResult<(Identifier, Circuit)> {
self.expect(Token::Circuit)?; self.expect(Token::Circuit)?;
let name = self.expect_ident()?; let name = self.expect_ident()?;
@ -272,6 +304,9 @@ impl ParserContext {
})) }))
} }
///
/// Returns a [`FunctionInput`] AST node if the next tokens represent a function parameter.
///
pub fn parse_function_input(&mut self) -> SyntaxResult<FunctionInput> { pub fn parse_function_input(&mut self) -> SyntaxResult<FunctionInput> {
if let Some(token) = self.eat(Token::Input) { if let Some(token) = self.eat(Token::Input) {
return Ok(FunctionInput::InputKeyword(InputKeyword { span: token.span })); return Ok(FunctionInput::InputKeyword(InputKeyword { span: token.span }));
@ -308,6 +343,10 @@ impl ParserContext {
})) }))
} }
///
/// Returns an [`(Identifier, Function)`] AST node if the next tokens represent a function name
/// and function definition.
///
pub fn parse_function(&mut self) -> SyntaxResult<(Identifier, Function)> { pub fn parse_function(&mut self) -> SyntaxResult<(Identifier, Function)> {
let mut annotations = vec![]; let mut annotations = vec![];
while self.peek()?.token == Token::At { while self.peek()?.token == Token::At {