jrsonnet_rowan_parser/
lib.rs1#![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}