use super::*;
impl<'input, D: Diagnostics, C: ConcreteSyntaxTreeBuilder> ParserState<'input, D, C> {
pub(super) fn parse_trait_delc(&mut self) {
self.parse_in_context(ScopeContext::TraitDelc, |state| {
state.start_node(SyntaxKind::Trait);
state.parse_optional_modifiers();
state.parse_shared_trait_delc();
state.finish_node();
})
}
pub(super) fn parse_trait_impl(&mut self) {
let start_details = (!self.is_in_valid_class_context()).then(|| self.diagnostic_details());
self.start_node(SyntaxKind::TraitImpl);
self.parse_shared_trait_delc();
self.finish_node();
if let Some(mut diagnostic_details) = start_details {
diagnostic_details.span.end = self.diagnostic_details().span.start;
let error = ParseError::invalid_use_of_trait_impl();
self.emit_diagnostic(error, diagnostic_details);
}
}
fn parse_shared_trait_delc(&mut self) {
self.parse_token(SyntaxKind::Keyword);
self.parse_name_followed_by_braced_expression(ParseError::expected_trait_name_before());
}
}
#[cfg(test)]
mod test {
#[test]
fn test_trait_delc() {
crate::test::create_parsing_test("trait/delc*.skull", |state| {
state.parse_trait_delc();
});
}
}