1use crate::{DjangoLanguage, DjangoSyntaxKind};
2use oak_core::{
3 GreenBuilder, GreenNode, IncrementalCache, OakError, Parser, errors::OakDiagnostics, parser::ParserState, source::Source,
4 tree::Arc,
5};
6
7type State<'a, S> = ParserState<'a, S, DjangoLanguage>;
8
9pub struct DjangoParser<'config> {
11 config: &'config DjangoLanguage,
13}
14
15impl<'config> DjangoParser<'config> {
16 pub fn new(config: &'config DjangoLanguage) -> Self {
17 Self { config }
18 }
19}
20
21impl<'config> Parser<DjangoLanguage> for DjangoParser<'config> {
22 fn parse_incremental(
23 &self,
24 source: impl Source,
25 changed: usize,
26 cache: IncrementalCache<DjangoLanguage>,
27 ) -> OakDiagnostics<Arc<GreenNode<DjangoSyntaxKind>>> {
28 let mut state = ParserState::new_with_cache(source, changed, cache);
29 let result = self.run(&mut state);
30 state.finish(result)
31 }
32}
33
34impl<'config> DjangoParser<'config> {
35 fn run<S: Source>(&self, state: &mut State<S>) -> Result<(), OakError> {
36 let root = GreenBuilder::<DjangoLanguage>::new(1).finish(DjangoSyntaxKind::Root);
38
39 state.cache.last_parse = Some(root);
40 Ok(())
41 }
42}
43
44impl<'config> Clone for DjangoParser<'config> {
45 fn clone(&self) -> Self {
46 Self::new(self.config)
47 }
48}