git.delta.rocks / jrsonnet / refs/heads / master

difftreelog

source

crates/jrsonnet-rowan-parser/src/lib.rs835 Bsourcehistory
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;2324pub fn parse(input: &str) -> (SourceFile, Vec<LocatedSyntaxError>) {25	let lexemes = lex::lex(input);26	let kinds = lexemes27		.iter()28		.map(|l| l.kind)29		.filter(|k| !Trivia::can_cast(*k))30		.collect();31	let parser = Parser::new(kinds);32	let events = parser.parse();33	let sink = Sink::new(events, &lexemes);3435	let parse = sink.finish();36	(37		SourceFile {38			syntax: parse.syntax(),39		},40		parse.errors,41	)42}