1#![deny(unused_must_use)]23use event::Sink;4use generated::nodes::{SourceFile, Trivia};5use parser::{LocatedSyntaxError, Parser};6pub use rowan;78mod ast;9mod event;10mod generated;11mod language;12mod lex;13mod marker;14mod parser;15mod precedence;16mod tests;17mod token_set;1819pub use ast::{AstChildren, AstNode, AstToken};20pub use generated::{nodes, syntax_kinds::SyntaxKind};21pub use language::*;22pub use token_set::SyntaxKindSet;2324use self::{25 ast::support,26 generated::nodes::{Expr, ExprObjExtend},27};2829pub fn parse(input: &str) -> (SourceFile, Vec<LocatedSyntaxError>) {30 let lexemes = lex::lex(input);31 let kinds = lexemes32 .iter()33 .map(|l| l.kind)34 .filter(|k| !Trivia::can_cast(*k))35 .collect();36 let parser = Parser::new(kinds);37 let events = parser.parse();38 let sink = Sink::new(events, &lexemes);3940 let parse = sink.finish();41 (42 SourceFile {43 syntax: parse.syntax(),44 },45 parse.errors,46 )47}48impl ExprObjExtend {49 pub fn lhs_work(&self) -> Option<Expr> {50 support::child(self.syntax())51 }52 pub fn rhs_work(&self) -> Option<Expr> {53 let mut children = support::children(self.syntax());54 55 children.next()?;56 children.next()57 }58}