1#![deny(unused_must_use)]23use event::Sink;4use generated::nodes::{SourceFile, Trivia};5use lex::lex;6use parser::{LocatedSyntaxError, Parser};7pub use rowan;89mod ast;10mod event;11mod generated;12mod language;13mod lex;14mod marker;15mod parser;16mod precedence;17mod string_block;18mod tests;19mod token_set;2021pub use ast::{AstChildren, AstNode, AstToken};22pub use generated::{nodes, syntax_kinds::SyntaxKind};23pub use language::*;24pub use string_block::{collect_lexed_str_block, CollectStrBlock};25pub use token_set::SyntaxKindSet;2627use self::{28 ast::support,29 generated::nodes::{Expr, ExprBinary, ExprObjExtend},30};3132pub fn parse(input: &str) -> (SourceFile, Vec<LocatedSyntaxError>) {33 let lexemes = lex(input);34 let kinds = lexemes35 .iter()36 .map(|l| l.kind)37 .filter(|k| !Trivia::can_cast(*k))38 .collect();39 let parser = Parser::new(kinds);40 let events = parser.parse();41 let sink = Sink::new(events, &lexemes);4243 let parse = sink.finish();44 (45 SourceFile {46 syntax: parse.syntax(),47 },48 parse.errors,49 )50}51impl ExprObjExtend {52 pub fn lhs_work(&self) -> Option<Expr> {53 support::child(self.syntax())54 }55 pub fn rhs_work(&self) -> Option<Expr> {56 let mut children = support::children(self.syntax());57 58 children.next()?;59 children.next()60 }61}