aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src/parsing/parser_impl.rs
blob: 6eed0e656a4abe1582f7c74c9d655ad7e12a6ae2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
pub(super) mod event;
pub(super) mod input;

use crate::parsing::{
    TreeSink, TokenSource,
    lexer::Token,
    parser_api::Parser,
    parser_impl::event::EventProcessor,
};

/// Parse a sequence of tokens into the representative node tree
pub(super) fn parse_with<S: TreeSink>(
    sink: S,
    text: &str,
    tokens: &[Token],
    parser: fn(&mut Parser),
) -> S::Tree {
    let mut events = {
        let input = input::ParserInput::new(text, tokens);
        let mut parser_api = Parser::new(&input);
        parser(&mut parser_api);
        parser_api.finish()
    };
    EventProcessor::new(sink, text, tokens, &mut events).process().finish()
}