use super::*;
pub fn parse_package<P: SysMLParser>(p: &mut P) {
p.start_node(SyntaxKind::PACKAGE);
p.expect(SyntaxKind::PACKAGE_KW);
p.skip_trivia();
if p.at_name_token() || p.at(SyntaxKind::LT) {
p.parse_identification();
p.skip_trivia();
}
parse_namespace_body(p);
p.finish_node();
}
pub fn parse_library_package<P: SysMLParser>(p: &mut P) {
p.start_node(SyntaxKind::LIBRARY_PACKAGE);
if p.at(SyntaxKind::STANDARD_KW) {
p.bump();
p.skip_trivia();
}
p.expect(SyntaxKind::LIBRARY_KW);
p.skip_trivia();
p.expect(SyntaxKind::PACKAGE_KW);
p.skip_trivia();
if p.at_name_token() || p.at(SyntaxKind::LT) {
p.parse_identification();
p.skip_trivia();
}
parse_namespace_body(p);
p.finish_node();
}
pub fn parse_import<P: SysMLParser>(p: &mut P) {
p.start_node(SyntaxKind::IMPORT);
p.expect(SyntaxKind::IMPORT_KW);
p.skip_trivia();
if p.at(SyntaxKind::ALL_KW) {
p.bump();
p.skip_trivia();
}
p.parse_qualified_name();
p.skip_trivia();
while p.at(SyntaxKind::COLON_COLON) {
p.bump();
p.skip_trivia();
if p.at(SyntaxKind::STAR_STAR) {
p.bump();
p.skip_trivia();
} else if p.at(SyntaxKind::STAR) {
p.bump();
p.skip_trivia();
} else {
break;
}
}
if p.at(SyntaxKind::L_BRACKET) {
parse_filter_package(p);
p.skip_trivia();
}
if p.at(SyntaxKind::SEMICOLON) {
p.bump();
} else if p.at(SyntaxKind::L_BRACE) {
p.parse_body();
} else {
error_missing_body_terminator(p, "import statement");
}
p.finish_node();
}
pub fn parse_alias<P: SysMLParser>(p: &mut P) {
p.start_node(SyntaxKind::ALIAS_MEMBER);
p.expect(SyntaxKind::ALIAS_KW);
p.skip_trivia();
if p.at_name_token() || p.at(SyntaxKind::LT) {
p.parse_identification();
p.skip_trivia();
}
p.expect(SyntaxKind::FOR_KW);
p.skip_trivia();
p.parse_qualified_name();
p.skip_trivia();
if p.at(SyntaxKind::SEMICOLON) {
p.bump();
} else if p.at(SyntaxKind::L_BRACE) {
p.parse_body();
} else {
error_missing_body_terminator(p, "alias declaration");
}
p.finish_node();
}
fn parse_namespace_body<P: SysMLParser>(p: &mut P) {
if p.at(SyntaxKind::SEMICOLON) {
p.bump();
} else if p.at(SyntaxKind::L_BRACE) {
p.parse_body();
} else {
error_missing_body_terminator(p, "declaration");
}
}
fn parse_filter_package<P: SysMLParser>(p: &mut P) {
if !p.at(SyntaxKind::L_BRACKET) {
return;
}
p.start_node(SyntaxKind::FILTER_PACKAGE);
while p.at(SyntaxKind::L_BRACKET) {
p.bump(); p.skip_trivia();
if p.at(SyntaxKind::AT) {
p.bump();
p.skip_trivia();
}
if p.at_name_token() {
p.parse_qualified_name();
}
p.skip_trivia();
p.expect(SyntaxKind::R_BRACKET);
p.skip_trivia();
}
p.finish_node(); }