git.delta.rocks / jrsonnet / refs/commits / b3f009bb7b2e

difftreelog

source

crates/jrsonnet-rowan-parser/src/lib.rs1.2 KiBsourcehistory
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		// skip lhs58		children.next()?;59		children.next()60	}61}