Skip to main content

oak_racket/parser/
mod.rs

1use oak_core::{
2    parser::{ParseCache, ParseOutput, Parser as CoreParser, parse_with_lexer},
3    source::{Source, TextEdit},
4    tree::GreenNode,
5};
6
7use crate::{language::RacketLanguage, lexer::Lexer};
8
9mod element_type;
10pub use element_type::ElementType;
11
12/// Parser for Racket source code.
13pub struct Parser;
14
15impl CoreParser<RacketLanguage> for Parser {
16    fn parse<'a, S: Source + ?Sized>(&self, text: &'a S, edits: &[TextEdit], cache: &'a mut impl ParseCache<RacketLanguage>) -> ParseOutput<'a, RacketLanguage> {
17        parse_with_lexer(&Lexer, text, edits, cache, |state| {
18            let root = state.arena().alloc(GreenNode::new(ElementType::Expression, &[]));
19            Ok(root)
20        })
21    }
22}