oak_objective_c/builder/
mod.rs1use crate::language::ObjectiveCLanguage;
2use oak_core::{Builder, BuilderCache, OakDiagnostics, TextEdit, lexer::Lexer, parser::Parser, source::Source};
3
4pub struct ObjectiveCBuilder<'config> {
5 config: &'config ObjectiveCLanguage,
6}
7
8impl<'config> ObjectiveCBuilder<'config> {
9 pub fn new(config: &'config ObjectiveCLanguage) -> Self {
10 Self { config }
11 }
12}
13
14impl<'config> Builder<ObjectiveCLanguage> for ObjectiveCBuilder<'config> {
15 fn build<'a, S: Source + ?Sized>(&self, source: &S, _edits: &[TextEdit], _cache: &'a mut impl BuilderCache<ObjectiveCLanguage>) -> oak_core::builder::BuildOutput<ObjectiveCLanguage> {
16 let mut session = oak_core::parser::session::ParseSession::<ObjectiveCLanguage>::default();
18 let lexer = crate::lexer::ObjectiveCLexer::new(&self.config);
19 let parser = crate::parser::ObjectiveCParser::new(self.config);
20
21 lexer.lex(source, &[], &mut session);
22 let parse_result = parser.parse(source, &[], &mut session);
23
24 let result = parse_result.result.map(|_| crate::ast::ObjectiveCRoot::default());
25
26 OakDiagnostics { result, diagnostics: parse_result.diagnostics }
27 }
28}