skullbrain-parser 0.1.0

Parses skullbrain tokens into a concrete syntax tree (CST).
Documentation
use super::*;

impl<'input, D: Diagnostics, C: ConcreteSyntaxTreeBuilder> ParserState<'input, D, C> {
    pub(super) fn parse_type_alias(&mut self) {
        self.start_node(SyntaxKind::TypeAlias);
        self.parse_optional_modifiers();
        self.parse_token(SyntaxKind::Keyword);
        self.skip_trivia();

        if self.peek().is_some_and(|i| i.kind().is_ident()) {
            self.parse_ident();
        } else {
            self.emit_expected_type_alias_name();
        }

        self.parse_only_assignable_expression();
        self.finish_node();
    }

    fn emit_expected_type_alias_name(&mut self) {
        let diagnostic_details = self.diagnostic_details();
        let error = ParseError::expected_type_alias_name_before();
        self.emit_diagnostic(error, diagnostic_details);
    }
}

mod test {
    #[test]
    fn test_type_alias() {
        crate::test::create_parsing_test("type_alias/*.skull", |state| {
            state.parse_type_alias();
        });
    }
}