mod lexer;
mod parser;
mod syntax_kind;
use leo_errors::Result;
pub use lexer::{LexError, LexErrorKind, Token, lex};
pub use parser::{
Parse,
ParseError,
Parser,
parse_expression_entry,
parse_file,
parse_module_entry,
parse_statement_entry,
};
pub use rowan::TextRange;
pub use syntax_kind::{SyntaxKind, syntax_kind_from_raw};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum LeoLanguage {}
impl rowan::Language for LeoLanguage {
type Kind = SyntaxKind;
fn kind_from_raw(raw: rowan::SyntaxKind) -> Self::Kind {
syntax_kind_from_raw(raw)
}
fn kind_to_raw(kind: Self::Kind) -> rowan::SyntaxKind {
kind.into()
}
}
pub type SyntaxNode = rowan::SyntaxNode<LeoLanguage>;
pub type SyntaxToken = rowan::SyntaxToken<LeoLanguage>;
pub type SyntaxElement = rowan::SyntaxElement<LeoLanguage>;
pub fn parse_expression(source: &str) -> Result<SyntaxNode> {
let parse = parse_expression_entry(source);
Ok(parse.syntax())
}
pub fn parse_statement(source: &str) -> Result<SyntaxNode> {
let parse = parse_statement_entry(source);
Ok(parse.syntax())
}
pub fn parse_module(source: &str) -> Result<SyntaxNode> {
let parse = parse_module_entry(source);
Ok(parse.syntax())
}
pub fn parse_main(source: &str) -> Result<SyntaxNode> {
let parse = parse_file(source);
Ok(parse.syntax())
}