sysml-validate 0.15.1 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/main.js +358 -188
- package/out/main.js.map +4 -4
- package/package.json +1 -1
- package/resources/sysml.dimension-table.json +1 -1
- package/resources/sysml.library.index.json +1 -1
package/out/main.js
CHANGED
|
@@ -45489,8 +45489,17 @@ var SysMLGrammar = () => loadedSysMLGrammar ?? (loadedSysMLGrammar = loadGrammar
|
|
|
45489
45489
|
"$type": "Group",
|
|
45490
45490
|
"elements": [
|
|
45491
45491
|
{
|
|
45492
|
-
"$type": "
|
|
45493
|
-
"
|
|
45492
|
+
"$type": "Alternatives",
|
|
45493
|
+
"elements": [
|
|
45494
|
+
{
|
|
45495
|
+
"$type": "Keyword",
|
|
45496
|
+
"value": "."
|
|
45497
|
+
},
|
|
45498
|
+
{
|
|
45499
|
+
"$type": "Keyword",
|
|
45500
|
+
"value": "::"
|
|
45501
|
+
}
|
|
45502
|
+
]
|
|
45494
45503
|
},
|
|
45495
45504
|
{
|
|
45496
45505
|
"$type": "Assignment",
|
|
@@ -58759,6 +58768,15 @@ var DIAGNOSTIC_MESSAGES = {
|
|
|
58759
58768
|
// RES001s — but an unevaluated filter produces a scope or view that looks
|
|
58760
58769
|
// authoritative and is not, so the fail-open is stated rather than assumed.
|
|
58761
58770
|
RES018_UNEVALUATED_FILTER: (subject, construct) => `${subject} filter is not evaluated: ${construct} is outside the metadata-filter evaluator, which decides '@'/'@@' metadata tests combined with 'not', 'and'/'&', and 'or'/'|'. The filter fails open \u2014 it is treated as pass-through and removes nothing.`,
|
|
58771
|
+
// REQ-389 — Namespace qualification versus feature chaining in every written path
|
|
58772
|
+
// issue #213 — the KerML textual BNF binds `::` tighter than `.`: each
|
|
58773
|
+
// dot-separated link of a FeatureChain is a complete QualifiedName, and only
|
|
58774
|
+
// a Feature can be an `OwnedFeatureChaining::chainingFeature`. A Definition
|
|
58775
|
+
// specializes Classifier, not Feature, so it can never sit on the LEFT of a
|
|
58776
|
+
// dot. Our permissive scoping resolves the dotted form anyway (a definition
|
|
58777
|
+
// is a Type, hence a Namespace), which is exactly why it needs saying: the
|
|
58778
|
+
// Pilot implementation refuses the same text at linking time.
|
|
58779
|
+
RES019_DEFINITION_IN_FEATURE_CHAIN: (segment, member) => `'${segment}' is a definition, not a usage, so '${member}' is reached through it with '::' rather than '.'. Only a feature can be chained with '.' (KerML FeatureChain).`,
|
|
58762
58780
|
// REQ-007 — SysML v1 → v2 migration guardrail.
|
|
58763
58781
|
MIG001_V1_KEYWORD: (keyword, v2, note) => `'${keyword}' is a SysML v1 construct, not a SysML v2 keyword. ${note} Use '${v2}'.`,
|
|
58764
58782
|
MIG002_V1_STEREOTYPE_KNOWN: (stereotype, v2, note) => `SysML v2 has no stereotypes. ${note} Replace \xAB${stereotype}\xBB with '${v2}'.`,
|
|
@@ -58766,197 +58784,197 @@ var DIAGNOSTIC_MESSAGES = {
|
|
|
58766
58784
|
};
|
|
58767
58785
|
var KEYWORD_TOOLTIPS = {
|
|
58768
58786
|
// Package / namespace
|
|
58769
|
-
"package": { kind: "both", def: "Namespace that groups model elements.", example: "package VehicleModel { ... }" },
|
|
58770
|
-
"namespace": { kind: "KerML", def: "Root namespace construct (KerML only).", example: "namespace Kernel { ... }" },
|
|
58771
|
-
"library": { kind: "both", def: "Marks a package as a reusable library.", example: "library package Utils { ... }" },
|
|
58772
|
-
"standard": { kind: "both", def: "Marks a package as a standard-library package. Should only appear in library source.", example: "standard library package ScalarValues { ... }" },
|
|
58773
|
-
"import": { kind: "both", def: "Makes members of another namespace visible in the current scope. Release syntax requires explicit visibility.", example: "private import ISQ::*;" },
|
|
58774
|
-
"alias": { kind: "both", def: "Declares a local name for an element in another namespace.", example: "alias Mass for ISQ::MassValue;" },
|
|
58775
|
-
"filter": { kind: "SysML", def: "Restricts visible members of a namespace by a Boolean expression.", example: "filter @Safety;" },
|
|
58787
|
+
"package": { kind: "both", def: "Namespace that groups model elements.", example: "package VehicleModel { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.5.1 (Packages)" },
|
|
58788
|
+
"namespace": { kind: "KerML", def: "Root namespace construct (KerML only).", example: "namespace Kernel { ... }", cite: "OMG KerML v1.0 \xA78.2.3.4.1 (Namespaces)" },
|
|
58789
|
+
"library": { kind: "both", def: "Marks a package as a reusable library.", example: "library package Utils { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.5.1 (Packages)" },
|
|
58790
|
+
"standard": { kind: "both", def: "Marks a package as a standard-library package. Should only appear in library source.", example: "standard library package ScalarValues { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.5.1 (Packages)" },
|
|
58791
|
+
"import": { kind: "both", def: "Makes members of another namespace visible in the current scope. Release syntax requires explicit visibility.", example: "private import ISQ::*;", cite: "OMG KerML v1.0 \xA78.2.3.4.2 (Imports)" },
|
|
58792
|
+
"alias": { kind: "both", def: "Declares a local name for an element in another namespace.", example: "alias Mass for ISQ::MassValue;", cite: "OMG KerML v1.0 \xA78.2.3.4.3 (Namespace Elements)" },
|
|
58793
|
+
"filter": { kind: "SysML", def: "Restricts visible members of a namespace by a Boolean expression.", example: "filter @Safety;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.5.2 (Package Elements)" },
|
|
58776
58794
|
// Visibility
|
|
58777
|
-
"public": { kind: "both", def: "Visibility: element visible to all importers." },
|
|
58778
|
-
"private": { kind: "both", def: "Visibility: element visible only in its owning namespace." },
|
|
58779
|
-
"protected": { kind: "both", def: "Visibility: element visible to specializations of the owning namespace." },
|
|
58795
|
+
"public": { kind: "both", def: "Visibility: element visible to all importers.", cite: "OMG KerML v1.0 \xA78.2.3.4.3 (Namespace Elements)" },
|
|
58796
|
+
"private": { kind: "both", def: "Visibility: element visible only in its owning namespace.", cite: "OMG KerML v1.0 \xA78.2.3.4.3 (Namespace Elements)" },
|
|
58797
|
+
"protected": { kind: "both", def: "Visibility: element visible to specializations of the owning namespace.", cite: "OMG KerML v1.0 \xA78.2.3.4.3 (Namespace Elements)" },
|
|
58780
58798
|
// Directions
|
|
58781
|
-
"in": { kind: "both", def: "Input direction for a port feature or action parameter." },
|
|
58782
|
-
"out": { kind: "both", def: "Output direction for a port feature or action parameter." },
|
|
58783
|
-
"inout": { kind: "both", def: "Bidirectional direction for a port feature or action parameter." },
|
|
58799
|
+
"in": { kind: "both", def: "Input direction for a port feature or action parameter.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58800
|
+
"out": { kind: "both", def: "Output direction for a port feature or action parameter.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58801
|
+
"inout": { kind: "both", def: "Bidirectional direction for a port feature or action parameter.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58784
58802
|
// Definition keywords
|
|
58785
|
-
"part": { kind: "SysML", def: "Structural component with identity and internal structure. `part def` defines a reusable kind; `part` is a usage occurrence.", example: "part def Vehicle { ... } // definition\npart myCar : Vehicle; // usage" },
|
|
58786
|
-
"port": { kind: "SysML", def: "Interaction point through which a part exchanges items or signals. `port def` defines the contract; `~` conjugates directions.", example: "port def PowerPort { out item power : ElectricalPower; }" },
|
|
58787
|
-
"item": { kind: "SysML", def: "Something that flows, is exchanged, or is produced \u2014 matter, energy, data, or signals.", example: "item def Packet { attribute size : Integer; }" },
|
|
58788
|
-
"attribute": { kind: "SysML", def: "Value-only feature without identity. Use for scalars, quantities, and typed constants.", example: "attribute mass : MassValue = 1500 [kg];" },
|
|
58789
|
-
"action": { kind: "SysML", def: "Behavior step: consumes inputs, performs work, produces outputs. `action def` is reusable; `action` is a usage.", example: "action def Accelerate { in throttle : Real; out torque : Real; }" },
|
|
58790
|
-
"state": { kind: "SysML", def: "Mode a system can occupy. Supports entry/do/exit actions and transitions.", example: "state def Idle { entry action e; do action d; exit action x; }" },
|
|
58791
|
-
"calc": { kind: "SysML", def: "Pure function-like action that returns a value; no side effects.", example: "calc def Speed { in d : LengthValue; in t : TimeValue; return : SpeedValue; }" },
|
|
58792
|
-
"constraint": { kind: "SysML", def: "Formal Boolean condition that must hold. Body is a single Boolean expression.", example: "constraint def MaxMass { subject v : Vehicle; require constraint { v.mass <= 2500 [kg] } }" },
|
|
58793
|
-
"requirement": { kind: "SysML", def: "First-class machine-checkable requirement with a subject, constraints, and verify links.", example: "requirement def MassReq { subject v : Vehicle; require constraint { v.mass <= 2500 [kg] } }" },
|
|
58794
|
-
"concern": { kind: "SysML", def: "Stakeholder interest that may be addressed by requirements.", example: "concern def Safety { stakeholder s : Engineer; }" },
|
|
58795
|
-
"case": { kind: "SysML", def: "Generic case element (see analysis case, verification case, use case for specific forms).", example: "case def C { ... }" },
|
|
58796
|
-
"view": { kind: "SysML", def: "A presentation of a subset of model elements for a specific audience or purpose.", example: "view def SafetyView :> SysML::Views::View { ... }" },
|
|
58797
|
-
"viewpoint": { kind: "SysML", def: "Purpose descriptor for a set of views, specifying stakeholders and framed concerns.", example: "viewpoint def SafetyVP { stakeholder s : SafetyEngineer; }" },
|
|
58798
|
-
"rendering": { kind: "SysML", def: "Specification of how a view is presented (table, tree, diagram, etc.).", example: "rendering def TableRendering { ... }" },
|
|
58799
|
-
"metadata": { kind: "SysML", def: "Non-semantic annotation attached to model elements. Used for tagging, tooling, and cross-cutting concerns.", example: "@Safety\npart def Engine { ... }" },
|
|
58800
|
-
"enum": { kind: "SysML", def: "Enumeration definition with a set of named literal values.", example: "enum def Status { active, inactive, standby }" },
|
|
58801
|
-
"occurrence": { kind: "SysML", def: "General occurrence concept covering things with a lifetime.", example: "occurrence def Event { ... }" },
|
|
58802
|
-
"connection": { kind: "SysML", def: "A typed relationship linking two or more parts through ports.", example: "connection def PowerLink connect PowerOut to PowerIn;" },
|
|
58803
|
-
"interface": { kind: "SysML", def: "Contract for interaction between two ends, specifying port types and flow.", example: "interface def PowerInterface { end source : PowerOutPort; end sink : ~PowerOutPort; }" },
|
|
58804
|
-
"allocation": { kind: "SysML", def: "Maps a source element to a target element that realizes it.", example: "allocate functions.drive to hardware.motor;" },
|
|
58805
|
-
"flow": { kind: "SysML", def: "Item flow between source and target (material, data, energy).", example: "flow power of ElectricalPower from battery.out to motor.in;" },
|
|
58806
|
-
"succession": { kind: "SysML", def: "Temporal ordering between behaviors \u2014 source happens before target.", example: "succession first startEngine then driveForward;" },
|
|
58807
|
-
"transition": { kind: "SysML", def: "Change between states: source, optional trigger, guard, effect, and target.", example: "transition first idle accept cmd : Start then running;" },
|
|
58803
|
+
"part": { kind: "SysML", def: "Structural component with identity and internal structure. `part def` defines a reusable kind; `part` is a usage occurrence.", example: "part def Vehicle { ... } // definition\npart myCar : Vehicle; // usage", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.11 (Parts)" },
|
|
58804
|
+
"port": { kind: "SysML", def: "Interaction point through which a part exchanges items or signals. `port def` defines the contract; `~` conjugates directions.", example: "port def PowerPort { out item power : ElectricalPower; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.12 (Ports)" },
|
|
58805
|
+
"item": { kind: "SysML", def: "Something that flows, is exchanged, or is produced \u2014 matter, energy, data, or signals.", example: "item def Packet { attribute size : Integer; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.10 (Items)" },
|
|
58806
|
+
"attribute": { kind: "SysML", def: "Value-only feature without identity. Use for scalars, quantities, and typed constants.", example: "attribute mass : MassValue = 1500 [kg];", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.7 (Attributes)" },
|
|
58807
|
+
"action": { kind: "SysML", def: "Behavior step: consumes inputs, performs work, produces outputs. `action def` is reusable; `action` is a usage.", example: "action def Accelerate { in throttle : Real; out torque : Real; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17 (Actions)" },
|
|
58808
|
+
"state": { kind: "SysML", def: "Mode a system can occupy. Supports entry/do/exit actions and transitions.", example: "state def Idle { entry action e; do action d; exit action x; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18 (States)" },
|
|
58809
|
+
"calc": { kind: "SysML", def: "Pure function-like action that returns a value; no side effects.", example: "calc def Speed { in d : LengthValue; in t : TimeValue; return : SpeedValue; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.19 (Calculations)" },
|
|
58810
|
+
"constraint": { kind: "SysML", def: "Formal Boolean condition that must hold. Body is a single Boolean expression.", example: "constraint def MaxMass { subject v : Vehicle; require constraint { v.mass <= 2500 [kg] } }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.20 (Constraints)" },
|
|
58811
|
+
"requirement": { kind: "SysML", def: "First-class machine-checkable requirement with a subject, constraints, and verify links.", example: "requirement def MassReq { subject v : Vehicle; require constraint { v.mass <= 2500 [kg] } }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21 (Requirements)" },
|
|
58812
|
+
"concern": { kind: "SysML", def: "Stakeholder interest that may be addressed by requirements.", example: "concern def Safety { stakeholder s : Engineer; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21.3 (Concerns)" },
|
|
58813
|
+
"case": { kind: "SysML", def: "Generic case element (see analysis case, verification case, use case for specific forms).", example: "case def C { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.22 (Cases)" },
|
|
58814
|
+
"view": { kind: "SysML", def: "A presentation of a subset of model elements for a specific audience or purpose.", example: "view def SafetyView :> SysML::Views::View { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.26.1 (View Definitions)" },
|
|
58815
|
+
"viewpoint": { kind: "SysML", def: "Purpose descriptor for a set of views, specifying stakeholders and framed concerns.", example: "viewpoint def SafetyVP { stakeholder s : SafetyEngineer; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.26.3 (Viewpoints)" },
|
|
58816
|
+
"rendering": { kind: "SysML", def: "Specification of how a view is presented (table, tree, diagram, etc.).", example: "rendering def TableRendering { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.26.4 (Renderings)" },
|
|
58817
|
+
"metadata": { kind: "SysML", def: "Non-semantic annotation attached to model elements. Used for tagging, tooling, and cross-cutting concerns.", example: "@Safety\npart def Engine { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.27 (Metadata)" },
|
|
58818
|
+
"enum": { kind: "SysML", def: "Enumeration definition with a set of named literal values.", example: "enum def Status { active, inactive, standby }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.8 (Enumerations)" },
|
|
58819
|
+
"occurrence": { kind: "SysML", def: "General occurrence concept covering things with a lifetime.", example: "occurrence def Event { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.9 (Occurrences)" },
|
|
58820
|
+
"connection": { kind: "SysML", def: "A typed relationship linking two or more parts through ports.", example: "connection def PowerLink connect PowerOut to PowerIn;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.13.1 (Connection Definition and Usage)" },
|
|
58821
|
+
"interface": { kind: "SysML", def: "Contract for interaction between two ends, specifying port types and flow.", example: "interface def PowerInterface { end source : PowerOutPort; end sink : ~PowerOutPort; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.14 (Interfaces)" },
|
|
58822
|
+
"allocation": { kind: "SysML", def: "Maps a source element to a target element that realizes it.", example: "allocate functions.drive to hardware.motor;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.15 (Allocations)" },
|
|
58823
|
+
"flow": { kind: "SysML", def: "Item flow between source and target (material, data, energy).", example: "flow power of ElectricalPower from battery.out to motor.in;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.16 (Flows)" },
|
|
58824
|
+
"succession": { kind: "SysML", def: "Temporal ordering between behaviors \u2014 source happens before target.", example: "succession first startEngine then driveForward;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.13.3 (Successions)" },
|
|
58825
|
+
"transition": { kind: "SysML", def: "Change between states: source, optional trigger, guard, effect, and target.", example: "transition first idle accept cmd : Start then running;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18.3 (Transition Usages)" },
|
|
58808
58826
|
// Modifiers
|
|
58809
|
-
"abstract": { kind: "both", def: "Definition cannot be instantiated directly; must be specialized." },
|
|
58810
|
-
"ref": { kind: "SysML", def: "References an element owned elsewhere rather than composing it." },
|
|
58811
|
-
"derived": { kind: "both", def: "Feature value is computed from other features; not stored directly." },
|
|
58812
|
-
"readonly": { kind: "both", def: "Legacy recovery token, not a SysML/KerML Release modifier. Use SysML constant for an immutable usage." },
|
|
58813
|
-
"composite": { kind: "both", def: "Feature is compositely owned by the enclosing element (filled diamond)." },
|
|
58814
|
-
"portion": { kind: "both", def: "Feature is a temporal or spatial portion of the owner." },
|
|
58815
|
-
"var": { kind: "KerML", def: "Variable feature \u2014 value changes over time." },
|
|
58816
|
-
"const": { kind: "KerML", def: "Constant feature \u2014 value set at creation time (KerML form). Use `constant` in SysML." },
|
|
58817
|
-
"constant": { kind: "SysML", def: "Constant usage \u2014 value set at initialization, not changed afterward (SysML form)." },
|
|
58818
|
-
"ordered": { kind: "both", def: "Feature values are ordered (sequence semantics)." },
|
|
58819
|
-
"nonunique": { kind: "both", def: "Feature values may repeat (bag/multiset semantics)." },
|
|
58820
|
-
"variation": { kind: "SysML", def: "A definition offering multiple variant alternatives." },
|
|
58821
|
-
"variant": { kind: "SysML", def: "One alternative inside a variation definition." },
|
|
58822
|
-
"individual": { kind: "SysML", def: "A unique real-world object; multiplicity [1] by definition." },
|
|
58823
|
-
"snapshot": { kind: "SysML", def: "Zero-duration timeslice of an individual." },
|
|
58824
|
-
"timeslice": { kind: "SysML", def: "Bounded lifetime segment of an individual." },
|
|
58825
|
-
"parallel": { kind: "SysML", def: "State or region with concurrent sub-states (orthogonal regions)." },
|
|
58826
|
-
"end": { kind: "both", def: "Endpoint feature in a connection or interface definition." },
|
|
58827
|
+
"abstract": { kind: "both", def: "Definition cannot be instantiated directly; must be specialized.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.1 (Definitions)" },
|
|
58828
|
+
"ref": { kind: "SysML", def: "References an element owned elsewhere rather than composing it.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.3 (Reference Usages)" },
|
|
58829
|
+
"derived": { kind: "both", def: "Feature value is computed from other features; not stored directly.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.2 (Usages)" },
|
|
58830
|
+
"readonly": { kind: "both", def: "Legacy recovery token, not a SysML/KerML Release modifier. Use SysML constant for an immutable usage.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.2 (Usages)" },
|
|
58831
|
+
"composite": { kind: "both", def: "Feature is compositely owned by the enclosing element (filled diamond).", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.2 (Usages)" },
|
|
58832
|
+
"portion": { kind: "both", def: "Feature is a temporal or spatial portion of the owner.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.2 (Usages)" },
|
|
58833
|
+
"var": { kind: "KerML", def: "Variable feature \u2014 value changes over time.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58834
|
+
"const": { kind: "KerML", def: "Constant feature \u2014 value set at creation time (KerML form). Use `constant` in SysML.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58835
|
+
"constant": { kind: "SysML", def: "Constant usage \u2014 value set at initialization, not changed afterward (SysML form).", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.2 (Usages)" },
|
|
58836
|
+
"ordered": { kind: "both", def: "Feature values are ordered (sequence semantics).", cite: "OMG KerML v1.0 \xA78.2.5.11 (Multiplicities)" },
|
|
58837
|
+
"nonunique": { kind: "both", def: "Feature values may repeat (bag/multiset semantics).", cite: "OMG KerML v1.0 \xA78.2.5.11 (Multiplicities)" },
|
|
58838
|
+
"variation": { kind: "SysML", def: "A definition offering multiple variant alternatives.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.1 (Definitions)" },
|
|
58839
|
+
"variant": { kind: "SysML", def: "One alternative inside a variation definition.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.4 (Body Elements)" },
|
|
58840
|
+
"individual": { kind: "SysML", def: "A unique real-world object; multiplicity [1] by definition.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.9.1 (Occurrence Definitions)" },
|
|
58841
|
+
"snapshot": { kind: "SysML", def: "Zero-duration timeslice of an individual.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.9.2 (Occurrence Usages)" },
|
|
58842
|
+
"timeslice": { kind: "SysML", def: "Bounded lifetime segment of an individual.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.9.2 (Occurrence Usages)" },
|
|
58843
|
+
"parallel": { kind: "SysML", def: "State or region with concurrent sub-states (orthogonal regions).", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18.1 (State Definitions)" },
|
|
58844
|
+
"end": { kind: "both", def: "Endpoint feature in a connection or interface definition.", cite: "OMG KerML v1.0 \xA78.2.5.5.1 (Connectors)" },
|
|
58827
58845
|
// KerML kernel keywords
|
|
58828
|
-
"type": { kind: "KerML", def: "Fundamental KerML classifier type. In user `.sysml` code, prefer `part def`, `attribute def`, etc." },
|
|
58829
|
-
"class": { kind: "KerML", def: "KerML class (has identity). In `.sysml`, prefer `part def`." },
|
|
58830
|
-
"classifier": { kind: "KerML", def: "KerML base classifier. In `.sysml`, prefer `part def`." },
|
|
58831
|
-
"struct": { kind: "KerML", def: "KerML structure (data-value, no identity). In `.sysml`, prefer `attribute def`." },
|
|
58832
|
-
"datatype": { kind: "KerML", def: "KerML data type (no identity). In `.sysml`, prefer `attribute def`." },
|
|
58833
|
-
"metaclass": { kind: "KerML", def: "KerML metaclass for modeling language extension points." },
|
|
58834
|
-
"assoc": { kind: "KerML", def: "KerML association. In `.sysml`, prefer `connection def`." },
|
|
58835
|
-
"feature": { kind: "KerML", def: "Generic KerML feature. In `.sysml`, prefer `part`, `attribute`, `port`, etc." },
|
|
58836
|
-
"function": { kind: "KerML", def: "KerML function (pure computation). In `.sysml`, prefer `calc def`." },
|
|
58837
|
-
"predicate": { kind: "KerML", def: "KerML Boolean function. In `.sysml`, prefer `constraint def`." },
|
|
58838
|
-
"step": { kind: "KerML", def: "KerML step (behavior invocation)." },
|
|
58839
|
-
"behavior": { kind: "KerML", def: "KerML behavior classifier. In `.sysml`, prefer `action def`." },
|
|
58840
|
-
"interaction": { kind: "KerML", def: "KerML interaction (multi-party behavior)." },
|
|
58841
|
-
"expr": { kind: "KerML", def: "KerML expression feature." },
|
|
58846
|
+
"type": { kind: "KerML", def: "Fundamental KerML classifier type. In user `.sysml` code, prefer `part def`, `attribute def`, etc.", cite: "OMG KerML v1.0 \xA78.2.4.1.1 (Types)" },
|
|
58847
|
+
"class": { kind: "KerML", def: "KerML class (has identity). In `.sysml`, prefer `part def`.", cite: "OMG KerML v1.0 \xA78.2.5.2 (Classes)" },
|
|
58848
|
+
"classifier": { kind: "KerML", def: "KerML base classifier. In `.sysml`, prefer `part def`.", cite: "OMG KerML v1.0 \xA78.2.4.2.1 (Classifiers)" },
|
|
58849
|
+
"struct": { kind: "KerML", def: "KerML structure (data-value, no identity). In `.sysml`, prefer `attribute def`.", cite: "OMG KerML v1.0 \xA78.2.5.3 (Structures)" },
|
|
58850
|
+
"datatype": { kind: "KerML", def: "KerML data type (no identity). In `.sysml`, prefer `attribute def`.", cite: "OMG KerML v1.0 \xA78.2.5.1 (Data Types)" },
|
|
58851
|
+
"metaclass": { kind: "KerML", def: "KerML metaclass for modeling language extension points.", cite: "OMG KerML v1.0 \xA78.2.5.12 (Metadata)" },
|
|
58852
|
+
"assoc": { kind: "KerML", def: "KerML association. In `.sysml`, prefer `connection def`.", cite: "OMG KerML v1.0 \xA78.2.5.4 (Associations)" },
|
|
58853
|
+
"feature": { kind: "KerML", def: "Generic KerML feature. In `.sysml`, prefer `part`, `attribute`, `port`, etc.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58854
|
+
"function": { kind: "KerML", def: "KerML function (pure computation). In `.sysml`, prefer `calc def`.", cite: "OMG KerML v1.0 \xA78.2.5.7.1 (Functions)" },
|
|
58855
|
+
"predicate": { kind: "KerML", def: "KerML Boolean function. In `.sysml`, prefer `constraint def`.", cite: "OMG KerML v1.0 \xA78.2.5.7.3 (Predicates)" },
|
|
58856
|
+
"step": { kind: "KerML", def: "KerML step (behavior invocation).", cite: "OMG KerML v1.0 \xA78.2.5.6.2 (Steps)" },
|
|
58857
|
+
"behavior": { kind: "KerML", def: "KerML behavior classifier. In `.sysml`, prefer `action def`.", cite: "OMG KerML v1.0 \xA78.2.5.6.1 (Behaviors)" },
|
|
58858
|
+
"interaction": { kind: "KerML", def: "KerML interaction (multi-party behavior).", cite: "OMG KerML v1.0 \xA78.2.5.9.1 (Interactions)" },
|
|
58859
|
+
"expr": { kind: "KerML", def: "KerML expression feature.", cite: "OMG KerML v1.0 \xA78.2.5.7.2 (Expressions)" },
|
|
58842
58860
|
// Relationship keywords
|
|
58843
|
-
"specializes": { kind: "both", def: "Keyword form of `:>` specialization relationship." },
|
|
58844
|
-
"redefines": { kind: "both", def: "Keyword form of `:>>` redefinition relationship." },
|
|
58845
|
-
"subsets": { kind: "both", def: "Keyword form of `:>` subsetting on feature usages." },
|
|
58846
|
-
"conjugates": { kind: "both", def: "Keyword form of `~` conjugation on port types." },
|
|
58847
|
-
"disjoint": { kind: "both", def: "Used in `disjoint from` to assert two types share no instances." },
|
|
58848
|
-
"unions": { kind: "KerML", def: "Feature unions over other features." },
|
|
58849
|
-
"intersects": { kind: "KerML", def: "Feature intersection." },
|
|
58850
|
-
"differences": { kind: "KerML", def: "Feature set difference." },
|
|
58851
|
-
"chains": { kind: "KerML", def: "Feature chaining through a path of features." },
|
|
58852
|
-
"inverting": { kind: "KerML", def: "Feature that is the inverse of another." },
|
|
58861
|
+
"specializes": { kind: "both", def: "Keyword form of `:>` specialization relationship.", cite: "OMG KerML v1.0 \xA78.2.4.1.2 (Specialization)" },
|
|
58862
|
+
"redefines": { kind: "both", def: "Keyword form of `:>>` redefinition relationship.", cite: "OMG KerML v1.0 \xA78.2.4.3.4 (Redefinition)" },
|
|
58863
|
+
"subsets": { kind: "both", def: "Keyword form of `:>` subsetting on feature usages.", cite: "OMG KerML v1.0 \xA78.2.4.3.3 (Subsetting)" },
|
|
58864
|
+
"conjugates": { kind: "both", def: "Keyword form of `~` conjugation on port types.", cite: "OMG KerML v1.0 \xA78.2.4.1.3 (Conjugation)" },
|
|
58865
|
+
"disjoint": { kind: "both", def: "Used in `disjoint from` to assert two types share no instances.", cite: "OMG KerML v1.0 \xA78.2.4.1.4 (Disjoining)" },
|
|
58866
|
+
"unions": { kind: "KerML", def: "Feature unions over other features.", cite: "OMG KerML v1.0 \xA78.2.4.1.5 (Unioning, Intersecting, and Differencing)" },
|
|
58867
|
+
"intersects": { kind: "KerML", def: "Feature intersection.", cite: "OMG KerML v1.0 \xA78.2.4.1.5 (Unioning, Intersecting, and Differencing)" },
|
|
58868
|
+
"differences": { kind: "KerML", def: "Feature set difference.", cite: "OMG KerML v1.0 \xA78.2.4.1.5 (Unioning, Intersecting, and Differencing)" },
|
|
58869
|
+
"chains": { kind: "KerML", def: "Feature chaining through a path of features.", cite: "OMG KerML v1.0 \xA78.2.4.3.5 (Feature Chaining)" },
|
|
58870
|
+
"inverting": { kind: "KerML", def: "Feature that is the inverse of another.", cite: "OMG KerML v1.0 \xA78.2.4.3.6 (Feature Inverting)" },
|
|
58853
58871
|
// Behavioral keywords
|
|
58854
|
-
"perform": { kind: "SysML", def: "Part performs (executes) an action usage.", example: "perform action drive;" },
|
|
58855
|
-
"exhibit": { kind: "SysML", def: "Part exhibits (runs) a state machine.", example: "exhibit state lifecycle;" },
|
|
58856
|
-
"include": { kind: "SysML", def: "Use case always includes another use case.", example: "include useCase Authenticate;" },
|
|
58857
|
-
"satisfy": { kind: "SysML", def: "Element satisfies a requirement.", example: "satisfy MassReq by myCar;" },
|
|
58858
|
-
"verify": { kind: "SysML", def: "Verification case verifies a requirement.", example: "verify MassReq;" },
|
|
58859
|
-
"require": { kind: "SysML", def: "Normative constraint inside a requirement definition.", example: "require constraint { mass <= 2500 [kg] }" },
|
|
58860
|
-
"assume": { kind: "SysML", def: "Precondition inside a requirement (if false, req not violated).", example: "assume constraint { isLoaded }" },
|
|
58861
|
-
"assert": { kind: "SysML", def: "Asserts that a constraint holds in the current scope.", example: "assert constraint { v.mass <= 2500 [kg] }" },
|
|
58862
|
-
"subject": { kind: "SysML", def: "The element that a requirement, use case, or case constrains. Exactly one per definition.", example: "subject v : Vehicle;" },
|
|
58863
|
-
"actor": { kind: "SysML", def: "An active external participant in a use case or case." },
|
|
58864
|
-
"stakeholder": { kind: "SysML", def: "An interested party in a concern or viewpoint." },
|
|
58865
|
-
"objective": { kind: "SysML", def: "Goal of an analysis or verification case.", example: "objective obj { verify MassReq; }" },
|
|
58866
|
-
"frame": { kind: "SysML", def: "Frames a concern in a requirement or viewpoint.", example: "frame concern Safety;" },
|
|
58867
|
-
"expose": { kind: "SysML", def: "Makes selected model elements visible in a view.", example: "expose myCar.engine;" },
|
|
58868
|
-
"render": { kind: "SysML", def: "Specifies how a view is rendered (table, tree, diagram).", example: "render asTable;" },
|
|
58872
|
+
"perform": { kind: "SysML", def: "Part performs (executes) an action usage.", example: "perform action drive;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.2 (Action Usages)" },
|
|
58873
|
+
"exhibit": { kind: "SysML", def: "Part exhibits (runs) a state machine.", example: "exhibit state lifecycle;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18.2 (State Usages)" },
|
|
58874
|
+
"include": { kind: "SysML", def: "Use case always includes another use case.", example: "include useCase Authenticate;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.25 (Use Cases)" },
|
|
58875
|
+
"satisfy": { kind: "SysML", def: "Element satisfies a requirement.", example: "satisfy MassReq by myCar;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21.2 (Requirement Usages)" },
|
|
58876
|
+
"verify": { kind: "SysML", def: "Verification case verifies a requirement.", example: "verify MassReq;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.24 (Verification Cases)" },
|
|
58877
|
+
"require": { kind: "SysML", def: "Normative constraint inside a requirement definition.", example: "require constraint { mass <= 2500 [kg] }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21.1 (Requirement Definitions)" },
|
|
58878
|
+
"assume": { kind: "SysML", def: "Precondition inside a requirement (if false, req not violated).", example: "assume constraint { isLoaded }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21.1 (Requirement Definitions)" },
|
|
58879
|
+
"assert": { kind: "SysML", def: "Asserts that a constraint holds in the current scope.", example: "assert constraint { v.mass <= 2500 [kg] }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.20 (Constraints)" },
|
|
58880
|
+
"subject": { kind: "SysML", def: "The element that a requirement, use case, or case constrains. Exactly one per definition.", example: "subject v : Vehicle;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.22 (Cases)" },
|
|
58881
|
+
"actor": { kind: "SysML", def: "An active external participant in a use case or case.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.22 (Cases)" },
|
|
58882
|
+
"stakeholder": { kind: "SysML", def: "An interested party in a concern or viewpoint.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21.3 (Concerns)" },
|
|
58883
|
+
"objective": { kind: "SysML", def: "Goal of an analysis or verification case.", example: "objective obj { verify MassReq; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.22 (Cases)" },
|
|
58884
|
+
"frame": { kind: "SysML", def: "Frames a concern in a requirement or viewpoint.", example: "frame concern Safety;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21.3 (Concerns)" },
|
|
58885
|
+
"expose": { kind: "SysML", def: "Makes selected model elements visible in a view.", example: "expose myCar.engine;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.26.2 (View Usages)" },
|
|
58886
|
+
"render": { kind: "SysML", def: "Specifies how a view is rendered (table, tree, diagram).", example: "render asTable;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.26.4 (Renderings)" },
|
|
58869
58887
|
// Behavioral control
|
|
58870
|
-
"entry": { kind: "SysML", def: "Action executed when entering a state.", example: "entry action initialize;" },
|
|
58871
|
-
"do": { kind: "SysML", def: "Action executed while in a state.", example: "do action monitor;" },
|
|
58872
|
-
"exit": { kind: "SysML", def: "Action executed when leaving a state.", example: "exit action cleanup;" },
|
|
58873
|
-
"first": { kind: "SysML", def: "Source state of a transition, or first step in a sequence.", example: "first idle" },
|
|
58874
|
-
"then": { kind: "SysML", def: "Target state of a transition, or next step in a sequence.", example: "then running" },
|
|
58875
|
-
"accept": { kind: "SysML", def: "Transition trigger \u2014 waits for an event, time, or change.", example: "accept cmd : CommandSignal" },
|
|
58876
|
-
"send": { kind: "SysML", def: "Sends an item or signal through a port.", example: "send statusUpdate via outputPort;" },
|
|
58877
|
-
"if": { kind: "SysML", def: "Guard condition in a transition or conditional expression.", example: "if speed > 60 [km/h]" },
|
|
58878
|
-
"while": { kind: "SysML", def: "Looping control flow \u2014 repeat while condition is true.", example: "while running loop { ... }" },
|
|
58879
|
-
"for": { kind: "SysML", def: "Iteration over a collection.", example: "for x in wheels loop { ... }" },
|
|
58880
|
-
"return": { kind: "SysML", def: "Return value declaration in a `calc def`.", example: "return result : SpeedValue;" },
|
|
58881
|
-
"merge": { kind: "SysML", def: "Action flow merge node \u2014 multiple incoming, one outgoing.", example: "merge m;" },
|
|
58882
|
-
"decide": { kind: "SysML", def: "Action flow decision (fork) node \u2014 one incoming, multiple guarded outgoing.", example: "decide d;" },
|
|
58883
|
-
"join": { kind: "SysML", def: "Action flow join node \u2014 multiple incoming, one outgoing (all must complete).", example: "join j;" },
|
|
58884
|
-
"fork": { kind: "SysML", def: "Action flow fork node \u2014 one incoming, multiple concurrent outgoing.", example: "fork f;" },
|
|
58885
|
-
"terminate": { kind: "SysML", def: "Terminates the enclosing action or behavior.", example: "terminate;" },
|
|
58886
|
-
"assign": { kind: "SysML", def: "Assignment action \u2014 sets a variable to an expression value.", example: "assign x := expr;" },
|
|
58888
|
+
"entry": { kind: "SysML", def: "Action executed when entering a state.", example: "entry action initialize;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18.2 (State Usages)" },
|
|
58889
|
+
"do": { kind: "SysML", def: "Action executed while in a state.", example: "do action monitor;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18.2 (State Usages)" },
|
|
58890
|
+
"exit": { kind: "SysML", def: "Action executed when leaving a state.", example: "exit action cleanup;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18.2 (State Usages)" },
|
|
58891
|
+
"first": { kind: "SysML", def: "Source state of a transition, or first step in a sequence.", example: "first idle", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.8 (Action Successions)" },
|
|
58892
|
+
"then": { kind: "SysML", def: "Target state of a transition, or next step in a sequence.", example: "then running", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.8 (Action Successions)" },
|
|
58893
|
+
"accept": { kind: "SysML", def: "Transition trigger \u2014 waits for an event, time, or change.", example: "accept cmd : CommandSignal", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.4 (Send and Accept Action Usages)" },
|
|
58894
|
+
"send": { kind: "SysML", def: "Sends an item or signal through a port.", example: "send statusUpdate via outputPort;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.4 (Send and Accept Action Usages)" },
|
|
58895
|
+
"if": { kind: "SysML", def: "Guard condition in a transition or conditional expression.", example: "if speed > 60 [km/h]", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.7 (Structured Control Action Usages)" },
|
|
58896
|
+
"while": { kind: "SysML", def: "Looping control flow \u2014 repeat while condition is true.", example: "while running loop { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.7 (Structured Control Action Usages)" },
|
|
58897
|
+
"for": { kind: "SysML", def: "Iteration over a collection.", example: "for x in wheels loop { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.7 (Structured Control Action Usages)" },
|
|
58898
|
+
"return": { kind: "SysML", def: "Return value declaration in a `calc def`.", example: "return result : SpeedValue;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.19 (Calculations)" },
|
|
58899
|
+
"merge": { kind: "SysML", def: "Action flow merge node \u2014 multiple incoming, one outgoing.", example: "merge m;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.3 (Control Nodes)" },
|
|
58900
|
+
"decide": { kind: "SysML", def: "Action flow decision (fork) node \u2014 one incoming, multiple guarded outgoing.", example: "decide d;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.3 (Control Nodes)" },
|
|
58901
|
+
"join": { kind: "SysML", def: "Action flow join node \u2014 multiple incoming, one outgoing (all must complete).", example: "join j;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.3 (Control Nodes)" },
|
|
58902
|
+
"fork": { kind: "SysML", def: "Action flow fork node \u2014 one incoming, multiple concurrent outgoing.", example: "fork f;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.3 (Control Nodes)" },
|
|
58903
|
+
"terminate": { kind: "SysML", def: "Terminates the enclosing action or behavior.", example: "terminate;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.6 (Terminate Action Usages)" },
|
|
58904
|
+
"assign": { kind: "SysML", def: "Assignment action \u2014 sets a variable to an expression value.", example: "assign x := expr;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17.5 (Assignment Action Usages)" },
|
|
58887
58905
|
// Connect/bind/flow
|
|
58888
|
-
"connect": { kind: "SysML", def: "Creates a connector between two ends.", example: "connect engine.out to wheels.in;" },
|
|
58889
|
-
"bind": { kind: "SysML", def: "Shorthand binding connector \u2014 two ends share the same value.", example: "bind outer.power = inner.supply;" },
|
|
58890
|
-
"binding": { kind: "SysML", def: "Named binding connector declaration.", example: "binding link of supply = demand;" },
|
|
58891
|
-
"allocate": { kind: "SysML", def: "Allocates a logical element to a physical element.", example: "allocate func.drive to hw.motor;" },
|
|
58906
|
+
"connect": { kind: "SysML", def: "Creates a connector between two ends.", example: "connect engine.out to wheels.in;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.13.1 (Connection Definition and Usage)" },
|
|
58907
|
+
"bind": { kind: "SysML", def: "Shorthand binding connector \u2014 two ends share the same value.", example: "bind outer.power = inner.supply;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.13.2 (Binding Connectors)" },
|
|
58908
|
+
"binding": { kind: "SysML", def: "Named binding connector declaration.", example: "binding link of supply = demand;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.13.2 (Binding Connectors)" },
|
|
58909
|
+
"allocate": { kind: "SysML", def: "Allocates a logical element to a physical element.", example: "allocate func.drive to hw.motor;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.15 (Allocations)" },
|
|
58892
58910
|
// Doc/comment/rep
|
|
58893
|
-
"doc": { kind: "both", def: "Modeled documentation attached to the next element (not discarded trivia).", example: "doc /* This part models the engine. */" },
|
|
58894
|
-
"comment": { kind: "both", def: "Modeled comment with an optional target.", example: "comment about myCar /* important */ ;" },
|
|
58895
|
-
"rep": { kind: "both", def: "Modeled textual representation in an external language.", example: 'rep vehicleView language "html" /* <b>Vehicle</b> */ ;' },
|
|
58896
|
-
"language": { kind: "both", def: "Identifies the external language of a `rep` body.", example: 'rep r language "markdown" /* ... */ ;' },
|
|
58897
|
-
"about": { kind: "both", def: "Attaches a `comment` or annotation to a named target.", example: "comment about myCar /* ... */ ;" },
|
|
58911
|
+
"doc": { kind: "both", def: "Modeled documentation attached to the next element (not discarded trivia).", example: "doc /* This part models the engine. */", cite: "OMG KerML v1.0 \xA78.2.3.3.2 (Comments and Documentation)" },
|
|
58912
|
+
"comment": { kind: "both", def: "Modeled comment with an optional target.", example: "comment about myCar /* important */ ;", cite: "OMG KerML v1.0 \xA78.2.3.3.2 (Comments and Documentation)" },
|
|
58913
|
+
"rep": { kind: "both", def: "Modeled textual representation in an external language.", example: 'rep vehicleView language "html" /* <b>Vehicle</b> */ ;', cite: "OMG KerML v1.0 \xA78.2.3.3.3 (Textual Representation)" },
|
|
58914
|
+
"language": { kind: "both", def: "Identifies the external language of a `rep` body.", example: 'rep r language "markdown" /* ... */ ;', cite: "OMG KerML v1.0 \xA78.2.3.3.3 (Textual Representation)" },
|
|
58915
|
+
"about": { kind: "both", def: "Attaches a `comment` or annotation to a named target.", example: "comment about myCar /* ... */ ;", cite: "OMG KerML v1.0 \xA78.2.3.3.1 (Annotations)" },
|
|
58898
58916
|
// Expression keywords
|
|
58899
|
-
"and": { kind: "both", def: "Boolean conjunction (lower precedence than `&`). Do NOT use `&&`.", example: "isActive and isLoaded" },
|
|
58900
|
-
"or": { kind: "both", def: "Boolean disjunction. Do NOT use `||`.", example: "isFull or isEmpty" },
|
|
58901
|
-
"xor": { kind: "both", def: "Boolean exclusive-or.", example: "a xor b" },
|
|
58902
|
-
"not": { kind: "both", def: "Boolean negation. Do NOT use `!`.", example: "not isActive" },
|
|
58903
|
-
"implies": { kind: "both", def: "Logical implication (\u2192): `a implies b` is false only when a is true and b is false.", example: "isRunning implies hasPower" },
|
|
58904
|
-
"istype": { kind: "both", def: "Classification test \u2014 is the value an instance of this type?", example: "x istype Vehicle" },
|
|
58905
|
-
"hastype": { kind: "both", def: "Type check \u2014 does the value have exactly this type?", example: "x hastype Car" },
|
|
58906
|
-
"as": { kind: "both", def: "Type cast expression.", example: "x as Car" },
|
|
58907
|
-
"meta": { kind: "both", def: "Metadata access expression.", example: "x meta @Owner" },
|
|
58908
|
-
"null": { kind: "both", def: "The null (no-value) literal.", example: "if x == null then ..." },
|
|
58909
|
-
"true": { kind: "both", def: "Boolean literal true.", example: "attribute isLoaded : Boolean = true;" },
|
|
58910
|
-
"false": { kind: "both", def: "Boolean literal false.", example: "attribute isLoaded : Boolean = false;" },
|
|
58911
|
-
"new": { kind: "both", def: "Creates a new instance of the specified type.", example: "new Vehicle { ... }" }
|
|
58917
|
+
"and": { kind: "both", def: "Boolean conjunction (lower precedence than `&`). Do NOT use `&&`.", example: "isActive and isLoaded", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58918
|
+
"or": { kind: "both", def: "Boolean disjunction. Do NOT use `||`.", example: "isFull or isEmpty", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58919
|
+
"xor": { kind: "both", def: "Boolean exclusive-or.", example: "a xor b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58920
|
+
"not": { kind: "both", def: "Boolean negation. Do NOT use `!`.", example: "not isActive", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58921
|
+
"implies": { kind: "both", def: "Logical implication (\u2192): `a implies b` is false only when a is true and b is false.", example: "isRunning implies hasPower", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58922
|
+
"istype": { kind: "both", def: "Classification test \u2014 is the value an instance of this type?", example: "x istype Vehicle", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58923
|
+
"hastype": { kind: "both", def: "Type check \u2014 does the value have exactly this type?", example: "x hastype Car", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58924
|
+
"as": { kind: "both", def: "Type cast expression.", example: "x as Car", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58925
|
+
"meta": { kind: "both", def: "Metadata access expression.", example: "x meta @Owner", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58926
|
+
"null": { kind: "both", def: "The null (no-value) literal.", example: "if x == null then ...", cite: "OMG KerML v1.0 \xA78.2.5.8.3 (Base Expressions)" },
|
|
58927
|
+
"true": { kind: "both", def: "Boolean literal true.", example: "attribute isLoaded : Boolean = true;", cite: "OMG KerML v1.0 \xA78.2.5.8.4 (Literal Expressions)" },
|
|
58928
|
+
"false": { kind: "both", def: "Boolean literal false.", example: "attribute isLoaded : Boolean = false;", cite: "OMG KerML v1.0 \xA78.2.5.8.4 (Literal Expressions)" },
|
|
58929
|
+
"new": { kind: "both", def: "Creates a new instance of the specified type.", example: "new Vehicle { ... }", cite: "OMG KerML v1.0 \xA78.2.5.8.3 (Base Expressions)" }
|
|
58912
58930
|
};
|
|
58913
58931
|
var MULTI_WORD_KEYWORD_TOOLTIPS = {
|
|
58914
|
-
"part def": { kind: "SysML", def: "Definition of a reusable structural part kind.", example: "part def Vehicle { ... }" },
|
|
58915
|
-
"port def": { kind: "SysML", def: "Definition of a reusable port contract.", example: "port def PowerPort { out item power; }" },
|
|
58916
|
-
"item def": { kind: "SysML", def: "Definition of an item kind that can flow or be exchanged.", example: "item def Packet;" },
|
|
58917
|
-
"attribute def": { kind: "SysML", def: "Definition of a reusable value type or attribute kind.", example: "attribute def Mass;" },
|
|
58918
|
-
"analysis case": { kind: "SysML", def: "Legacy recovery spelling for an analysis case; Release syntax omits case.", example: "analysis def MassRollup { ... }" },
|
|
58919
|
-
"verification case": { kind: "SysML", def: "Legacy recovery spelling for a verification case; Release syntax omits case.", example: "verification def CrashTest { ... }" },
|
|
58920
|
-
"use case": { kind: "SysML", def: "Case describing how actors use a subject to reach a goal.", example: "use case def DriveToWork { actor driver; }" },
|
|
58921
|
-
"succession flow": { kind: "SysML", def: "Flow with temporal succession semantics between source and target.", example: "succession flow fuel from tank to engine;" }
|
|
58932
|
+
"part def": { kind: "SysML", def: "Definition of a reusable structural part kind.", example: "part def Vehicle { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.11 (Parts)" },
|
|
58933
|
+
"port def": { kind: "SysML", def: "Definition of a reusable port contract.", example: "port def PowerPort { out item power; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.12 (Ports)" },
|
|
58934
|
+
"item def": { kind: "SysML", def: "Definition of an item kind that can flow or be exchanged.", example: "item def Packet;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.10 (Items)" },
|
|
58935
|
+
"attribute def": { kind: "SysML", def: "Definition of a reusable value type or attribute kind.", example: "attribute def Mass;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.7 (Attributes)" },
|
|
58936
|
+
"analysis case": { kind: "SysML", def: "Legacy recovery spelling for an analysis case; Release syntax omits case.", example: "analysis def MassRollup { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.23 (Analysis Cases)" },
|
|
58937
|
+
"verification case": { kind: "SysML", def: "Legacy recovery spelling for a verification case; Release syntax omits case.", example: "verification def CrashTest { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.24 (Verification Cases)" },
|
|
58938
|
+
"use case": { kind: "SysML", def: "Case describing how actors use a subject to reach a goal.", example: "use case def DriveToWork { actor driver; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.25 (Use Cases)" },
|
|
58939
|
+
"succession flow": { kind: "SysML", def: "Flow with temporal succession semantics between source and target.", example: "succession flow fuel from tank to engine;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.16 (Flows)" }
|
|
58922
58940
|
};
|
|
58923
58941
|
var OPERATOR_TOOLTIPS = {
|
|
58924
|
-
":": { desc: "**Typing** \u2014 binds a usage to a type (`defined by` in SysML, `typed by` in KerML).", precedence: 0, example: "part myCar : Vehicle;", cite: "OMG
|
|
58925
|
-
":>": { desc: "**Specialization** (on defs) / **Subsetting** (on features) \u2014 target specializes or subsets the named element.", precedence: 0, example: "part def Car :> Vehicle;", cite: "OMG
|
|
58926
|
-
":>>": { desc: "**Redefinition** \u2014 feature narrows or overrides an inherited feature.", precedence: 0, example: "attribute :>> mass = 1500 [kg];", cite: "OMG
|
|
58927
|
-
"::>": { desc: "**Reference subsetting** \u2014 used on connector ends and view exposures to reference-subset a feature.", precedence: 0, example: "end e ::> vehicle.engine;", cite: "OMG
|
|
58928
|
-
"=>": { desc: "**Cross-subsetting** \u2014 connector end cross-subsets a feature of the connector type.", precedence: 0, example: "connection c ::> myConn { end ::> src => myConn.source; }", cite: "OMG
|
|
58929
|
-
"~": { desc: "**Conjugation** \u2014 flips the directions of all port features. Common on port typing: `port p : ~PowerOut;`.", precedence: 0, example: "port supply : ~PowerOutPort;", cite: "OMG
|
|
58930
|
-
"::": { desc: "**Namespace separator** \u2014 descends into a package namespace (`Pkg::Member`).", precedence: 0, example: "import ISQ::MassValue;", cite: "OMG
|
|
58931
|
-
"::*": { desc: "**Namespace wildcard** \u2014 imports all visible members of a namespace.", precedence: 0, example: "private import ISQ::*;", cite: "OMG
|
|
58932
|
-
"::**": { desc: "**Recursive import** \u2014 imports all visible members recursively from nested namespaces.", precedence: 0, example: "private import Pkg::*::**;", cite: "OMG
|
|
58933
|
-
".": { desc: "**Feature access** \u2014 member path inside an expression (`vehicle.body.mass`). Do NOT use `.` to descend into packages; use `::`.", precedence: 18, example: "vehicle.body.mass <= 2500 [kg]", cite: "OMG
|
|
58934
|
-
".?": { desc: "**Null-safe feature access** \u2014 like `.` but returns null if the receiver is null.", precedence: 18, example: "vehicle.?engine.torque", cite: "OMG
|
|
58935
|
-
"->": { desc: "**Collection / library invocation** \u2014 invokes a library or collection function on the receiver.", precedence: 18, example: "wheels->size() // number of wheels\nwheels->forAll { in w : Wheel | w.pressure >= 2.5 }", cite: "OMG
|
|
58936
|
-
"#(": { desc: "**Indexed access** \u2014 one-based index access on an ordered sequence.", precedence: 18, example: "wheels#(1).pressure // first wheel", cite: "OMG
|
|
58937
|
-
"**": { desc: "**Exponentiation** operator (precedence 16).", precedence: 16, example: "x ** 2 // x squared", cite: "OMG
|
|
58938
|
-
"^": { desc: "**Exponentiation** operator (same as `**`, precedence 16).", precedence: 16, example: "x ^ 2", cite: "OMG
|
|
58939
|
-
"*": { desc: "**Multiplication** (precedence 15).", precedence: 15, example: "mass * acceleration", cite: "OMG
|
|
58940
|
-
"/": { desc: "**Division** (precedence 15).", precedence: 15, example: "distance / time", cite: "OMG
|
|
58941
|
-
"%": { desc: "**Modulo** / remainder (precedence 15).", precedence: 15, example: "n % 2 == 0 // even", cite: "OMG
|
|
58942
|
-
"+": { desc: "**Addition** (precedence 14) or unary plus (precedence 17).", precedence: 14, example: "a + b", cite: "OMG
|
|
58943
|
-
"-": { desc: "**Subtraction** (precedence 14) or unary minus (precedence 17).", precedence: 14, example: "a - b", cite: "OMG
|
|
58944
|
-
"..": { desc: "**Range** expression \u2014 inclusive integer or quantity range.", precedence: 13, example: "0..9 // values 0 through 9", cite: "OMG
|
|
58945
|
-
"<": { desc: "**Less than** comparison (precedence 12).", precedence: 12, example: "mass < 2500 [kg]", cite: "OMG
|
|
58946
|
-
"<=": { desc: "**Less than or equal** comparison (precedence 12).", precedence: 12, example: "speed <= 120 [km/h]", cite: "OMG
|
|
58947
|
-
">": { desc: "**Greater than** comparison (precedence 12).", precedence: 12, example: "pressure > 0 [Pa]", cite: "OMG
|
|
58948
|
-
">=": { desc: "**Greater than or equal** comparison (precedence 12).", precedence: 12, example: "charge >= 20 [%]", cite: "OMG
|
|
58949
|
-
"==": { desc: "**Value equality** (precedence 11). Tests whether two values are equal. For binding/assignment use `=`.", precedence: 11, example: 'status == "active"', cite: "OMG
|
|
58950
|
-
"!=": { desc: "**Value inequality** (precedence 11).", precedence: 11, example: "mode != null", cite: "OMG
|
|
58951
|
-
"===": { desc: "**Identity equality** \u2014 tests that two references point to the same object (precedence 11).", precedence: 11, example: "a === b", cite: "OMG
|
|
58952
|
-
"!==": { desc: "**Identity inequality** (precedence 11).", precedence: 11, example: "a !== b", cite: "OMG
|
|
58953
|
-
"&": { desc: "**Bitwise / Boolean and** (lower precedence than comparison, precedence 9). Prefer `and` for Boolean logic.", precedence: 9, example: "flags & 0xFF", cite: "OMG
|
|
58954
|
-
"|": { desc: "**Bitwise / Boolean or** (lower precedence than `xor`, precedence 7). Prefer `or` for Boolean logic.", precedence: 7, example: "flags | 0x01", cite: "OMG
|
|
58955
|
-
"??": { desc: "**Null-coalescing** \u2014 returns the left operand if non-null, otherwise the right (precedence 2).", precedence: 2, example: 'name ?? "unnamed"', cite: "OMG
|
|
58956
|
-
"?": { desc: "**Conditional then-marker** \u2014 separates condition from then-branch in `if cond ? thenExpr else elseExpr`.", precedence: 1, example: "if x > 0 ? x else -x", cite: "OMG
|
|
58957
|
-
"=": { desc: "**Initial value** assignment or binding (not equality). For equality testing use `==`.", precedence: 0, example: "attribute mass : MassValue = 1500 [kg];", cite: "OMG
|
|
58958
|
-
"@": { desc: "**Metadata application** shorthand \u2014 applies a metadata definition to the next element.", precedence: 0, example: "@Safety\npart def Engine;", cite: "OMG SysML v2 \
|
|
58959
|
-
"@@": { desc: "**Metaclass application** \u2014 applies a metaclass annotation.", precedence: 0, example: "@@StandardProfile", cite: "OMG SysML v2 \
|
|
58942
|
+
":": { desc: "**Typing** \u2014 binds a usage to a type (`defined by` in SysML, `typed by` in KerML).", precedence: 0, example: "part myCar : Vehicle;", cite: "OMG KerML v1.0 \xA78.2.4.3.2 (Feature Typing)" },
|
|
58943
|
+
":>": { desc: "**Specialization** (on defs) / **Subsetting** (on features) \u2014 target specializes or subsets the named element.", precedence: 0, example: "part def Car :> Vehicle;", cite: "OMG KerML v1.0 \xA78.2.4.1.2 (Specialization)" },
|
|
58944
|
+
":>>": { desc: "**Redefinition** \u2014 feature narrows or overrides an inherited feature.", precedence: 0, example: "attribute :>> mass = 1500 [kg];", cite: "OMG KerML v1.0 \xA78.2.4.3.4 (Redefinition)" },
|
|
58945
|
+
"::>": { desc: "**Reference subsetting** \u2014 used on connector ends and view exposures to reference-subset a feature.", precedence: 0, example: "end e ::> vehicle.engine;", cite: "OMG KerML v1.0 \xA78.2.4.3.3 (Subsetting)" },
|
|
58946
|
+
"=>": { desc: "**Cross-subsetting** \u2014 connector end cross-subsets a feature of the connector type.", precedence: 0, example: "connection c ::> myConn { end ::> src => myConn.source; }", cite: "OMG KerML v1.0 \xA78.2.5.5.1 (Connectors)" },
|
|
58947
|
+
"~": { desc: "**Conjugation** \u2014 flips the directions of all port features. Common on port typing: `port p : ~PowerOut;`.", precedence: 0, example: "port supply : ~PowerOutPort;", cite: "OMG KerML v1.0 \xA78.2.4.1.3 (Conjugation)" },
|
|
58948
|
+
"::": { desc: "**Namespace separator** \u2014 descends into a package namespace (`Pkg::Member`).", precedence: 0, example: "import ISQ::MassValue;", cite: "OMG KerML v1.0 \xA78.2.2.3 (Names)" },
|
|
58949
|
+
"::*": { desc: "**Namespace wildcard** \u2014 imports all visible members of a namespace.", precedence: 0, example: "private import ISQ::*;", cite: "OMG KerML v1.0 \xA78.2.3.4.2 (Imports)" },
|
|
58950
|
+
"::**": { desc: "**Recursive import** \u2014 imports all visible members recursively from nested namespaces.", precedence: 0, example: "private import Pkg::*::**;", cite: "OMG KerML v1.0 \xA78.2.3.4.2 (Imports)" },
|
|
58951
|
+
".": { desc: "**Feature access** \u2014 member path inside an expression (`vehicle.body.mass`). Do NOT use `.` to descend into packages; use `::`.", precedence: 18, example: "vehicle.body.mass <= 2500 [kg]", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58952
|
+
".?": { desc: "**Null-safe feature access** \u2014 like `.` but returns null if the receiver is null.", precedence: 18, example: "vehicle.?engine.torque", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58953
|
+
"->": { desc: "**Collection / library invocation** \u2014 invokes a library or collection function on the receiver.", precedence: 18, example: "wheels->size() // number of wheels\nwheels->forAll { in w : Wheel | w.pressure >= 2.5 }", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58954
|
+
"#(": { desc: "**Indexed access** \u2014 one-based index access on an ordered sequence.", precedence: 18, example: "wheels#(1).pressure // first wheel", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58955
|
+
"**": { desc: "**Exponentiation** operator (precedence 16).", precedence: 16, example: "x ** 2 // x squared", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58956
|
+
"^": { desc: "**Exponentiation** operator (same as `**`, precedence 16).", precedence: 16, example: "x ^ 2", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58957
|
+
"*": { desc: "**Multiplication** (precedence 15).", precedence: 15, example: "mass * acceleration", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58958
|
+
"/": { desc: "**Division** (precedence 15).", precedence: 15, example: "distance / time", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58959
|
+
"%": { desc: "**Modulo** / remainder (precedence 15).", precedence: 15, example: "n % 2 == 0 // even", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58960
|
+
"+": { desc: "**Addition** (precedence 14) or unary plus (precedence 17).", precedence: 14, example: "a + b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58961
|
+
"-": { desc: "**Subtraction** (precedence 14) or unary minus (precedence 17).", precedence: 14, example: "a - b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58962
|
+
"..": { desc: "**Range** expression \u2014 inclusive integer or quantity range.", precedence: 13, example: "0..9 // values 0 through 9", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58963
|
+
"<": { desc: "**Less than** comparison (precedence 12).", precedence: 12, example: "mass < 2500 [kg]", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58964
|
+
"<=": { desc: "**Less than or equal** comparison (precedence 12).", precedence: 12, example: "speed <= 120 [km/h]", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58965
|
+
">": { desc: "**Greater than** comparison (precedence 12).", precedence: 12, example: "pressure > 0 [Pa]", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58966
|
+
">=": { desc: "**Greater than or equal** comparison (precedence 12).", precedence: 12, example: "charge >= 20 [%]", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58967
|
+
"==": { desc: "**Value equality** (precedence 11). Tests whether two values are equal. For binding/assignment use `=`.", precedence: 11, example: 'status == "active"', cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58968
|
+
"!=": { desc: "**Value inequality** (precedence 11).", precedence: 11, example: "mode != null", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58969
|
+
"===": { desc: "**Identity equality** \u2014 tests that two references point to the same object (precedence 11).", precedence: 11, example: "a === b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58970
|
+
"!==": { desc: "**Identity inequality** (precedence 11).", precedence: 11, example: "a !== b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58971
|
+
"&": { desc: "**Bitwise / Boolean and** (lower precedence than comparison, precedence 9). Prefer `and` for Boolean logic.", precedence: 9, example: "flags & 0xFF", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58972
|
+
"|": { desc: "**Bitwise / Boolean or** (lower precedence than `xor`, precedence 7). Prefer `or` for Boolean logic.", precedence: 7, example: "flags | 0x01", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58973
|
+
"??": { desc: "**Null-coalescing** \u2014 returns the left operand if non-null, otherwise the right (precedence 2).", precedence: 2, example: 'name ?? "unnamed"', cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58974
|
+
"?": { desc: "**Conditional then-marker** \u2014 separates condition from then-branch in `if cond ? thenExpr else elseExpr`.", precedence: 1, example: "if x > 0 ? x else -x", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58975
|
+
"=": { desc: "**Initial value** assignment or binding (not equality). For equality testing use `==`.", precedence: 0, example: "attribute mass : MassValue = 1500 [kg];", cite: "OMG KerML v1.0 \xA78.2.5.10 (Feature Values)" },
|
|
58976
|
+
"@": { desc: "**Metadata application** shorthand \u2014 applies a metadata definition to the next element.", precedence: 0, example: "@Safety\npart def Engine;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.27 (Metadata)" },
|
|
58977
|
+
"@@": { desc: "**Metaclass application** \u2014 applies a metaclass annotation.", precedence: 0, example: "@@StandardProfile", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.27 (Metadata)" }
|
|
58960
58978
|
};
|
|
58961
58979
|
|
|
58962
58980
|
// ../language-server/out/src/services/v1-guardrail.js
|
|
@@ -59169,7 +59187,31 @@ var FeaturePathResolver = class {
|
|
|
59169
59187
|
}
|
|
59170
59188
|
// REQ-220/317 — resolve every independently clickable/diagnosable segment.
|
|
59171
59189
|
resolve(node) {
|
|
59172
|
-
|
|
59190
|
+
return this.resolveSegments(node, this.segmentsOf(node));
|
|
59191
|
+
}
|
|
59192
|
+
// REQ-389 — Namespace qualification versus feature chaining in every written path
|
|
59193
|
+
// issue #213 — a `perform` / `exhibit` target is stored as `name` plus an
|
|
59194
|
+
// untyped `chainSegs` array, so `A::b`, `A.b` and `A.b::c` all collapse to the
|
|
59195
|
+
// same AST and the separator rule is unenforceable from it. The CST still
|
|
59196
|
+
// carries the separators verbatim; read the path back off it and resolve it
|
|
59197
|
+
// exactly as an expression path is resolved.
|
|
59198
|
+
resolveDeclarationPath(node) {
|
|
59199
|
+
return this.resolveSegments(node, this.declarationSegmentsOf(node));
|
|
59200
|
+
}
|
|
59201
|
+
// REQ-389 — Namespace qualification versus feature chaining in every written path
|
|
59202
|
+
// issue #213 — a connector end keeps its whole path in ONE datatype-string
|
|
59203
|
+
// property (`ConnectorEnd.path`, a `RelationPath`), so there is no `chainSegs`
|
|
59204
|
+
// list to read at all. Resolve it off that property's CST span instead; the
|
|
59205
|
+
// separator rule is the same one, because a connector end reaches the world
|
|
59206
|
+
// through the same OwnedReferenceSubsetting as `perform` and `exhibit`.
|
|
59207
|
+
resolvePropertyPath(node, property3) {
|
|
59208
|
+
const cst = node.$cstNode;
|
|
59209
|
+
const propertyNode = cst ? grammar_utils_exports.findNodeForProperty(cst, property3) : void 0;
|
|
59210
|
+
if (!cst || !propertyNode)
|
|
59211
|
+
return { segments: [] };
|
|
59212
|
+
return this.resolveSegments(node, this.segmentsInSpan(cst, propertyNode.offset, propertyNode.end));
|
|
59213
|
+
}
|
|
59214
|
+
resolveSegments(node, segments) {
|
|
59173
59215
|
if (segments.length === 0)
|
|
59174
59216
|
return { segments };
|
|
59175
59217
|
const root3 = ast_utils_exports.getDocument(node).parseResult.value;
|
|
@@ -59218,6 +59260,61 @@ var FeaturePathResolver = class {
|
|
|
59218
59260
|
}
|
|
59219
59261
|
return segments;
|
|
59220
59262
|
}
|
|
59263
|
+
// REQ-389 — Namespace qualification versus feature chaining in every written path
|
|
59264
|
+
// issue #213 — the path of a reference-form declaration (`perform A::b.c;`,
|
|
59265
|
+
// `exhibit VehicleStates::operating;`) spans the `name` property through the
|
|
59266
|
+
// last `chainSegs` element. Everything after it (a `redefines` tail, a typing,
|
|
59267
|
+
// a body) belongs to other properties and must not be read as path segments,
|
|
59268
|
+
// so the CST leaves are taken only from that span.
|
|
59269
|
+
declarationSegmentsOf(node) {
|
|
59270
|
+
const cst = node.$cstNode;
|
|
59271
|
+
if (!cst)
|
|
59272
|
+
return [];
|
|
59273
|
+
const nameNode = grammar_utils_exports.findNodeForProperty(cst, "name");
|
|
59274
|
+
if (!nameNode)
|
|
59275
|
+
return [];
|
|
59276
|
+
const chainNodes = grammar_utils_exports.findNodesForProperty(cst, "chainSegs");
|
|
59277
|
+
const end = chainNodes.length > 0 ? chainNodes[chainNodes.length - 1].end : nameNode.end;
|
|
59278
|
+
return this.segmentsInSpan(cst, nameNode.offset, end);
|
|
59279
|
+
}
|
|
59280
|
+
/** The path segments spelled between two offsets of `cst`, separators retained.
|
|
59281
|
+
* `$` is the root-namespace GlobalQualification prefix and carries no segment;
|
|
59282
|
+
* a `RelationSegment`'s own `[n]` multiplicity addresses the segment it follows
|
|
59283
|
+
* (`engine[2]`) and is likewise not one, so bracketed text is skipped whole. */
|
|
59284
|
+
segmentsInSpan(cst, from, to) {
|
|
59285
|
+
const segments = [];
|
|
59286
|
+
let separator;
|
|
59287
|
+
let bracketDepth = 0;
|
|
59288
|
+
for (const leaf of cst_utils_exports.flattenCst(cst)) {
|
|
59289
|
+
if (leaf.offset < from)
|
|
59290
|
+
continue;
|
|
59291
|
+
if (leaf.end > to)
|
|
59292
|
+
break;
|
|
59293
|
+
if (leaf.text === "[") {
|
|
59294
|
+
bracketDepth += 1;
|
|
59295
|
+
continue;
|
|
59296
|
+
}
|
|
59297
|
+
if (leaf.text === "]") {
|
|
59298
|
+
bracketDepth = Math.max(0, bracketDepth - 1);
|
|
59299
|
+
continue;
|
|
59300
|
+
}
|
|
59301
|
+
if (bracketDepth > 0)
|
|
59302
|
+
continue;
|
|
59303
|
+
if (leaf.text === "$")
|
|
59304
|
+
continue;
|
|
59305
|
+
if (leaf.text === "." || leaf.text === "::") {
|
|
59306
|
+
separator = leaf.text;
|
|
59307
|
+
continue;
|
|
59308
|
+
}
|
|
59309
|
+
segments.push({
|
|
59310
|
+
text: canonicalEscapedName(leaf.text),
|
|
59311
|
+
separator: segments.length === 0 ? void 0 : separator,
|
|
59312
|
+
cst: leaf
|
|
59313
|
+
});
|
|
59314
|
+
separator = void 0;
|
|
59315
|
+
}
|
|
59316
|
+
return segments;
|
|
59317
|
+
}
|
|
59221
59318
|
resolveRoot(node, name, snapshot) {
|
|
59222
59319
|
if (name === "self" || name === "this" || name === "that") {
|
|
59223
59320
|
for (let owner = node.$container; owner; owner = owner.$container) {
|
|
@@ -59408,6 +59505,28 @@ var FeaturePathResolver = class {
|
|
|
59408
59505
|
}
|
|
59409
59506
|
};
|
|
59410
59507
|
|
|
59508
|
+
// ../language-server/out/src/services/namespace-kind.js
|
|
59509
|
+
var KERML_CLASSIFIER_DECL_TYPES = /* @__PURE__ */ new Set([
|
|
59510
|
+
"AssociationDecl",
|
|
59511
|
+
"BehaviorDecl",
|
|
59512
|
+
"ClassDecl",
|
|
59513
|
+
"ClassifierDecl",
|
|
59514
|
+
"DatatypeDecl",
|
|
59515
|
+
"FunctionDecl",
|
|
59516
|
+
"InteractionDecl",
|
|
59517
|
+
"MetaclassDecl",
|
|
59518
|
+
"PredicateDecl",
|
|
59519
|
+
"StructDecl",
|
|
59520
|
+
"TypeDecl"
|
|
59521
|
+
]);
|
|
59522
|
+
function isNamespaceOnlyDecl(node) {
|
|
59523
|
+
if (isPackage(node) || node.$type === "NamespaceDecl" || node.$type === "BareDefDecl")
|
|
59524
|
+
return true;
|
|
59525
|
+
if (KERML_CLASSIFIER_DECL_TYPES.has(node.$type))
|
|
59526
|
+
return true;
|
|
59527
|
+
return node.isDef === true;
|
|
59528
|
+
}
|
|
59529
|
+
|
|
59411
59530
|
// ../language-server/out/src/services/validator.js
|
|
59412
59531
|
var severityOverrides = {};
|
|
59413
59532
|
function setSeverityOverrides(overrides) {
|
|
@@ -59419,6 +59538,9 @@ function severity(code, defaultSeverity) {
|
|
|
59419
59538
|
function isLibraryDocument2(node) {
|
|
59420
59539
|
return isLibraryDocument(ast_utils_exports.getDocument(node));
|
|
59421
59540
|
}
|
|
59541
|
+
function isDefinitionOnlyNode(node) {
|
|
59542
|
+
return !isPackage(node) && isNamespaceOnlyDecl(node);
|
|
59543
|
+
}
|
|
59422
59544
|
var TABLE_4_ESCAPES = /* @__PURE__ */ new Set(['"', "'", "\\", "b", "f", "t", "n"]);
|
|
59423
59545
|
var IDENT_START = /[\p{L}_]/u;
|
|
59424
59546
|
var IDENT_PART = /[\p{L}\p{N}_]/u;
|
|
@@ -59601,6 +59723,53 @@ var SysmlValidator = class _SysmlValidator {
|
|
|
59601
59723
|
data: { featurePathSegment: true }
|
|
59602
59724
|
});
|
|
59603
59725
|
}
|
|
59726
|
+
// REQ-389 — Namespace qualification versus feature chaining in every written path
|
|
59727
|
+
// issue #213 — RES019: `::` binds tighter than `.`. Each dot-separated link of
|
|
59728
|
+
// a KerML FeatureChain is a complete QualifiedName, and an
|
|
59729
|
+
// `OwnedFeatureChaining::chainingFeature` is scoped to `[SysML::Feature|…]`,
|
|
59730
|
+
// so only a USAGE may sit on the left of a dot; a Definition specializes
|
|
59731
|
+
// Classifier and a package is a plain Namespace. `perform`, `exhibit` and
|
|
59732
|
+
// every connector end reach the world through the same
|
|
59733
|
+
// OwnedReferenceSubsetting, so one rule governs them all. This extension's
|
|
59734
|
+
// permissive scoping resolves the dotted form regardless (a definition IS a
|
|
59735
|
+
// Namespace), which is precisely why it is worth a warning rather than
|
|
59736
|
+
// silence: the Pilot implementation refuses the same text at LINKING time, so
|
|
59737
|
+
// the model is not portable. A warning, never an error — the text is
|
|
59738
|
+
// well-formed here and the fix is mechanical.
|
|
59739
|
+
checkChainSeparators(node, accept) {
|
|
59740
|
+
const chainSegs = node.chainSegs;
|
|
59741
|
+
if (!Array.isArray(chainSegs) || chainSegs.length === 0)
|
|
59742
|
+
return;
|
|
59743
|
+
this.reportChainSeparators(node, this.featurePaths.resolveDeclarationPath(node).segments, accept);
|
|
59744
|
+
}
|
|
59745
|
+
// REQ-389 — issue #213. A connector end (`connect`, `flow`, `bind`,
|
|
59746
|
+
// `succession`, `interface`, `allocate`, the transition ends) keeps its whole
|
|
59747
|
+
// path in one `RelationPath` datatype string, so there is no `chainSegs` list —
|
|
59748
|
+
// but it reaches its target through the same OwnedReferenceSubsetting as
|
|
59749
|
+
// `perform` and `exhibit`, and the rule does not change with the statement that
|
|
59750
|
+
// carries it. `reference` is the `references` / `::>` tail, which is a second
|
|
59751
|
+
// OwnedReferenceSubsetting on the same end and is judged the same way.
|
|
59752
|
+
checkConnectorEndSeparators(node, accept) {
|
|
59753
|
+
for (const property3 of ["path", "reference"]) {
|
|
59754
|
+
const text = node[property3];
|
|
59755
|
+
if (typeof text !== "string" || !text.includes("."))
|
|
59756
|
+
continue;
|
|
59757
|
+
this.reportChainSeparators(node, this.featurePaths.resolvePropertyPath(node, property3).segments, accept);
|
|
59758
|
+
}
|
|
59759
|
+
}
|
|
59760
|
+
/** RES019 for one resolved path: the first non-final link that is chained with
|
|
59761
|
+
* `.` from something that can never be a Feature. */
|
|
59762
|
+
reportChainSeparators(node, segments, accept) {
|
|
59763
|
+
for (let index = 0; index + 1 < segments.length; index += 1) {
|
|
59764
|
+
if (segments[index + 1].separator !== ".")
|
|
59765
|
+
continue;
|
|
59766
|
+
const owner = segments[index].target;
|
|
59767
|
+
if (!owner || !isDefinitionOnlyNode(owner))
|
|
59768
|
+
continue;
|
|
59769
|
+
accept(severity("RES019", "warning"), DIAGNOSTIC_MESSAGES.RES019_DEFINITION_IN_FEATURE_CHAIN(segments[index].text, segments[index + 1].text), { node, range: segments[index].cst.range, code: "RES019" });
|
|
59770
|
+
return;
|
|
59771
|
+
}
|
|
59772
|
+
}
|
|
59604
59773
|
// REQ-169, REQ-329 — SSM001 def/usage mismatch for parts
|
|
59605
59774
|
checkPartDecl(node, accept) {
|
|
59606
59775
|
if (!node.isDef && node.name && /^[A-Z]/.test(node.name)) {
|
|
@@ -61465,6 +61634,11 @@ ${baseIndent}}`;
|
|
|
61465
61634
|
Document: this.checkDocument.bind(this),
|
|
61466
61635
|
PartDecl: this.checkPartDecl.bind(this),
|
|
61467
61636
|
PathExpr: this.checkPathExpr.bind(this),
|
|
61637
|
+
// issue #213 — RES019: the `::` vs `.` rule on the reference-form
|
|
61638
|
+
// declarations that reach their target through OwnedReferenceSubsetting.
|
|
61639
|
+
PerformStmt: this.checkChainSeparators.bind(this),
|
|
61640
|
+
ExhibitStateDecl: this.checkChainSeparators.bind(this),
|
|
61641
|
+
ConnectorEnd: this.checkConnectorEndSeparators.bind(this),
|
|
61468
61642
|
RequirementDecl: this.checkRequirementDecl.bind(this),
|
|
61469
61643
|
AttributeDecl: this.checkAttributeDecl.bind(this),
|
|
61470
61644
|
ConstraintDecl: this.checkConstraintDecl.bind(this),
|
|
@@ -63137,8 +63311,6 @@ function resolveEffectiveSubject(node) {
|
|
|
63137
63311
|
}
|
|
63138
63312
|
|
|
63139
63313
|
// ../language-server/out/src/services/hover-provider.js
|
|
63140
|
-
var KEYWORD_CITATION_SOURCE = "info/language/03-keywords-and-operators.md:1";
|
|
63141
|
-
var OPERATOR_CITATION_SOURCE = "info/language/03-keywords-and-operators.md:223";
|
|
63142
63314
|
var MAX_HOVER_LINES = 30;
|
|
63143
63315
|
function leafAtOffset(node, offset) {
|
|
63144
63316
|
if (isLeafCstNode(node)) {
|
|
@@ -63548,7 +63720,7 @@ function buildKeywordHover(token) {
|
|
|
63548
63720
|
${info.example}
|
|
63549
63721
|
\`\`\``);
|
|
63550
63722
|
}
|
|
63551
|
-
lines.push("", sourceFooter(
|
|
63723
|
+
lines.push("", sourceFooter(info.cite));
|
|
63552
63724
|
return lines.join("\n");
|
|
63553
63725
|
}
|
|
63554
63726
|
function escapeRegExp2(text) {
|
|
@@ -63573,7 +63745,7 @@ function buildMultiWordKeywordHover(document, leaf) {
|
|
|
63573
63745
|
lines.push("", `\`\`\`sysml
|
|
63574
63746
|
${info.example}
|
|
63575
63747
|
\`\`\``);
|
|
63576
|
-
lines.push("", sourceFooter(
|
|
63748
|
+
lines.push("", sourceFooter(info.cite));
|
|
63577
63749
|
return {
|
|
63578
63750
|
value: lines.join("\n"),
|
|
63579
63751
|
range: {
|
|
@@ -63606,9 +63778,7 @@ ${info.example}
|
|
|
63606
63778
|
lines.push("", `Maps to Kernel Function Library function \`${fn}\`.`);
|
|
63607
63779
|
if (libraryFunctionDetails)
|
|
63608
63780
|
lines.push("", libraryFunctionDetails);
|
|
63609
|
-
|
|
63610
|
-
lines.push("", `*${info.cite}*`);
|
|
63611
|
-
lines.push("", sourceFooter(OPERATOR_CITATION_SOURCE));
|
|
63781
|
+
lines.push("", sourceFooter(info.cite));
|
|
63612
63782
|
return lines.join("\n");
|
|
63613
63783
|
}
|
|
63614
63784
|
function functionMemberSignature(member) {
|
|
@@ -63754,7 +63924,7 @@ function limitHoverLines(value) {
|
|
|
63754
63924
|
return value;
|
|
63755
63925
|
let footerIndex = -1;
|
|
63756
63926
|
for (let index = lines.length - 1; index >= 0; index--) {
|
|
63757
|
-
if (/^\*Source: `[^`]
|
|
63927
|
+
if (/^\*Source: `[^`]+`\*$/u.test(lines[index])) {
|
|
63758
63928
|
footerIndex = index;
|
|
63759
63929
|
break;
|
|
63760
63930
|
}
|
|
@@ -69109,7 +69279,7 @@ async function runValidation(command) {
|
|
|
69109
69279
|
}
|
|
69110
69280
|
|
|
69111
69281
|
// src/main.ts
|
|
69112
|
-
var VERSION2 = true ? "0.15.
|
|
69282
|
+
var VERSION2 = true ? "0.15.3" : "dev";
|
|
69113
69283
|
async function main(argv) {
|
|
69114
69284
|
const command = parseArgs(argv);
|
|
69115
69285
|
if (command.kind === "help") {
|