Skip to main content

oak_smalltalk/builder/
mod.rs

1#![doc = include_str!("readme.md")]
2use crate::language::SmalltalkLanguage;
3use oak_core::{Builder, BuilderCache, OakDiagnostics, Parser, TextEdit, source::Source};
4
5/// Smalltalk 语言的 AST 构建器
6#[derive(Clone)]
7pub struct SmalltalkBuilder<'config> {
8    config: &'config SmalltalkLanguage,
9}
10
11impl<'config> SmalltalkBuilder<'config> {
12    pub fn new(config: &'config SmalltalkLanguage) -> Self {
13        Self { config }
14    }
15}
16
17impl<'config> Builder<SmalltalkLanguage> for SmalltalkBuilder<'config> {
18    fn build<'a, S: Source + ?Sized>(&self, source: &'a S, edits: &[TextEdit], cache: &'a mut impl BuilderCache<SmalltalkLanguage>) -> OakDiagnostics<()> {
19        let parser = crate::parser::SmalltalkParser::new(self.config);
20        let parse_result = parser.parse(source, edits, cache);
21
22        match parse_result.result {
23            Ok(_) => OakDiagnostics { result: Ok(()), diagnostics: parse_result.diagnostics },
24            Err(e) => OakDiagnostics { result: Err(e), diagnostics: parse_result.diagnostics },
25        }
26    }
27}