git.delta.rocks / jrsonnet / refs/commits / 93f08ca017e4

difftreelog

source

crates/jrsonnet-rowan-parser/src/lib.rs1.1 KiBsourcehistory
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		// skip lhs55		children.next()?;56		children.next()57	}58}