1use crate::{
2 Language,
3 errors::OakDiagnostics,
4 source::{Source, TextEdit},
5};
6
7pub type BuildOutput<L: Language> = OakDiagnostics<L::TypedRoot>;
9
10pub trait Builder<L: Language> {
12 fn build<'a, S: Source + ?Sized>(&self, text: &S, edits: &[TextEdit], cache: &'a mut impl BuilderCache<L>) -> BuildOutput<L>;
14}
15
16pub trait BuilderCache<L: Language>: crate::parser::ParseCache<L> {}
21
22impl<'a, L: Language, C: BuilderCache<L> + ?Sized> BuilderCache<L> for &'a mut C {}
23
24impl<L: Language + Send + Sync + 'static> BuilderCache<L> for crate::parser::ParseSession<L> {}