Skip to main content

jrsonnet_rowan_parser/
lib.rs

1#![deny(unused_must_use)]
2
3use event::Sink;
4use generated::nodes::{SourceFile, Trivia};
5use parser::{LocatedSyntaxError, Parser};
6pub use rowan;
7
8mod ast;
9mod event;
10mod generated;
11mod language;
12mod lex;
13mod marker;
14mod parser;
15mod precedence;
16mod tests;
17mod token_set;
18
19pub use ast::{AstChildren, AstNode, AstToken};
20pub use generated::{nodes, syntax_kinds::SyntaxKind};
21pub use language::*;
22pub use token_set::SyntaxKindSet;
23
24pub fn parse(input: &str) -> (SourceFile, Vec<LocatedSyntaxError>) {
25	let lexemes = lex::lex(input);
26	let kinds = lexemes
27		.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);
34
35	let parse = sink.finish();
36	(
37		SourceFile {
38			syntax: parse.syntax(),
39		},
40		parse.errors,
41	)
42}