Skip to main content

oak_pascal/parser/
mod.rs

1/// Element type definitions for Pascal.
2pub mod element_type;
3
4use crate::{language::PascalLanguage, lexer::PascalLexer, parser::element_type::PascalElementType};
5use oak_core::{
6    TextEdit,
7    parser::{ParseCache, Parser},
8    source::Source,
9};
10
11/// A parser for Pascal source files.
12pub struct PascalParser;
13
14impl PascalParser {
15    /// Creates a new Pascal parser.
16    pub fn new(config: &PascalLanguage) -> Self {
17        Self
18    }
19}
20
21impl Parser<PascalLanguage> for PascalParser {
22    fn parse<'a, S: Source + ?Sized>(&self, text: &'a S, edits: &[TextEdit], cache: &'a mut impl ParseCache<PascalLanguage>) -> oak_core::ParseOutput<'a, PascalLanguage> {
23        let language = PascalLanguage::default();
24        let lexer = PascalLexer::new(&language);
25        oak_core::parser::parse_with_lexer(&lexer, text, edits, cache, |state| {
26            let checkpoint = state.checkpoint();
27            while state.not_at_end() {
28                state.bump();
29            }
30            Ok(state.finish_at(checkpoint, PascalElementType::Root))
31        })
32    }
33}