mod actions;
mod body;
mod connectors;
mod definitions;
mod entry;
mod helpers;
mod namespace;
mod relationships;
mod requirements;
mod states;
mod usage;
pub(super) use super::BaseParser;
pub(super) use super::kerml::is_name_kind;
pub(super) use super::kerml_expressions::parse_expression;
pub(super) use super::{RELATIONSHIP_OPERATORS, STANDALONE_RELATIONSHIP_KEYWORDS};
pub(super) use crate::parser::syntax_kind::SyntaxKind;
pub(super) use self::actions::*;
pub(super) use self::connectors::*;
pub(super) use self::definitions::*;
pub(super) use self::entry::*;
use self::helpers::*; pub(super) use self::namespace::*;
pub(super) use self::relationships::*;
pub(super) use self::requirements::*;
pub(super) use self::states::*;
pub(super) use self::usage::*;
pub use self::body::{parse_body, parse_case_body, parse_metadata_body, parse_sysml_calc_body};
pub use self::connectors::{parse_binding_or_succession, parse_connect_usage};
pub use self::definitions::parse_definition_or_usage;
pub use self::definitions::{
parse_constraint_body, parse_dependency, parse_filter, parse_metadata_usage,
parse_redefines_feature_member, parse_shorthand_feature_member, parse_variant_usage,
};
pub use self::entry::parse_sysml_file;
pub const SYSML_DEFINITION_KEYWORDS: &[SyntaxKind] = &[
SyntaxKind::PART_KW,
SyntaxKind::ATTRIBUTE_KW,
SyntaxKind::PORT_KW,
SyntaxKind::ITEM_KW,
SyntaxKind::ACTION_KW,
SyntaxKind::STATE_KW,
SyntaxKind::CONSTRAINT_KW,
SyntaxKind::REQUIREMENT_KW,
SyntaxKind::CASE_KW,
SyntaxKind::CALC_KW,
SyntaxKind::CONNECTION_KW,
SyntaxKind::INTERFACE_KW,
SyntaxKind::ALLOCATION_KW,
SyntaxKind::FLOW_KW,
SyntaxKind::RENDERING_KW,
SyntaxKind::VIEW_KW,
SyntaxKind::VIEWPOINT_KW,
SyntaxKind::ANALYSIS_KW,
SyntaxKind::VERIFICATION_KW,
SyntaxKind::OCCURRENCE_KW,
SyntaxKind::CONCERN_KW,
SyntaxKind::METADATA_KW,
SyntaxKind::ENUM_KW,
];
pub const SYSML_USAGE_KEYWORDS: &[SyntaxKind] = &[
SyntaxKind::PART_KW,
SyntaxKind::ATTRIBUTE_KW,
SyntaxKind::PORT_KW,
SyntaxKind::ITEM_KW,
SyntaxKind::ACTION_KW,
SyntaxKind::STATE_KW,
SyntaxKind::CONSTRAINT_KW,
SyntaxKind::REQUIREMENT_KW,
SyntaxKind::CASE_KW,
SyntaxKind::CALC_KW,
SyntaxKind::CONNECTION_KW,
SyntaxKind::INTERFACE_KW,
SyntaxKind::ALLOCATION_KW,
SyntaxKind::FLOW_KW,
SyntaxKind::RENDERING_KW,
SyntaxKind::VIEW_KW,
SyntaxKind::VIEWPOINT_KW,
SyntaxKind::ANALYSIS_KW,
SyntaxKind::VERIFICATION_KW,
SyntaxKind::OCCURRENCE_KW,
SyntaxKind::INDIVIDUAL_KW,
SyntaxKind::REF_KW,
SyntaxKind::EXHIBIT_KW,
SyntaxKind::INCLUDE_KW,
SyntaxKind::PERFORM_KW,
SyntaxKind::ACCEPT_KW,
SyntaxKind::SEND_KW,
SyntaxKind::SATISFY_KW,
SyntaxKind::CONCERN_KW,
SyntaxKind::METADATA_KW,
SyntaxKind::ENUM_KW,
SyntaxKind::MESSAGE_KW,
SyntaxKind::SNAPSHOT_KW,
SyntaxKind::TIMESLICE_KW,
SyntaxKind::FRAME_KW,
SyntaxKind::RENDER_KW,
SyntaxKind::THEN_KW,
SyntaxKind::ELSE_KW,
SyntaxKind::WHILE_KW,
SyntaxKind::LOOP_KW,
SyntaxKind::UNTIL_KW,
SyntaxKind::IF_KW,
SyntaxKind::ASSERT_KW,
SyntaxKind::ASSUME_KW,
SyntaxKind::REQUIRE_KW,
SyntaxKind::SUBJECT_KW,
SyntaxKind::ACTOR_KW,
SyntaxKind::OBJECTIVE_KW,
SyntaxKind::STAKEHOLDER_KW,
];
pub const USAGE_PREFIX_KEYWORDS: &[SyntaxKind] = &[
SyntaxKind::REF_KW,
SyntaxKind::READONLY_KW,
SyntaxKind::DERIVED_KW,
SyntaxKind::CONSTANT_KW,
SyntaxKind::END_KW,
SyntaxKind::ABSTRACT_KW,
SyntaxKind::VARIATION_KW,
SyntaxKind::VAR_KW,
SyntaxKind::COMPOSITE_KW,
SyntaxKind::PORTION_KW,
SyntaxKind::INDIVIDUAL_KW,
SyntaxKind::IN_KW,
SyntaxKind::OUT_KW,
SyntaxKind::INOUT_KW,
SyntaxKind::RETURN_KW,
SyntaxKind::EVENT_KW,
SyntaxKind::THEN_KW,
SyntaxKind::SNAPSHOT_KW,
SyntaxKind::TIMESLICE_KW,
];
pub fn is_sysml_definition_keyword(kind: SyntaxKind) -> bool {
SYSML_DEFINITION_KEYWORDS.contains(&kind)
}
pub fn is_sysml_usage_keyword(kind: SyntaxKind) -> bool {
SYSML_USAGE_KEYWORDS.contains(&kind)
}
pub fn is_usage_prefix(kind: SyntaxKind) -> bool {
USAGE_PREFIX_KEYWORDS.contains(&kind)
}
fn is_usage_keyword(kind: SyntaxKind) -> bool {
SYSML_USAGE_KEYWORDS.contains(&kind)
}
pub trait SysMLParser: BaseParser {
fn parse_body(&mut self);
fn parse_namespace_member(&mut self)
where
Self: Sized,
{
parse_package_body_element(self);
}
fn can_start_expression(&self) -> bool;
fn parse_typing(&mut self);
fn parse_multiplicity(&mut self);
fn parse_constraint_body(&mut self);
fn parse_definition_or_usage(&mut self);
fn parse_dependency(&mut self);
fn parse_filter(&mut self);
fn parse_metadata_usage(&mut self);
fn parse_connect_usage(&mut self);
fn parse_binding_or_succession(&mut self);
fn parse_variant_usage(&mut self);
fn parse_redefines_feature_member(&mut self);
fn parse_shorthand_feature_member(&mut self);
}