sysml-validate 0.15.0 → 0.15.2
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 +262 -188
- package/out/main.js.map +3 -3
- package/package.json +1 -1
- package/resources/sysml.dimension-table.json +1 -1
package/out/main.js
CHANGED
|
@@ -30760,6 +30760,9 @@ function isExhibitStateDecl(item) {
|
|
|
30760
30760
|
var ExitAction = "ExitAction";
|
|
30761
30761
|
var ExposeMember = "ExposeMember";
|
|
30762
30762
|
var ExposePath = "ExposePath";
|
|
30763
|
+
function isExposePath(item) {
|
|
30764
|
+
return reflection2.isInstance(item, ExposePath);
|
|
30765
|
+
}
|
|
30763
30766
|
var ExpressionDecl = "ExpressionDecl";
|
|
30764
30767
|
var FeatureDecl = "FeatureDecl";
|
|
30765
30768
|
function isFeatureDecl(item) {
|
|
@@ -58052,14 +58055,14 @@ function evaluateFilterCondition(node, metadataTypes, resolveRefs) {
|
|
|
58052
58055
|
return node.items.length === 1 ? evaluateFilterCondition(node.items[0], metadataTypes, resolveRefs) : void 0;
|
|
58053
58056
|
}
|
|
58054
58057
|
if (isBinExpr(node)) {
|
|
58055
|
-
if (
|
|
58058
|
+
if (CONJUNCTION_OPERATORS.has(node.op)) {
|
|
58056
58059
|
const left = evaluateFilterCondition(node.left, metadataTypes, resolveRefs);
|
|
58057
58060
|
const right = evaluateFilterCondition(node.right, metadataTypes, resolveRefs);
|
|
58058
58061
|
if (left === false || right === false)
|
|
58059
58062
|
return false;
|
|
58060
58063
|
return left === void 0 || right === void 0 ? void 0 : true;
|
|
58061
58064
|
}
|
|
58062
|
-
if (
|
|
58065
|
+
if (DISJUNCTION_OPERATORS.has(node.op)) {
|
|
58063
58066
|
const left = evaluateFilterCondition(node.left, metadataTypes, resolveRefs);
|
|
58064
58067
|
const right = evaluateFilterCondition(node.right, metadataTypes, resolveRefs);
|
|
58065
58068
|
if (left === true || right === true)
|
|
@@ -58070,6 +58073,42 @@ function evaluateFilterCondition(node, metadataTypes, resolveRefs) {
|
|
|
58070
58073
|
}
|
|
58071
58074
|
return void 0;
|
|
58072
58075
|
}
|
|
58076
|
+
var CONJUNCTION_OPERATORS = /* @__PURE__ */ new Set(["and", "&"]);
|
|
58077
|
+
var DISJUNCTION_OPERATORS = /* @__PURE__ */ new Set(["or", "|"]);
|
|
58078
|
+
function undecidableFilterCondition(condition) {
|
|
58079
|
+
if (!condition)
|
|
58080
|
+
return void 0;
|
|
58081
|
+
if (isSelfClassifyExpr(condition)) {
|
|
58082
|
+
return condition.op === "@" || condition.op === "@@" ? void 0 : { node: condition, construct: `the '${condition.op}' classification operator` };
|
|
58083
|
+
}
|
|
58084
|
+
if (isNotExpr(condition) && condition.operand) {
|
|
58085
|
+
return undecidableFilterCondition(condition.operand);
|
|
58086
|
+
}
|
|
58087
|
+
if (condition.$type === "NotExpr")
|
|
58088
|
+
return void 0;
|
|
58089
|
+
if (isParenExpr(condition)) {
|
|
58090
|
+
return condition.items.length === 1 ? undecidableFilterCondition(condition.items[0]) : { node: condition, construct: "a parenthesized expression list" };
|
|
58091
|
+
}
|
|
58092
|
+
if (isBinExpr(condition)) {
|
|
58093
|
+
if (CONJUNCTION_OPERATORS.has(condition.op) || DISJUNCTION_OPERATORS.has(condition.op)) {
|
|
58094
|
+
return undecidableFilterCondition(condition.left) ?? undecidableFilterCondition(condition.right);
|
|
58095
|
+
}
|
|
58096
|
+
return { node: condition, construct: `the '${condition.op}' operator` };
|
|
58097
|
+
}
|
|
58098
|
+
return { node: condition, construct: describeFilterExpr(condition) };
|
|
58099
|
+
}
|
|
58100
|
+
function describeFilterExpr(node) {
|
|
58101
|
+
if (isPostfixOp(node)) {
|
|
58102
|
+
if ((node.dot || node.select) && node.field)
|
|
58103
|
+
return `the '.${node.field}' feature access`;
|
|
58104
|
+
if (node.arrow && node.invoke)
|
|
58105
|
+
return `the '->${node.invoke}' invocation`;
|
|
58106
|
+
return "this postfix expression";
|
|
58107
|
+
}
|
|
58108
|
+
if (isPathExpr(node))
|
|
58109
|
+
return "a plain feature reference";
|
|
58110
|
+
return "this expression form";
|
|
58111
|
+
}
|
|
58073
58112
|
function attachedMetadataTypes(node, resolveRefs) {
|
|
58074
58113
|
const siblings = node.$container?.members;
|
|
58075
58114
|
if (!Array.isArray(siblings))
|
|
@@ -58713,6 +58752,13 @@ var DIAGNOSTIC_MESSAGES = {
|
|
|
58713
58752
|
// implicit-redefinition resolution this validator does not yet model.
|
|
58714
58753
|
RES017_DUPLICATE_MEMBER: (name) => `'${name}' is already declared in this namespace. Members must be distinguishable by name \u2014 rename or remove the duplicate.`,
|
|
58715
58754
|
RES017_DUPLICATE_SHORT_NAME: (name) => `Short name '<${name}>' is already used in this namespace. Members must be distinguishable \u2014 rename the short name.`,
|
|
58755
|
+
// issue #102 — REQ-387. The filter evaluator (`import-visibility.ts`,
|
|
58756
|
+
// `evaluateFilterCondition`) decides metadata-presence tests and the Boolean
|
|
58757
|
+
// operators over them; every other form fails OPEN, keeping the member. Failing
|
|
58758
|
+
// open is the right default — under-importing would manufacture spurious
|
|
58759
|
+
// RES001s — but an unevaluated filter produces a scope or view that looks
|
|
58760
|
+
// authoritative and is not, so the fail-open is stated rather than assumed.
|
|
58761
|
+
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.`,
|
|
58716
58762
|
// REQ-007 — SysML v1 → v2 migration guardrail.
|
|
58717
58763
|
MIG001_V1_KEYWORD: (keyword, v2, note) => `'${keyword}' is a SysML v1 construct, not a SysML v2 keyword. ${note} Use '${v2}'.`,
|
|
58718
58764
|
MIG002_V1_STEREOTYPE_KNOWN: (stereotype, v2, note) => `SysML v2 has no stereotypes. ${note} Replace \xAB${stereotype}\xBB with '${v2}'.`,
|
|
@@ -58720,197 +58766,197 @@ var DIAGNOSTIC_MESSAGES = {
|
|
|
58720
58766
|
};
|
|
58721
58767
|
var KEYWORD_TOOLTIPS = {
|
|
58722
58768
|
// Package / namespace
|
|
58723
|
-
"package": { kind: "both", def: "Namespace that groups model elements.", example: "package VehicleModel { ... }" },
|
|
58724
|
-
"namespace": { kind: "KerML", def: "Root namespace construct (KerML only).", example: "namespace Kernel { ... }" },
|
|
58725
|
-
"library": { kind: "both", def: "Marks a package as a reusable library.", example: "library package Utils { ... }" },
|
|
58726
|
-
"standard": { kind: "both", def: "Marks a package as a standard-library package. Should only appear in library source.", example: "standard library package ScalarValues { ... }" },
|
|
58727
|
-
"import": { kind: "both", def: "Makes members of another namespace visible in the current scope. Release syntax requires explicit visibility.", example: "private import ISQ::*;" },
|
|
58728
|
-
"alias": { kind: "both", def: "Declares a local name for an element in another namespace.", example: "alias Mass for ISQ::MassValue;" },
|
|
58729
|
-
"filter": { kind: "SysML", def: "Restricts visible members of a namespace by a Boolean expression.", example: "filter @Safety;" },
|
|
58769
|
+
"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)" },
|
|
58770
|
+
"namespace": { kind: "KerML", def: "Root namespace construct (KerML only).", example: "namespace Kernel { ... }", cite: "OMG KerML v1.0 \xA78.2.3.4.1 (Namespaces)" },
|
|
58771
|
+
"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)" },
|
|
58772
|
+
"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)" },
|
|
58773
|
+
"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)" },
|
|
58774
|
+
"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)" },
|
|
58775
|
+
"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)" },
|
|
58730
58776
|
// Visibility
|
|
58731
|
-
"public": { kind: "both", def: "Visibility: element visible to all importers." },
|
|
58732
|
-
"private": { kind: "both", def: "Visibility: element visible only in its owning namespace." },
|
|
58733
|
-
"protected": { kind: "both", def: "Visibility: element visible to specializations of the owning namespace." },
|
|
58777
|
+
"public": { kind: "both", def: "Visibility: element visible to all importers.", cite: "OMG KerML v1.0 \xA78.2.3.4.3 (Namespace Elements)" },
|
|
58778
|
+
"private": { kind: "both", def: "Visibility: element visible only in its owning namespace.", cite: "OMG KerML v1.0 \xA78.2.3.4.3 (Namespace Elements)" },
|
|
58779
|
+
"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)" },
|
|
58734
58780
|
// Directions
|
|
58735
|
-
"in": { kind: "both", def: "Input direction for a port feature or action parameter." },
|
|
58736
|
-
"out": { kind: "both", def: "Output direction for a port feature or action parameter." },
|
|
58737
|
-
"inout": { kind: "both", def: "Bidirectional direction for a port feature or action parameter." },
|
|
58781
|
+
"in": { kind: "both", def: "Input direction for a port feature or action parameter.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58782
|
+
"out": { kind: "both", def: "Output direction for a port feature or action parameter.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58783
|
+
"inout": { kind: "both", def: "Bidirectional direction for a port feature or action parameter.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58738
58784
|
// Definition keywords
|
|
58739
|
-
"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" },
|
|
58740
|
-
"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; }" },
|
|
58741
|
-
"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; }" },
|
|
58742
|
-
"attribute": { kind: "SysML", def: "Value-only feature without identity. Use for scalars, quantities, and typed constants.", example: "attribute mass : MassValue = 1500 [kg];" },
|
|
58743
|
-
"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; }" },
|
|
58744
|
-
"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; }" },
|
|
58745
|
-
"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; }" },
|
|
58746
|
-
"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] } }" },
|
|
58747
|
-
"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] } }" },
|
|
58748
|
-
"concern": { kind: "SysML", def: "Stakeholder interest that may be addressed by requirements.", example: "concern def Safety { stakeholder s : Engineer; }" },
|
|
58749
|
-
"case": { kind: "SysML", def: "Generic case element (see analysis case, verification case, use case for specific forms).", example: "case def C { ... }" },
|
|
58750
|
-
"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 { ... }" },
|
|
58751
|
-
"viewpoint": { kind: "SysML", def: "Purpose descriptor for a set of views, specifying stakeholders and framed concerns.", example: "viewpoint def SafetyVP { stakeholder s : SafetyEngineer; }" },
|
|
58752
|
-
"rendering": { kind: "SysML", def: "Specification of how a view is presented (table, tree, diagram, etc.).", example: "rendering def TableRendering { ... }" },
|
|
58753
|
-
"metadata": { kind: "SysML", def: "Non-semantic annotation attached to model elements. Used for tagging, tooling, and cross-cutting concerns.", example: "@Safety\npart def Engine { ... }" },
|
|
58754
|
-
"enum": { kind: "SysML", def: "Enumeration definition with a set of named literal values.", example: "enum def Status { active, inactive, standby }" },
|
|
58755
|
-
"occurrence": { kind: "SysML", def: "General occurrence concept covering things with a lifetime.", example: "occurrence def Event { ... }" },
|
|
58756
|
-
"connection": { kind: "SysML", def: "A typed relationship linking two or more parts through ports.", example: "connection def PowerLink connect PowerOut to PowerIn;" },
|
|
58757
|
-
"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; }" },
|
|
58758
|
-
"allocation": { kind: "SysML", def: "Maps a source element to a target element that realizes it.", example: "allocate functions.drive to hardware.motor;" },
|
|
58759
|
-
"flow": { kind: "SysML", def: "Item flow between source and target (material, data, energy).", example: "flow power of ElectricalPower from battery.out to motor.in;" },
|
|
58760
|
-
"succession": { kind: "SysML", def: "Temporal ordering between behaviors \u2014 source happens before target.", example: "succession first startEngine then driveForward;" },
|
|
58761
|
-
"transition": { kind: "SysML", def: "Change between states: source, optional trigger, guard, effect, and target.", example: "transition first idle accept cmd : Start then running;" },
|
|
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", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.11 (Parts)" },
|
|
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; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.12 (Ports)" },
|
|
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; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.10 (Items)" },
|
|
58788
|
+
"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)" },
|
|
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; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.17 (Actions)" },
|
|
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; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.18 (States)" },
|
|
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; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.19 (Calculations)" },
|
|
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] } }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.20 (Constraints)" },
|
|
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] } }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.21 (Requirements)" },
|
|
58794
|
+
"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)" },
|
|
58795
|
+
"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)" },
|
|
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 { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.26.1 (View Definitions)" },
|
|
58797
|
+
"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)" },
|
|
58798
|
+
"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)" },
|
|
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 { ... }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.27 (Metadata)" },
|
|
58800
|
+
"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)" },
|
|
58801
|
+
"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)" },
|
|
58802
|
+
"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)" },
|
|
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; }", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.14 (Interfaces)" },
|
|
58804
|
+
"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)" },
|
|
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;", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.16 (Flows)" },
|
|
58806
|
+
"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)" },
|
|
58807
|
+
"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)" },
|
|
58762
58808
|
// Modifiers
|
|
58763
|
-
"abstract": { kind: "both", def: "Definition cannot be instantiated directly; must be specialized." },
|
|
58764
|
-
"ref": { kind: "SysML", def: "References an element owned elsewhere rather than composing it." },
|
|
58765
|
-
"derived": { kind: "both", def: "Feature value is computed from other features; not stored directly." },
|
|
58766
|
-
"readonly": { kind: "both", def: "Legacy recovery token, not a SysML/KerML Release modifier. Use SysML constant for an immutable usage." },
|
|
58767
|
-
"composite": { kind: "both", def: "Feature is compositely owned by the enclosing element (filled diamond)." },
|
|
58768
|
-
"portion": { kind: "both", def: "Feature is a temporal or spatial portion of the owner." },
|
|
58769
|
-
"var": { kind: "KerML", def: "Variable feature \u2014 value changes over time." },
|
|
58770
|
-
"const": { kind: "KerML", def: "Constant feature \u2014 value set at creation time (KerML form). Use `constant` in SysML." },
|
|
58771
|
-
"constant": { kind: "SysML", def: "Constant usage \u2014 value set at initialization, not changed afterward (SysML form)." },
|
|
58772
|
-
"ordered": { kind: "both", def: "Feature values are ordered (sequence semantics)." },
|
|
58773
|
-
"nonunique": { kind: "both", def: "Feature values may repeat (bag/multiset semantics)." },
|
|
58774
|
-
"variation": { kind: "SysML", def: "A definition offering multiple variant alternatives." },
|
|
58775
|
-
"variant": { kind: "SysML", def: "One alternative inside a variation definition." },
|
|
58776
|
-
"individual": { kind: "SysML", def: "A unique real-world object; multiplicity [1] by definition." },
|
|
58777
|
-
"snapshot": { kind: "SysML", def: "Zero-duration timeslice of an individual." },
|
|
58778
|
-
"timeslice": { kind: "SysML", def: "Bounded lifetime segment of an individual." },
|
|
58779
|
-
"parallel": { kind: "SysML", def: "State or region with concurrent sub-states (orthogonal regions)." },
|
|
58780
|
-
"end": { kind: "both", def: "Endpoint feature in a connection or interface definition." },
|
|
58809
|
+
"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)" },
|
|
58810
|
+
"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)" },
|
|
58811
|
+
"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)" },
|
|
58812
|
+
"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)" },
|
|
58813
|
+
"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)" },
|
|
58814
|
+
"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)" },
|
|
58815
|
+
"var": { kind: "KerML", def: "Variable feature \u2014 value changes over time.", cite: "OMG KerML v1.0 \xA78.2.4.3.1 (Features)" },
|
|
58816
|
+
"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)" },
|
|
58817
|
+
"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)" },
|
|
58818
|
+
"ordered": { kind: "both", def: "Feature values are ordered (sequence semantics).", cite: "OMG KerML v1.0 \xA78.2.5.11 (Multiplicities)" },
|
|
58819
|
+
"nonunique": { kind: "both", def: "Feature values may repeat (bag/multiset semantics).", cite: "OMG KerML v1.0 \xA78.2.5.11 (Multiplicities)" },
|
|
58820
|
+
"variation": { kind: "SysML", def: "A definition offering multiple variant alternatives.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.1 (Definitions)" },
|
|
58821
|
+
"variant": { kind: "SysML", def: "One alternative inside a variation definition.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.6.4 (Body Elements)" },
|
|
58822
|
+
"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)" },
|
|
58823
|
+
"snapshot": { kind: "SysML", def: "Zero-duration timeslice of an individual.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.9.2 (Occurrence Usages)" },
|
|
58824
|
+
"timeslice": { kind: "SysML", def: "Bounded lifetime segment of an individual.", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.9.2 (Occurrence Usages)" },
|
|
58825
|
+
"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)" },
|
|
58826
|
+
"end": { kind: "both", def: "Endpoint feature in a connection or interface definition.", cite: "OMG KerML v1.0 \xA78.2.5.5.1 (Connectors)" },
|
|
58781
58827
|
// KerML kernel keywords
|
|
58782
|
-
"type": { kind: "KerML", def: "Fundamental KerML classifier type. In user `.sysml` code, prefer `part def`, `attribute def`, etc." },
|
|
58783
|
-
"class": { kind: "KerML", def: "KerML class (has identity). In `.sysml`, prefer `part def`." },
|
|
58784
|
-
"classifier": { kind: "KerML", def: "KerML base classifier. In `.sysml`, prefer `part def`." },
|
|
58785
|
-
"struct": { kind: "KerML", def: "KerML structure (data-value, no identity). In `.sysml`, prefer `attribute def`." },
|
|
58786
|
-
"datatype": { kind: "KerML", def: "KerML data type (no identity). In `.sysml`, prefer `attribute def`." },
|
|
58787
|
-
"metaclass": { kind: "KerML", def: "KerML metaclass for modeling language extension points." },
|
|
58788
|
-
"assoc": { kind: "KerML", def: "KerML association. In `.sysml`, prefer `connection def`." },
|
|
58789
|
-
"feature": { kind: "KerML", def: "Generic KerML feature. In `.sysml`, prefer `part`, `attribute`, `port`, etc." },
|
|
58790
|
-
"function": { kind: "KerML", def: "KerML function (pure computation). In `.sysml`, prefer `calc def`." },
|
|
58791
|
-
"predicate": { kind: "KerML", def: "KerML Boolean function. In `.sysml`, prefer `constraint def`." },
|
|
58792
|
-
"step": { kind: "KerML", def: "KerML step (behavior invocation)." },
|
|
58793
|
-
"behavior": { kind: "KerML", def: "KerML behavior classifier. In `.sysml`, prefer `action def`." },
|
|
58794
|
-
"interaction": { kind: "KerML", def: "KerML interaction (multi-party behavior)." },
|
|
58795
|
-
"expr": { kind: "KerML", def: "KerML expression feature." },
|
|
58828
|
+
"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)" },
|
|
58829
|
+
"class": { kind: "KerML", def: "KerML class (has identity). In `.sysml`, prefer `part def`.", cite: "OMG KerML v1.0 \xA78.2.5.2 (Classes)" },
|
|
58830
|
+
"classifier": { kind: "KerML", def: "KerML base classifier. In `.sysml`, prefer `part def`.", cite: "OMG KerML v1.0 \xA78.2.4.2.1 (Classifiers)" },
|
|
58831
|
+
"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)" },
|
|
58832
|
+
"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)" },
|
|
58833
|
+
"metaclass": { kind: "KerML", def: "KerML metaclass for modeling language extension points.", cite: "OMG KerML v1.0 \xA78.2.5.12 (Metadata)" },
|
|
58834
|
+
"assoc": { kind: "KerML", def: "KerML association. In `.sysml`, prefer `connection def`.", cite: "OMG KerML v1.0 \xA78.2.5.4 (Associations)" },
|
|
58835
|
+
"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)" },
|
|
58836
|
+
"function": { kind: "KerML", def: "KerML function (pure computation). In `.sysml`, prefer `calc def`.", cite: "OMG KerML v1.0 \xA78.2.5.7.1 (Functions)" },
|
|
58837
|
+
"predicate": { kind: "KerML", def: "KerML Boolean function. In `.sysml`, prefer `constraint def`.", cite: "OMG KerML v1.0 \xA78.2.5.7.3 (Predicates)" },
|
|
58838
|
+
"step": { kind: "KerML", def: "KerML step (behavior invocation).", cite: "OMG KerML v1.0 \xA78.2.5.6.2 (Steps)" },
|
|
58839
|
+
"behavior": { kind: "KerML", def: "KerML behavior classifier. In `.sysml`, prefer `action def`.", cite: "OMG KerML v1.0 \xA78.2.5.6.1 (Behaviors)" },
|
|
58840
|
+
"interaction": { kind: "KerML", def: "KerML interaction (multi-party behavior).", cite: "OMG KerML v1.0 \xA78.2.5.9.1 (Interactions)" },
|
|
58841
|
+
"expr": { kind: "KerML", def: "KerML expression feature.", cite: "OMG KerML v1.0 \xA78.2.5.7.2 (Expressions)" },
|
|
58796
58842
|
// Relationship keywords
|
|
58797
|
-
"specializes": { kind: "both", def: "Keyword form of `:>` specialization relationship." },
|
|
58798
|
-
"redefines": { kind: "both", def: "Keyword form of `:>>` redefinition relationship." },
|
|
58799
|
-
"subsets": { kind: "both", def: "Keyword form of `:>` subsetting on feature usages." },
|
|
58800
|
-
"conjugates": { kind: "both", def: "Keyword form of `~` conjugation on port types." },
|
|
58801
|
-
"disjoint": { kind: "both", def: "Used in `disjoint from` to assert two types share no instances." },
|
|
58802
|
-
"unions": { kind: "KerML", def: "Feature unions over other features." },
|
|
58803
|
-
"intersects": { kind: "KerML", def: "Feature intersection." },
|
|
58804
|
-
"differences": { kind: "KerML", def: "Feature set difference." },
|
|
58805
|
-
"chains": { kind: "KerML", def: "Feature chaining through a path of features." },
|
|
58806
|
-
"inverting": { kind: "KerML", def: "Feature that is the inverse of another." },
|
|
58843
|
+
"specializes": { kind: "both", def: "Keyword form of `:>` specialization relationship.", cite: "OMG KerML v1.0 \xA78.2.4.1.2 (Specialization)" },
|
|
58844
|
+
"redefines": { kind: "both", def: "Keyword form of `:>>` redefinition relationship.", cite: "OMG KerML v1.0 \xA78.2.4.3.4 (Redefinition)" },
|
|
58845
|
+
"subsets": { kind: "both", def: "Keyword form of `:>` subsetting on feature usages.", cite: "OMG KerML v1.0 \xA78.2.4.3.3 (Subsetting)" },
|
|
58846
|
+
"conjugates": { kind: "both", def: "Keyword form of `~` conjugation on port types.", cite: "OMG KerML v1.0 \xA78.2.4.1.3 (Conjugation)" },
|
|
58847
|
+
"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)" },
|
|
58848
|
+
"unions": { kind: "KerML", def: "Feature unions over other features.", cite: "OMG KerML v1.0 \xA78.2.4.1.5 (Unioning, Intersecting, and Differencing)" },
|
|
58849
|
+
"intersects": { kind: "KerML", def: "Feature intersection.", cite: "OMG KerML v1.0 \xA78.2.4.1.5 (Unioning, Intersecting, and Differencing)" },
|
|
58850
|
+
"differences": { kind: "KerML", def: "Feature set difference.", cite: "OMG KerML v1.0 \xA78.2.4.1.5 (Unioning, Intersecting, and Differencing)" },
|
|
58851
|
+
"chains": { kind: "KerML", def: "Feature chaining through a path of features.", cite: "OMG KerML v1.0 \xA78.2.4.3.5 (Feature Chaining)" },
|
|
58852
|
+
"inverting": { kind: "KerML", def: "Feature that is the inverse of another.", cite: "OMG KerML v1.0 \xA78.2.4.3.6 (Feature Inverting)" },
|
|
58807
58853
|
// Behavioral keywords
|
|
58808
|
-
"perform": { kind: "SysML", def: "Part performs (executes) an action usage.", example: "perform action drive;" },
|
|
58809
|
-
"exhibit": { kind: "SysML", def: "Part exhibits (runs) a state machine.", example: "exhibit state lifecycle;" },
|
|
58810
|
-
"include": { kind: "SysML", def: "Use case always includes another use case.", example: "include useCase Authenticate;" },
|
|
58811
|
-
"satisfy": { kind: "SysML", def: "Element satisfies a requirement.", example: "satisfy MassReq by myCar;" },
|
|
58812
|
-
"verify": { kind: "SysML", def: "Verification case verifies a requirement.", example: "verify MassReq;" },
|
|
58813
|
-
"require": { kind: "SysML", def: "Normative constraint inside a requirement definition.", example: "require constraint { mass <= 2500 [kg] }" },
|
|
58814
|
-
"assume": { kind: "SysML", def: "Precondition inside a requirement (if false, req not violated).", example: "assume constraint { isLoaded }" },
|
|
58815
|
-
"assert": { kind: "SysML", def: "Asserts that a constraint holds in the current scope.", example: "assert constraint { v.mass <= 2500 [kg] }" },
|
|
58816
|
-
"subject": { kind: "SysML", def: "The element that a requirement, use case, or case constrains. Exactly one per definition.", example: "subject v : Vehicle;" },
|
|
58817
|
-
"actor": { kind: "SysML", def: "An active external participant in a use case or case." },
|
|
58818
|
-
"stakeholder": { kind: "SysML", def: "An interested party in a concern or viewpoint." },
|
|
58819
|
-
"objective": { kind: "SysML", def: "Goal of an analysis or verification case.", example: "objective obj { verify MassReq; }" },
|
|
58820
|
-
"frame": { kind: "SysML", def: "Frames a concern in a requirement or viewpoint.", example: "frame concern Safety;" },
|
|
58821
|
-
"expose": { kind: "SysML", def: "Makes selected model elements visible in a view.", example: "expose myCar.engine;" },
|
|
58822
|
-
"render": { kind: "SysML", def: "Specifies how a view is rendered (table, tree, diagram).", example: "render asTable;" },
|
|
58854
|
+
"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)" },
|
|
58855
|
+
"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)" },
|
|
58856
|
+
"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)" },
|
|
58857
|
+
"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)" },
|
|
58858
|
+
"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)" },
|
|
58859
|
+
"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)" },
|
|
58860
|
+
"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)" },
|
|
58861
|
+
"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)" },
|
|
58862
|
+
"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)" },
|
|
58863
|
+
"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)" },
|
|
58864
|
+
"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)" },
|
|
58865
|
+
"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)" },
|
|
58866
|
+
"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)" },
|
|
58867
|
+
"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)" },
|
|
58868
|
+
"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)" },
|
|
58823
58869
|
// Behavioral control
|
|
58824
|
-
"entry": { kind: "SysML", def: "Action executed when entering a state.", example: "entry action initialize;" },
|
|
58825
|
-
"do": { kind: "SysML", def: "Action executed while in a state.", example: "do action monitor;" },
|
|
58826
|
-
"exit": { kind: "SysML", def: "Action executed when leaving a state.", example: "exit action cleanup;" },
|
|
58827
|
-
"first": { kind: "SysML", def: "Source state of a transition, or first step in a sequence.", example: "first idle" },
|
|
58828
|
-
"then": { kind: "SysML", def: "Target state of a transition, or next step in a sequence.", example: "then running" },
|
|
58829
|
-
"accept": { kind: "SysML", def: "Transition trigger \u2014 waits for an event, time, or change.", example: "accept cmd : CommandSignal" },
|
|
58830
|
-
"send": { kind: "SysML", def: "Sends an item or signal through a port.", example: "send statusUpdate via outputPort;" },
|
|
58831
|
-
"if": { kind: "SysML", def: "Guard condition in a transition or conditional expression.", example: "if speed > 60 [km/h]" },
|
|
58832
|
-
"while": { kind: "SysML", def: "Looping control flow \u2014 repeat while condition is true.", example: "while running loop { ... }" },
|
|
58833
|
-
"for": { kind: "SysML", def: "Iteration over a collection.", example: "for x in wheels loop { ... }" },
|
|
58834
|
-
"return": { kind: "SysML", def: "Return value declaration in a `calc def`.", example: "return result : SpeedValue;" },
|
|
58835
|
-
"merge": { kind: "SysML", def: "Action flow merge node \u2014 multiple incoming, one outgoing.", example: "merge m;" },
|
|
58836
|
-
"decide": { kind: "SysML", def: "Action flow decision (fork) node \u2014 one incoming, multiple guarded outgoing.", example: "decide d;" },
|
|
58837
|
-
"join": { kind: "SysML", def: "Action flow join node \u2014 multiple incoming, one outgoing (all must complete).", example: "join j;" },
|
|
58838
|
-
"fork": { kind: "SysML", def: "Action flow fork node \u2014 one incoming, multiple concurrent outgoing.", example: "fork f;" },
|
|
58839
|
-
"terminate": { kind: "SysML", def: "Terminates the enclosing action or behavior.", example: "terminate;" },
|
|
58840
|
-
"assign": { kind: "SysML", def: "Assignment action \u2014 sets a variable to an expression value.", example: "assign x := expr;" },
|
|
58870
|
+
"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)" },
|
|
58871
|
+
"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)" },
|
|
58872
|
+
"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)" },
|
|
58873
|
+
"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)" },
|
|
58874
|
+
"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)" },
|
|
58875
|
+
"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)" },
|
|
58876
|
+
"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)" },
|
|
58877
|
+
"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)" },
|
|
58878
|
+
"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)" },
|
|
58879
|
+
"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)" },
|
|
58880
|
+
"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)" },
|
|
58881
|
+
"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)" },
|
|
58882
|
+
"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)" },
|
|
58883
|
+
"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)" },
|
|
58884
|
+
"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)" },
|
|
58885
|
+
"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)" },
|
|
58886
|
+
"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)" },
|
|
58841
58887
|
// Connect/bind/flow
|
|
58842
|
-
"connect": { kind: "SysML", def: "Creates a connector between two ends.", example: "connect engine.out to wheels.in;" },
|
|
58843
|
-
"bind": { kind: "SysML", def: "Shorthand binding connector \u2014 two ends share the same value.", example: "bind outer.power = inner.supply;" },
|
|
58844
|
-
"binding": { kind: "SysML", def: "Named binding connector declaration.", example: "binding link of supply = demand;" },
|
|
58845
|
-
"allocate": { kind: "SysML", def: "Allocates a logical element to a physical element.", example: "allocate func.drive to hw.motor;" },
|
|
58888
|
+
"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)" },
|
|
58889
|
+
"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)" },
|
|
58890
|
+
"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)" },
|
|
58891
|
+
"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)" },
|
|
58846
58892
|
// Doc/comment/rep
|
|
58847
|
-
"doc": { kind: "both", def: "Modeled documentation attached to the next element (not discarded trivia).", example: "doc /* This part models the engine. */" },
|
|
58848
|
-
"comment": { kind: "both", def: "Modeled comment with an optional target.", example: "comment about myCar /* important */ ;" },
|
|
58849
|
-
"rep": { kind: "both", def: "Modeled textual representation in an external language.", example: 'rep vehicleView language "html" /* <b>Vehicle</b> */ ;' },
|
|
58850
|
-
"language": { kind: "both", def: "Identifies the external language of a `rep` body.", example: 'rep r language "markdown" /* ... */ ;' },
|
|
58851
|
-
"about": { kind: "both", def: "Attaches a `comment` or annotation to a named target.", example: "comment about myCar /* ... */ ;" },
|
|
58893
|
+
"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)" },
|
|
58894
|
+
"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)" },
|
|
58895
|
+
"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)" },
|
|
58896
|
+
"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)" },
|
|
58897
|
+
"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)" },
|
|
58852
58898
|
// Expression keywords
|
|
58853
|
-
"and": { kind: "both", def: "Boolean conjunction (lower precedence than `&`). Do NOT use `&&`.", example: "isActive and isLoaded" },
|
|
58854
|
-
"or": { kind: "both", def: "Boolean disjunction. Do NOT use `||`.", example: "isFull or isEmpty" },
|
|
58855
|
-
"xor": { kind: "both", def: "Boolean exclusive-or.", example: "a xor b" },
|
|
58856
|
-
"not": { kind: "both", def: "Boolean negation. Do NOT use `!`.", example: "not isActive" },
|
|
58857
|
-
"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" },
|
|
58858
|
-
"istype": { kind: "both", def: "Classification test \u2014 is the value an instance of this type?", example: "x istype Vehicle" },
|
|
58859
|
-
"hastype": { kind: "both", def: "Type check \u2014 does the value have exactly this type?", example: "x hastype Car" },
|
|
58860
|
-
"as": { kind: "both", def: "Type cast expression.", example: "x as Car" },
|
|
58861
|
-
"meta": { kind: "both", def: "Metadata access expression.", example: "x meta @Owner" },
|
|
58862
|
-
"null": { kind: "both", def: "The null (no-value) literal.", example: "if x == null then ..." },
|
|
58863
|
-
"true": { kind: "both", def: "Boolean literal true.", example: "attribute isLoaded : Boolean = true;" },
|
|
58864
|
-
"false": { kind: "both", def: "Boolean literal false.", example: "attribute isLoaded : Boolean = false;" },
|
|
58865
|
-
"new": { kind: "both", def: "Creates a new instance of the specified type.", example: "new Vehicle { ... }" }
|
|
58899
|
+
"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)" },
|
|
58900
|
+
"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)" },
|
|
58901
|
+
"xor": { kind: "both", def: "Boolean exclusive-or.", example: "a xor b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58902
|
+
"not": { kind: "both", def: "Boolean negation. Do NOT use `!`.", example: "not isActive", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
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", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58904
|
+
"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)" },
|
|
58905
|
+
"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)" },
|
|
58906
|
+
"as": { kind: "both", def: "Type cast expression.", example: "x as Car", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58907
|
+
"meta": { kind: "both", def: "Metadata access expression.", example: "x meta @Owner", cite: "OMG KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58908
|
+
"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)" },
|
|
58909
|
+
"true": { kind: "both", def: "Boolean literal true.", example: "attribute isLoaded : Boolean = true;", cite: "OMG KerML v1.0 \xA78.2.5.8.4 (Literal Expressions)" },
|
|
58910
|
+
"false": { kind: "both", def: "Boolean literal false.", example: "attribute isLoaded : Boolean = false;", cite: "OMG KerML v1.0 \xA78.2.5.8.4 (Literal Expressions)" },
|
|
58911
|
+
"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)" }
|
|
58866
58912
|
};
|
|
58867
58913
|
var MULTI_WORD_KEYWORD_TOOLTIPS = {
|
|
58868
|
-
"part def": { kind: "SysML", def: "Definition of a reusable structural part kind.", example: "part def Vehicle { ... }" },
|
|
58869
|
-
"port def": { kind: "SysML", def: "Definition of a reusable port contract.", example: "port def PowerPort { out item power; }" },
|
|
58870
|
-
"item def": { kind: "SysML", def: "Definition of an item kind that can flow or be exchanged.", example: "item def Packet;" },
|
|
58871
|
-
"attribute def": { kind: "SysML", def: "Definition of a reusable value type or attribute kind.", example: "attribute def Mass;" },
|
|
58872
|
-
"analysis case": { kind: "SysML", def: "Legacy recovery spelling for an analysis case; Release syntax omits case.", example: "analysis def MassRollup { ... }" },
|
|
58873
|
-
"verification case": { kind: "SysML", def: "Legacy recovery spelling for a verification case; Release syntax omits case.", example: "verification def CrashTest { ... }" },
|
|
58874
|
-
"use case": { kind: "SysML", def: "Case describing how actors use a subject to reach a goal.", example: "use case def DriveToWork { actor driver; }" },
|
|
58875
|
-
"succession flow": { kind: "SysML", def: "Flow with temporal succession semantics between source and target.", example: "succession flow fuel from tank to engine;" }
|
|
58914
|
+
"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)" },
|
|
58915
|
+
"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)" },
|
|
58916
|
+
"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)" },
|
|
58917
|
+
"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)" },
|
|
58918
|
+
"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)" },
|
|
58919
|
+
"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)" },
|
|
58920
|
+
"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)" },
|
|
58921
|
+
"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)" }
|
|
58876
58922
|
};
|
|
58877
58923
|
var OPERATOR_TOOLTIPS = {
|
|
58878
|
-
":": { 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
|
|
58879
|
-
":>": { desc: "**Specialization** (on defs) / **Subsetting** (on features) \u2014 target specializes or subsets the named element.", precedence: 0, example: "part def Car :> Vehicle;", cite: "OMG
|
|
58880
|
-
":>>": { desc: "**Redefinition** \u2014 feature narrows or overrides an inherited feature.", precedence: 0, example: "attribute :>> mass = 1500 [kg];", cite: "OMG
|
|
58881
|
-
"::>": { 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
|
|
58882
|
-
"=>": { 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
|
|
58883
|
-
"~": { 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
|
|
58884
|
-
"::": { desc: "**Namespace separator** \u2014 descends into a package namespace (`Pkg::Member`).", precedence: 0, example: "import ISQ::MassValue;", cite: "OMG
|
|
58885
|
-
"::*": { desc: "**Namespace wildcard** \u2014 imports all visible members of a namespace.", precedence: 0, example: "private import ISQ::*;", cite: "OMG
|
|
58886
|
-
"::**": { desc: "**Recursive import** \u2014 imports all visible members recursively from nested namespaces.", precedence: 0, example: "private import Pkg::*::**;", cite: "OMG
|
|
58887
|
-
".": { 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
|
|
58888
|
-
".?": { desc: "**Null-safe feature access** \u2014 like `.` but returns null if the receiver is null.", precedence: 18, example: "vehicle.?engine.torque", cite: "OMG
|
|
58889
|
-
"->": { 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
|
|
58890
|
-
"#(": { desc: "**Indexed access** \u2014 one-based index access on an ordered sequence.", precedence: 18, example: "wheels#(1).pressure // first wheel", cite: "OMG
|
|
58891
|
-
"**": { desc: "**Exponentiation** operator (precedence 16).", precedence: 16, example: "x ** 2 // x squared", cite: "OMG
|
|
58892
|
-
"^": { desc: "**Exponentiation** operator (same as `**`, precedence 16).", precedence: 16, example: "x ^ 2", cite: "OMG
|
|
58893
|
-
"*": { desc: "**Multiplication** (precedence 15).", precedence: 15, example: "mass * acceleration", cite: "OMG
|
|
58894
|
-
"/": { desc: "**Division** (precedence 15).", precedence: 15, example: "distance / time", cite: "OMG
|
|
58895
|
-
"%": { desc: "**Modulo** / remainder (precedence 15).", precedence: 15, example: "n % 2 == 0 // even", cite: "OMG
|
|
58896
|
-
"+": { desc: "**Addition** (precedence 14) or unary plus (precedence 17).", precedence: 14, example: "a + b", cite: "OMG
|
|
58897
|
-
"-": { desc: "**Subtraction** (precedence 14) or unary minus (precedence 17).", precedence: 14, example: "a - b", cite: "OMG
|
|
58898
|
-
"..": { desc: "**Range** expression \u2014 inclusive integer or quantity range.", precedence: 13, example: "0..9 // values 0 through 9", cite: "OMG
|
|
58899
|
-
"<": { desc: "**Less than** comparison (precedence 12).", precedence: 12, example: "mass < 2500 [kg]", cite: "OMG
|
|
58900
|
-
"<=": { desc: "**Less than or equal** comparison (precedence 12).", precedence: 12, example: "speed <= 120 [km/h]", cite: "OMG
|
|
58901
|
-
">": { desc: "**Greater than** comparison (precedence 12).", precedence: 12, example: "pressure > 0 [Pa]", cite: "OMG
|
|
58902
|
-
">=": { desc: "**Greater than or equal** comparison (precedence 12).", precedence: 12, example: "charge >= 20 [%]", cite: "OMG
|
|
58903
|
-
"==": { desc: "**Value equality** (precedence 11). Tests whether two values are equal. For binding/assignment use `=`.", precedence: 11, example: 'status == "active"', cite: "OMG
|
|
58904
|
-
"!=": { desc: "**Value inequality** (precedence 11).", precedence: 11, example: "mode != null", cite: "OMG
|
|
58905
|
-
"===": { desc: "**Identity equality** \u2014 tests that two references point to the same object (precedence 11).", precedence: 11, example: "a === b", cite: "OMG
|
|
58906
|
-
"!==": { desc: "**Identity inequality** (precedence 11).", precedence: 11, example: "a !== b", cite: "OMG
|
|
58907
|
-
"&": { desc: "**Bitwise / Boolean and** (lower precedence than comparison, precedence 9). Prefer `and` for Boolean logic.", precedence: 9, example: "flags & 0xFF", cite: "OMG
|
|
58908
|
-
"|": { desc: "**Bitwise / Boolean or** (lower precedence than `xor`, precedence 7). Prefer `or` for Boolean logic.", precedence: 7, example: "flags | 0x01", cite: "OMG
|
|
58909
|
-
"??": { desc: "**Null-coalescing** \u2014 returns the left operand if non-null, otherwise the right (precedence 2).", precedence: 2, example: 'name ?? "unnamed"', cite: "OMG
|
|
58910
|
-
"?": { 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
|
|
58911
|
-
"=": { desc: "**Initial value** assignment or binding (not equality). For equality testing use `==`.", precedence: 0, example: "attribute mass : MassValue = 1500 [kg];", cite: "OMG
|
|
58912
|
-
"@": { desc: "**Metadata application** shorthand \u2014 applies a metadata definition to the next element.", precedence: 0, example: "@Safety\npart def Engine;", cite: "OMG SysML v2 \
|
|
58913
|
-
"@@": { desc: "**Metaclass application** \u2014 applies a metaclass annotation.", precedence: 0, example: "@@StandardProfile", cite: "OMG SysML v2 \
|
|
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 KerML v1.0 \xA78.2.4.3.2 (Feature Typing)" },
|
|
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 KerML v1.0 \xA78.2.4.1.2 (Specialization)" },
|
|
58926
|
+
":>>": { 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)" },
|
|
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 KerML v1.0 \xA78.2.4.3.3 (Subsetting)" },
|
|
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 KerML v1.0 \xA78.2.5.5.1 (Connectors)" },
|
|
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 KerML v1.0 \xA78.2.4.1.3 (Conjugation)" },
|
|
58930
|
+
"::": { 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)" },
|
|
58931
|
+
"::*": { 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)" },
|
|
58932
|
+
"::**": { 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)" },
|
|
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 KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58934
|
+
".?": { 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)" },
|
|
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 KerML v1.0 \xA78.2.5.8.2 (Primary Expressions)" },
|
|
58936
|
+
"#(": { 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)" },
|
|
58937
|
+
"**": { desc: "**Exponentiation** operator (precedence 16).", precedence: 16, example: "x ** 2 // x squared", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58938
|
+
"^": { desc: "**Exponentiation** operator (same as `**`, precedence 16).", precedence: 16, example: "x ^ 2", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58939
|
+
"*": { desc: "**Multiplication** (precedence 15).", precedence: 15, example: "mass * acceleration", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58940
|
+
"/": { desc: "**Division** (precedence 15).", precedence: 15, example: "distance / time", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58941
|
+
"%": { desc: "**Modulo** / remainder (precedence 15).", precedence: 15, example: "n % 2 == 0 // even", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58942
|
+
"+": { 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)" },
|
|
58943
|
+
"-": { 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)" },
|
|
58944
|
+
"..": { 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)" },
|
|
58945
|
+
"<": { desc: "**Less than** comparison (precedence 12).", precedence: 12, example: "mass < 2500 [kg]", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58946
|
+
"<=": { 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)" },
|
|
58947
|
+
">": { desc: "**Greater than** comparison (precedence 12).", precedence: 12, example: "pressure > 0 [Pa]", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58948
|
+
">=": { 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)" },
|
|
58949
|
+
"==": { 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)" },
|
|
58950
|
+
"!=": { desc: "**Value inequality** (precedence 11).", precedence: 11, example: "mode != null", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58951
|
+
"===": { 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)" },
|
|
58952
|
+
"!==": { desc: "**Identity inequality** (precedence 11).", precedence: 11, example: "a !== b", cite: "OMG KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58953
|
+
"&": { 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)" },
|
|
58954
|
+
"|": { 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)" },
|
|
58955
|
+
"??": { 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)" },
|
|
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 KerML v1.0 \xA78.2.5.8.1 (Operator Expressions)" },
|
|
58957
|
+
"=": { 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)" },
|
|
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.0 Part 1 \xA78.2.2.27 (Metadata)" },
|
|
58959
|
+
"@@": { desc: "**Metaclass application** \u2014 applies a metaclass annotation.", precedence: 0, example: "@@StandardProfile", cite: "OMG SysML v2.0 Part 1 \xA78.2.2.27 (Metadata)" }
|
|
58914
58960
|
};
|
|
58915
58961
|
|
|
58916
58962
|
// ../language-server/out/src/services/v1-guardrail.js
|
|
@@ -60567,6 +60613,7 @@ ${baseIndent}}`;
|
|
|
60567
60613
|
checkCrossReferences(node, accept) {
|
|
60568
60614
|
const index = this.buildIndex();
|
|
60569
60615
|
const imports = [];
|
|
60616
|
+
const exposePaths = [];
|
|
60570
60617
|
const decls = [];
|
|
60571
60618
|
const verifyStmts = [];
|
|
60572
60619
|
const satisfyStmts = [];
|
|
@@ -60578,7 +60625,9 @@ ${baseIndent}}`;
|
|
|
60578
60625
|
const path10 = importedPath(child);
|
|
60579
60626
|
if (alias && path10 && importWildcard(child) === "none")
|
|
60580
60627
|
aliasMap.set(alias, path10);
|
|
60581
|
-
} else if (
|
|
60628
|
+
} else if (isExposePath(child))
|
|
60629
|
+
exposePaths.push(child);
|
|
60630
|
+
else if (isVerifyStmt(child))
|
|
60582
60631
|
verifyStmts.push(child);
|
|
60583
60632
|
else if (isSatisfyStmt(child))
|
|
60584
60633
|
satisfyStmts.push(child);
|
|
@@ -60594,6 +60643,7 @@ ${baseIndent}}`;
|
|
|
60594
60643
|
this.checkPrivateImports(imports, index, accept);
|
|
60595
60644
|
this.checkPrivateWildcardReferences(node, imports, index, accept);
|
|
60596
60645
|
this.checkImportCycles(imports, index, accept);
|
|
60646
|
+
this.checkUnevaluatedFilters(imports, exposePaths, accept);
|
|
60597
60647
|
if (sysmlDiagnosticSettings.unusedImports !== "off") {
|
|
60598
60648
|
this.checkUnusedImports(node, imports, index, sysmlDiagnosticSettings.unusedImports, accept);
|
|
60599
60649
|
}
|
|
@@ -61212,6 +61262,34 @@ ${baseIndent}}`;
|
|
|
61212
61262
|
}
|
|
61213
61263
|
return false;
|
|
61214
61264
|
}
|
|
61265
|
+
/**
|
|
61266
|
+
* REQ-387 — RES018: an `import` or `expose` filter the metadata-filter
|
|
61267
|
+
* evaluator cannot decide (issue #102).
|
|
61268
|
+
*
|
|
61269
|
+
* The evaluator keeps a member it cannot decide, so an unevaluated filter
|
|
61270
|
+
* silently contributes the members it was written to exclude — a scope or a
|
|
61271
|
+
* view that reads as authoritative and is not. Failing open stays (narrowing
|
|
61272
|
+
* on a guess would manufacture unresolved-name errors); what changes is that
|
|
61273
|
+
* the model now says so at the filter that is not applied.
|
|
61274
|
+
*
|
|
61275
|
+
* Default severity is `info` rather than a warning: the model is legal and the
|
|
61276
|
+
* limitation is this evaluator's, not the author's. Teams that want an
|
|
61277
|
+
* unevaluated filter to break a build raise it per code through
|
|
61278
|
+
* `sysml.validation.severities` (REQ-240).
|
|
61279
|
+
*/
|
|
61280
|
+
checkUnevaluatedFilters(imports, exposePaths, accept) {
|
|
61281
|
+
const report = (condition, subject) => {
|
|
61282
|
+
const undecidable = undecidableFilterCondition(condition);
|
|
61283
|
+
if (!undecidable)
|
|
61284
|
+
return;
|
|
61285
|
+
accept(severity("RES018", "info"), DIAGNOSTIC_MESSAGES.RES018_UNEVALUATED_FILTER(subject, undecidable.construct), { node: undecidable.node, code: "RES018" });
|
|
61286
|
+
};
|
|
61287
|
+
for (const imp of imports)
|
|
61288
|
+
for (const filter3 of imp.filters)
|
|
61289
|
+
report(filter3.condition, "Import");
|
|
61290
|
+
for (const path10 of exposePaths)
|
|
61291
|
+
report(path10.condition, "Expose");
|
|
61292
|
+
}
|
|
61215
61293
|
// REQ-324 — RES009 unused import (configurable, OFF by default)
|
|
61216
61294
|
checkUnusedImports(root3, imports, index, level, accept) {
|
|
61217
61295
|
if (imports.length === 0)
|
|
@@ -63059,8 +63137,6 @@ function resolveEffectiveSubject(node) {
|
|
|
63059
63137
|
}
|
|
63060
63138
|
|
|
63061
63139
|
// ../language-server/out/src/services/hover-provider.js
|
|
63062
|
-
var KEYWORD_CITATION_SOURCE = "info/language/03-keywords-and-operators.md:1";
|
|
63063
|
-
var OPERATOR_CITATION_SOURCE = "info/language/03-keywords-and-operators.md:223";
|
|
63064
63140
|
var MAX_HOVER_LINES = 30;
|
|
63065
63141
|
function leafAtOffset(node, offset) {
|
|
63066
63142
|
if (isLeafCstNode(node)) {
|
|
@@ -63470,7 +63546,7 @@ function buildKeywordHover(token) {
|
|
|
63470
63546
|
${info.example}
|
|
63471
63547
|
\`\`\``);
|
|
63472
63548
|
}
|
|
63473
|
-
lines.push("", sourceFooter(
|
|
63549
|
+
lines.push("", sourceFooter(info.cite));
|
|
63474
63550
|
return lines.join("\n");
|
|
63475
63551
|
}
|
|
63476
63552
|
function escapeRegExp2(text) {
|
|
@@ -63495,7 +63571,7 @@ function buildMultiWordKeywordHover(document, leaf) {
|
|
|
63495
63571
|
lines.push("", `\`\`\`sysml
|
|
63496
63572
|
${info.example}
|
|
63497
63573
|
\`\`\``);
|
|
63498
|
-
lines.push("", sourceFooter(
|
|
63574
|
+
lines.push("", sourceFooter(info.cite));
|
|
63499
63575
|
return {
|
|
63500
63576
|
value: lines.join("\n"),
|
|
63501
63577
|
range: {
|
|
@@ -63528,9 +63604,7 @@ ${info.example}
|
|
|
63528
63604
|
lines.push("", `Maps to Kernel Function Library function \`${fn}\`.`);
|
|
63529
63605
|
if (libraryFunctionDetails)
|
|
63530
63606
|
lines.push("", libraryFunctionDetails);
|
|
63531
|
-
|
|
63532
|
-
lines.push("", `*${info.cite}*`);
|
|
63533
|
-
lines.push("", sourceFooter(OPERATOR_CITATION_SOURCE));
|
|
63607
|
+
lines.push("", sourceFooter(info.cite));
|
|
63534
63608
|
return lines.join("\n");
|
|
63535
63609
|
}
|
|
63536
63610
|
function functionMemberSignature(member) {
|
|
@@ -63676,7 +63750,7 @@ function limitHoverLines(value) {
|
|
|
63676
63750
|
return value;
|
|
63677
63751
|
let footerIndex = -1;
|
|
63678
63752
|
for (let index = lines.length - 1; index >= 0; index--) {
|
|
63679
|
-
if (/^\*Source: `[^`]
|
|
63753
|
+
if (/^\*Source: `[^`]+`\*$/u.test(lines[index])) {
|
|
63680
63754
|
footerIndex = index;
|
|
63681
63755
|
break;
|
|
63682
63756
|
}
|
|
@@ -69031,7 +69105,7 @@ async function runValidation(command) {
|
|
|
69031
69105
|
}
|
|
69032
69106
|
|
|
69033
69107
|
// src/main.ts
|
|
69034
|
-
var VERSION2 = true ? "0.15.
|
|
69108
|
+
var VERSION2 = true ? "0.15.2" : "dev";
|
|
69035
69109
|
async function main(argv) {
|
|
69036
69110
|
const command = parseArgs(argv);
|
|
69037
69111
|
if (command.kind === "help") {
|