oak-stylus 0.0.6

Stylus CSS preprocessor parser with support for modern CSS features and dynamic styling.
Documentation
#![doc = include_str!("readme.md")]
use crate::language::StylusLanguage;
use oak_core::{Builder, BuilderCache, OakDiagnostics, TextEdit, source::Source};

/// AST builder for the Stylus language.
#[derive(Clone)]
pub struct StylusBuilder<'config> {
    config: &'config StylusLanguage,
}

impl<'config> StylusBuilder<'config> {
    /// Create a new Stylus builder.
    pub fn new(config: &'config StylusLanguage) -> Self {
        Self { config }
    }
}

impl<'config> Builder<StylusLanguage> for StylusBuilder<'config> {
    fn build<'a, S: Source + ?Sized>(&self, source: &S, edits: &[TextEdit], _cache: &'a mut impl BuilderCache<StylusLanguage>) -> oak_core::builder::BuildOutput<StylusLanguage> {
        let parser = crate::parser::StylusParser::new(self.config);
        let lexer = crate::lexer::StylusLexer::new(&self.config);
        let mut cache = oak_core::parser::session::ParseSession::<StylusLanguage>::default();
        let parse_result = oak_core::parser::parse(&parser, &lexer, source, edits, &mut cache);
        match parse_result.result {
            Ok(_) => OakDiagnostics { result: Ok(()), diagnostics: parse_result.diagnostics },
            Err(e) => OakDiagnostics { result: Err(e), diagnostics: parse_result.diagnostics },
        }
    }
}