From a2e34adaf6a1ee657537801f9368e2d8b5bc4e62 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Wed, 16 Sep 2026 20:09:37 -0400 Subject: [PATCH] Surface eleven properties MATLAB models, and pin the rule that hid them A parity pass against the MATLAB Data Explorer app found eleven properties MATLAB models that this package either dropped or never declared. Scoped to the schema and data model: no UI change. Three of the gaps were the same defect. schemaBridge.resolvePropForKey prefers a layout atom over the class's own schema descriptor; the atoms read node fields rather than the descriptor's sourcePath, and nothing checked that the node class declares the field. When it does not, the value is lost twice - the row renders blank, and toPIObject still adds the key to shownKeys, so buildOtherRows suppresses the raw property from "Other" too. - Simulink.ValueType: Min, Max and Unit reachable in both panes, including the serialized-key asymmetry MATLAB has (ValueType writes Unit; Parameter and Signal write DocUnits). - Simulink.BusElement: the real / Fixed display defaults MATLAB shows, with a silent element still gaining no key on save. - Simulink.EnumType: IsTunableInCode. - Simulink.LookupTable and Simulink.Breakpoint: the flat properties MATLAB models. The 17-value StorageClass override replaces the shared 6 rather than widening it, so Custom is refused on a LookupTable while still accepted on a Simulink.Parameter. - Simulink.ConfigSet and Simulink.ConfigSetRef: Description, and SourceName on the ref. - _rejectUnknownEnumeral and the Min/Max normalizer move up to DataNode, removing a duplicate copy in ParameterNode. test/schemaLayoutResolvable.test.ts pins the rule between the two paths a layout key resolves through, rather than re-testing each class: it enumerates every (class, layout key) pair, probes each with two sentinels so the row must change rather than merely contain text, and fails any row reading a node field the built instance lacks. Verified by reintroducing the bug in production code, not only by its own self-check. 4741 to 4856 tests passing. No test deleted and no assertion loosened; three updated for real consequences of the new layout keys, one made stricter. dist/ rebuilt, as this package ships prebuilt output for git-dependency consumers. The MATLAB re-open gate is not yet run: the newly editable properties are verified in-process only. Recorded as open in the fidelity docs. --- dist/datamodel/node/DataNode.d.ts | 2 + dist/datamodel/node/DataNode.d.ts.map | 2 +- dist/datamodel/node/DataNode.js | 65 ++ dist/datamodel/node/DataNode.js.map | 2 +- dist/datamodel/node/data/BusNode.d.ts | 2 - dist/datamodel/node/data/BusNode.d.ts.map | 2 +- dist/datamodel/node/data/BusNode.js | 77 +- dist/datamodel/node/data/BusNode.js.map | 2 +- dist/datamodel/node/data/ConfigSetNode.d.ts | 1 + .../node/data/ConfigSetNode.d.ts.map | 2 +- dist/datamodel/node/data/ConfigSetNode.js | 17 +- dist/datamodel/node/data/ConfigSetNode.js.map | 2 +- .../datamodel/node/data/ConfigSetRefNode.d.ts | 1 + .../node/data/ConfigSetRefNode.d.ts.map | 2 +- dist/datamodel/node/data/ConfigSetRefNode.js | 13 +- .../node/data/ConfigSetRefNode.js.map | 2 +- dist/datamodel/node/data/ParameterNode.d.ts | 1 - .../node/data/ParameterNode.d.ts.map | 2 +- dist/datamodel/node/data/ParameterNode.js | 9 +- dist/datamodel/node/data/ParameterNode.js.map | 2 +- dist/datamodel/node/data/ValueTypeNode.d.ts | 11 +- .../node/data/ValueTypeNode.d.ts.map | 2 +- dist/datamodel/node/data/ValueTypeNode.js | 122 ++- dist/datamodel/node/data/ValueTypeNode.js.map | 2 +- dist/datamodel/schema/classes/breakpoint.json | 12 +- dist/datamodel/schema/classes/configSet.json | 2 +- .../schema/classes/configSetRef.json | 4 +- dist/datamodel/schema/classes/enumType.json | 5 +- .../datamodel/schema/classes/lookupTable.json | 14 +- dist/datamodel/schema/classes/valueType.json | 4 +- dist/datamodel/schema/props/codeGen.json | 6 +- dist/datamodel/schema/props/core.json | 3 +- dist/datamodel/schema/props/dataObject.json | 2 + package.json | 2 +- src/datamodel/node/DataNode.ts | 65 ++ src/datamodel/node/data/BusNode.ts | 87 +-- src/datamodel/node/data/ConfigSetNode.ts | 26 +- src/datamodel/node/data/ConfigSetRefNode.ts | 29 +- src/datamodel/node/data/ParameterNode.ts | 7 +- .../node/data/Simulink.Breakpoint.md | 109 ++- .../node/data/Simulink.BusElement.md | 30 +- src/datamodel/node/data/Simulink.ConfigSet.md | 109 ++- .../node/data/Simulink.ConfigSetRef.md | 118 ++- src/datamodel/node/data/Simulink.EnumType.md | 64 +- .../node/data/Simulink.LookupTable.md | 168 +++- src/datamodel/node/data/Simulink.ValueType.md | 118 ++- src/datamodel/node/data/ValueTypeNode.ts | 124 ++- src/datamodel/schema/classes/breakpoint.json | 12 +- src/datamodel/schema/classes/configSet.json | 2 +- .../schema/classes/configSetRef.json | 4 +- src/datamodel/schema/classes/enumType.json | 5 +- src/datamodel/schema/classes/lookupTable.json | 14 +- src/datamodel/schema/classes/valueType.json | 4 +- src/datamodel/schema/props/codeGen.json | 7 +- src/datamodel/schema/props/core.json | 3 +- src/datamodel/schema/props/dataObject.json | 2 + test/busElementDisplayDefaults.test.ts | 199 +++++ test/busElementEnumEdit.test.ts | 15 +- test/configSetSchemaProps.test.ts | 352 +++++++++ test/enumIsTunableInCode.test.ts | 267 +++++++ test/lookupTableFlatProps.test.ts | 331 ++++++++ .../fidelity/hostnodes.fidelity.test.ts | 17 +- test/parity/matlab/schemaProps.test.ts | 66 +- test/schema/piGeneralAllNodes.test.ts | 21 +- test/schemaLayoutResolvable.test.ts | 733 ++++++++++++++++++ test/valueTypeValueProps.test.ts | 472 +++++++++++ 66 files changed, 3676 insertions(+), 303 deletions(-) create mode 100644 test/busElementDisplayDefaults.test.ts create mode 100644 test/configSetSchemaProps.test.ts create mode 100644 test/enumIsTunableInCode.test.ts create mode 100644 test/lookupTableFlatProps.test.ts create mode 100644 test/schemaLayoutResolvable.test.ts create mode 100644 test/valueTypeValueProps.test.ts diff --git a/dist/datamodel/node/DataNode.d.ts b/dist/datamodel/node/DataNode.d.ts index 7872420..49d6ace 100644 --- a/dist/datamodel/node/DataNode.d.ts +++ b/dist/datamodel/node/DataNode.d.ts @@ -52,6 +52,8 @@ export default class DataNode extends BaseNode { _resolveProperty(propName: string): string; setProperty(propName: string, stringValue: string): true | SetPropertyResult; _setMinMax(propName: 'Min' | 'Max', stringValue: string): true | SetPropertyResult; + static _normalizeMinMax(val: unknown): number | undefined; + _rejectUnknownEnumeral(propName: string, stringValue: string): SetPropertyResult | null; execAddChild(): ChildAddEdit | null; execRemoveChild(_child?: BaseNode): ChildUndoRedo | null; _renameField(from: string, to: string): void; diff --git a/dist/datamodel/node/DataNode.d.ts.map b/dist/datamodel/node/DataNode.d.ts.map index d2f8e67..96cff4f 100644 --- a/dist/datamodel/node/DataNode.d.ts.map +++ b/dist/datamodel/node/DataNode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DataNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DataNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAsHlE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAMhF;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,QAAQ;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAKhB,cAAc,CAAC,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBnF,IAAI,IAAI,IAAI,MAAM,CAYjB;IAOD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,0FAA0F;IAC1F,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,CAEjC;IAKD,IAAI,SAAS,IAAI,OAAO,CAEvB;IASD,IAAI,YAAY,IAAI,MAAM,CAWzB;IAKD,IAAI,cAAc,IAAI,MAAM,CAO3B;IAOD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAMD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAMjD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ1C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IA+H5E,UAAU,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAmClF,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IA8BzD,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAgCvF,YAAY,IAAI,YAAY,GAAG,IAAI;IAInC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI;IASxD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAqB5C,aAAa,IAAI,IAAI;IA6BrB,kBAAkB,IAAI,IAAI;IAiB1B,SAAS,IAAI,OAAO;IAWpB,wBAAwB,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAQzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiB5E,cAAc,IAAI,OAAO;IAIzB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAOhG,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAsB/G,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInD;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM;IAsF7G;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAqB3F;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAuBtF,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAO7G,MAAM,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAuFvG,MAAM,CAAC,2BAA2B,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,GAAG,IAAI,GACzB,MAAM;IAiDT,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAuBxG,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAatG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAsDtE;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAc7D,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;CAcpF"} \ No newline at end of file diff --git a/dist/datamodel/node/DataNode.js b/dist/datamodel/node/DataNode.js index bac50ef..c9fa1b7 100644 --- a/dist/datamodel/node/DataNode.js +++ b/dist/datamodel/node/DataNode.js @@ -382,6 +382,71 @@ export default class DataNode extends BaseNode { this._markModified(); return true; } + // MATLAB's empty bound is `[]`, and `[]` is truthy: left as it arrives it reaches + // the table as the text `[]` and the writers as a real value, so a class holding a + // bound as a node field normalizes it to `undefined` on the way in — the same + // "no bound" _setMinMax above stores for a cleared cell. Shared rather than + // per-class so the two ends of that round trip cannot disagree about what an + // absent bound is: ParameterNode, BusElementNode and ValueTypeNode all call it, and + // the first two each carried an identical private copy until the third needed one. + static _normalizeMinMax(val) { + if (Array.isArray(val) && val.length === 0) { + return undefined; + } + return val; + } + // Refuse a value MATLAB's enum does not contain, for any property surfaced as a + // dropdown (Complexity, DimensionsMode). Without this the edit reaches the generic + // branch for a string field above, which stores whatever text arrived: the table's + // own combobox can only offer legal choices, but the Property Inspector has no + // combobox and seeds a plain text box, so 'Real' or 'fixed' would be written into a + // file MATLAB then refuses to load — the failure an unlock has to rule out before + // it is an unlock at all. + // + // The legal set is read off the prop atom's readOptions — the SAME call the + // cell's dropdown is built from (BaseNode.getPropInfo) — rather than restated + // here. Two copies of an enum is how a UI ends up offering two choices and + // accepting three. + // + // The wording is MATLAB's own, from a probe of the live object (recorded in + // Simulink.BusElement.md): assigning anything else raises "There is no + // enumerated value named 'X'." Note this is MATLAB's message for a rejected + // ASSIGNMENT; that the values we do accept produce a file MATLAB reopens with + // the same values is the live tier's claim to make, and it has not been run + // here (test/parity/matlab/writeback.live.test.ts, gated on DEX_MATLAB_CMD). + // + // Lives here beside _setMinMax, rather than on BusElementNode where it started with + // one caller, because Simulink.ValueType's Complexity/DimensionsMode are the same + // two closed enums and need the same rule. Copying it would have copied the + // ''-is-a-CLEAR licence below, which is precisely the kind of subtlety that rots out + // of sync between two copies. + _rejectUnknownEnumeral(propName, stringValue) { + const prop = this._propFor(propName); + if (!prop || prop.editor !== 'select' || !prop.readOptions) { + return null; + } + // The empty string is a CLEAR, not an illegal enumeral — the same licence + // _setMinMax takes for '' and '[]'. It has to be, because it is what a user + // emptying the cell submits, and because DataModel.editProperty captures the + // prior value for UNDO: refusing '' would leave the undo of a clear silently + // unapplied. Storing '' restores absence rather than writing an illegal value, + // and every write-back gate for these props reads '' as absence too, so the + // object goes back out exactly as it came in. + if (stringValue === '') { + return null; + } + const options = prop.readOptions(this); + if (options.length === 0 || options.indexOf(stringValue) >= 0) { + return null; + } + const current = this[prop.nodeProperty || prop.key]; + return { + error: true, + reason: "There is no enumerated value named '" + stringValue + "'.", + invalidValue: stringValue, + validValue: typeof current === 'string' ? current : '', + }; + } // No structural editing by default. The classes that DO manage children (bus, // enum type, struct, MATLAB array/cell/string) override both, delegating to // childEdit.ts. Returning null here — rather than inheriting a wrapper around diff --git a/dist/datamodel/node/DataNode.js.map b/dist/datamodel/node/DataNode.js.map index b7aaba2..6a20a66 100644 --- a/dist/datamodel/node/DataNode.js.map +++ b/dist/datamodel/node/DataNode.js.map @@ -1 +1 @@ -{"version":3,"file":"DataNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DataNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/node/data/BusNode.d.ts b/dist/datamodel/node/data/BusNode.d.ts index 15ebceb..58787f2 100644 --- a/dist/datamodel/node/data/BusNode.d.ts +++ b/dist/datamodel/node/data/BusNode.d.ts @@ -12,7 +12,6 @@ export declare class BusElementNode extends BaseBusElementNode { Dimensions: unknown; DimensionsMode: string; constructor(name: string, parent: BaseNode | null, props: Record, serial: Record); - static _normalizeMinMax(val: unknown): number | undefined; get icon(): string; get className(): string; get dataType(): string; @@ -25,7 +24,6 @@ export declare class BusElementNode extends BaseBusElementNode { items: (PropClass | typeof PropUnit | typeof PropDescription)[]; })[]; setProperty(propName: string, stringValue: string): true | SetPropertyResult; - _rejectUnknownEnumeral(propName: string, stringValue: string): SetPropertyResult | null; _applyElementOverrides(props: Record): void; } export declare class BusNode extends BaseBusNode { diff --git a/dist/datamodel/node/data/BusNode.d.ts.map b/dist/datamodel/node/data/BusNode.d.ts.map index 8478d4f..60106aa 100644 --- a/dist/datamodel/node/data/BusNode.d.ts.map +++ b/dist/datamodel/node/data/BusNode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BusNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BusNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAA0B,eAAe,EAAE,QAAQ,EAAiC,MAAM,kBAAkB,CAAC;AACrJ,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAO9C,qBAAa,cAAe,SAAQ,kBAAkB;IAClD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IASjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoBlH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAQzD,IAAI,IAAI,IAAI,MAAM,CAIjB;IAGD,IAAI,SAAS,IAAI,MAAM,CAAkC;IAEzD,IAAI,QAAQ,IAAI,MAAM,CAA0B;IAChD,aAAa,IAAI,SAAS,EAAE;IAG5B,WAAW;;;;;;;IA0BX,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IA8B5E,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IA6BvF,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAiC/D;AAED,qBAAa,OAAQ,SAAQ,WAAW;IAGpC,YAAY,UAAS;IAErB,IAAI,IAAI,IAAI,MAAM,CAGjB;IACD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc;IACjH,MAAM,CAAC,kBAAkB,SAAyB;IAClD,MAAM,KAAK,WAAW,IAAI,MAAM,CAAkB;IAClD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO;IACpE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO;CAChG;;;;;AAED,wBAA2C"} \ No newline at end of file +{"version":3,"file":"BusNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BusNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAA0B,eAAe,EAAE,QAAQ,EAAiC,MAAM,kBAAkB,CAAC;AACrJ,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAO9C,qBAAa,cAAe,SAAQ,kBAAkB;IAClD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IASjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA8BlH,IAAI,IAAI,IAAI,MAAM,CAIjB;IAGD,IAAI,SAAS,IAAI,MAAM,CAAkC;IAEzD,IAAI,QAAQ,IAAI,MAAM,CAA0B;IAChD,aAAa,IAAI,SAAS,EAAE;IAG5B,WAAW;;;;;;;IA0BX,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAW5E,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAsC/D;AAED,qBAAa,OAAQ,SAAQ,WAAW;IAGpC,YAAY,UAAS;IAErB,IAAI,IAAI,IAAI,MAAM,CAGjB;IACD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc;IACjH,MAAM,CAAC,kBAAkB,SAAyB;IAClD,MAAM,KAAK,WAAW,IAAI,MAAM,CAAkB;IAClD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO;IACpE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO;CAChG;;;;;AAED,wBAA2C"} \ No newline at end of file diff --git a/dist/datamodel/node/data/BusNode.js b/dist/datamodel/node/data/BusNode.js index 4e23f93..ce26d80 100644 --- a/dist/datamodel/node/data/BusNode.js +++ b/dist/datamodel/node/data/BusNode.js @@ -23,15 +23,16 @@ export class BusElementNode extends BaseBusElementNode { // DataType); an unset type means the Simulink default of 'double'. const rawDataType = props.DataType_internal !== undefined ? props.DataType_internal : props.DataType; this.DataType = rawDataType || 'double'; - this.Complexity = props.Complexity || ''; + // MATLAB's own defaults for an element that declares neither (probed on a live + // Simulink.BusElement): Complexity 'real', DimensionsMode 'Fixed' — the same pair + // Simulink.ValueType defaults to, and NOT the 'auto' a Simulink.Signal uses. These + // are DISPLAY values only: the write-back gates in _applyElementOverrides compare + // against the same two literals, so an element the file left silent still saves + // silent. Before this the fallback was '', which showed blanks where MATLAB shows + // a value. + this.Complexity = props.Complexity || 'real'; this.Dimensions = props.Dimensions; - this.DimensionsMode = props.DimensionsMode || ''; - } - static _normalizeMinMax(val) { - if (Array.isArray(val) && val.length === 0) { - return undefined; - } - return val; + this.DimensionsMode = props.DimensionsMode || 'Fixed'; } // A StructType's elements use the struct-element icon; a derived // DataInterface's use the arch bus-element icon; a plain Design Data bus's @@ -86,53 +87,6 @@ export class BusElementNode extends BaseBusElementNode { } return super.setProperty(propName, stringValue); } - // Refuse a value MATLAB's enum does not contain, for either element property - // surfaced as a dropdown (Complexity, DimensionsMode). Without this the edit - // reaches DataNode's generic branch for a string field, which stores whatever - // text arrived: the table's own combobox can only offer legal choices, but the - // Property Inspector has no combobox and seeds a plain text box, so 'Real' or - // 'fixed' would be written into a file MATLAB then refuses to load — the - // failure an unlock has to rule out before it is an unlock at all. - // - // The legal set is read off the prop atom's readOptions — the SAME call the - // cell's dropdown is built from (BaseNode.getPropInfo) — rather than restated - // here. Two copies of an enum is how a UI ends up offering two choices and - // accepting three. - // - // The wording is MATLAB's own, from a probe of the live object (recorded in - // Simulink.BusElement.md): assigning anything else raises "There is no - // enumerated value named 'X'." Note this is MATLAB's message for a rejected - // ASSIGNMENT; that the values we do accept produce a file MATLAB reopens with - // the same values is the live tier's claim to make, and it has not been run - // here (test/parity/matlab/writeback.live.test.ts, gated on DEX_MATLAB_CMD). - _rejectUnknownEnumeral(propName, stringValue) { - const prop = this._propFor(propName); - if (!prop || prop.editor !== 'select' || !prop.readOptions) { - return null; - } - // The empty string is a CLEAR, not an illegal enumeral — the same licence - // _setMinMax takes for '' and '[]'. It has to be, because it is what UNDO - // submits: an element that never carried the property reads as '' (see the - // constructor's `|| ''`), DataModel.editProperty captures that as the prior - // value, and refusing it would leave the undo of a perfectly good edit - // silently unapplied. Storing '' restores absence rather than writing an - // illegal value — _applyElementOverrides then omits the key entirely, so the - // element goes back out exactly as it came in. - if (stringValue === '') { - return null; - } - const options = prop.readOptions(this); - if (options.length === 0 || options.indexOf(stringValue) >= 0) { - return null; - } - const current = this[prop.nodeProperty || prop.key]; - return { - error: true, - reason: "There is no enumerated value named '" + stringValue + "'.", - invalidValue: stringValue, - validValue: typeof current === 'string' ? current : '', - }; - } _applyElementOverrides(props) { const sp = this.serial._properties; const minKey = 'Min_internal' in sp ? 'Min_internal' : 'Min'; @@ -168,12 +122,17 @@ export class BusElementNode extends BaseBusElementNode { // `

complex

` or as its JSON member); // what was missing was the copy from the node field into the bag, so the // serializer faithfully re-emitted the value parsed from the file. - // Guarded the same way as Description above so an element that never - // carried the key does not gain one on a clean round trip. - if ('Complexity' in sp || this.Complexity) { + // Guarded like DataType above — against the DEFAULT, not on truthiness — so an + // element that never carried the key does not gain one on a clean round trip. + // Truthiness was enough only while an absent enum read as ''; now that it reads as + // MATLAB's default the same test is always true, and every untyped element in every + // dictionary would come back with both keys added. The extra `this.X &&` covers the + // CLEAR: emptying the cell stores '' (see DataNode._rejectUnknownEnumeral), which is + // not a value either property has, so it means absence here too. + if ('Complexity' in sp || (this.Complexity && this.Complexity !== 'real')) { props.Complexity = this.Complexity; } - if ('DimensionsMode' in sp || this.DimensionsMode) { + if ('DimensionsMode' in sp || (this.DimensionsMode && this.DimensionsMode !== 'Fixed')) { props.DimensionsMode = this.DimensionsMode; } if ('Description' in sp || this.Description) { diff --git a/dist/datamodel/node/data/BusNode.js.map b/dist/datamodel/node/data/BusNode.js.map index 209ea38..e95bf5e 100644 --- a/dist/datamodel/node/data/BusNode.js.map +++ b/dist/datamodel/node/data/BusNode.js.map @@ -1 +1 @@ -{"version":3,"file":"BusNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BusNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIrJ,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAElE,MAAM,UAAU,GAAG,cAAc,CAAC;AAElC,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAiBlD,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B;QAC9G,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,+EAA+E;QAC/E,8EAA8E;QAC9E,iFAAiF;QACjF,+CAA+C;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACjF,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACjF,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAI,KAAK,CAAC,QAAmB,IAAK,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC;QACvE,0EAA0E;QAC1E,mEAAmE;QACnE,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrG,IAAI,CAAC,QAAQ,GAAI,WAAsB,IAAI,QAAQ,CAAC;QACpD,IAAI,CAAC,UAAU,GAAI,KAAK,CAAC,UAAqB,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,cAAc,GAAI,KAAK,CAAC,cAAyB,IAAI,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAY;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QACjE,OAAO,GAAyB,CAAC;IACrC,CAAC;IAED,iEAAiE;IACjE,2EAA2E;IAC3E,sCAAsC;IACtC,IAAI,IAAI;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgE,CAAC;QACrF,IAAI,MAAM,EAAE,YAAY,EAAE,CAAC;YAAC,OAAO,mBAAmB,CAAC;QAAC,CAAC;QACzD,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC;IACjE,CAAC;IACD,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,SAAS,KAAa,OAAO,qBAAqB,CAAC,CAAC,CAAC;IACzD,gFAAgF;IAChF,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClK,0EAA0E;IAC1E,yEAAyE;IACzE,WAAW;QACP,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,iEAAiE;QACjE,0EAA0E;QAC1E,wDAAwD;QACxD,OAAO;YACH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;oBACvB,QAAQ;oBACR,cAAc,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;oBAC/D,QAAQ,EAAE,aAAa;iBAC1B,EAAE;YACH,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE;oBAChC,cAAc,EAAE,cAAc,EAAE,kBAAkB;oBAClD,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;oBAChD,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;oBAChD,QAAQ,EAAE,eAAe;iBAC5B,EAAE;SACN,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,8EAA8E;IAC9E,8EAA8E;IAC9E,kEAAkE;IAClE,WAAW,CAAC,QAAgB,EAAE,WAAmB;QAC7C,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,8EAA8E;IAC9E,yEAAyE;IACzE,mEAAmE;IACnE,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,2EAA2E;IAC3E,mBAAmB;IACnB,EAAE;IACF,4EAA4E;IAC5E,uEAAuE;IACvE,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,sBAAsB,CAAC,QAAgB,EAAE,WAAmB;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,2EAA2E;QAC3E,4EAA4E;QAC5E,uEAAuE;QACvE,yEAAyE;QACzE,6EAA6E;QAC7E,+CAA+C;QAC/C,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAI,IAA2C,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5F,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,sCAAsC,GAAG,WAAW,GAAG,IAAI;YACnE,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SACzD,CAAC;IACN,CAAC;IAED,sBAAsB,CAAC,KAA8B;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAsC,CAAC;QAC9D,MAAM,MAAM,GAAG,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D,MAAM,MAAM,GAAG,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D,MAAM,OAAO,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,KAAK,GAAG,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3E,iFAAiF;QACjF,kFAAkF;QAClF,gFAAgF;QAChF,4EAA4E;QAC5E,uEAAuE;QACvE,gFAAgF;QAChF,iFAAiF;QACjF,IAAI,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,CAAC;QACvG,IAAI,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,CAAC;QACvG,IAAI,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAAC,CAAC;QAC/D,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAAC,CAAC;QAChF,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,4EAA4E;QAC5E,qEAAqE;QACrE,0EAA0E;QAC1E,yEAAyE;QACzE,mEAAmE;QACnE,qEAAqE;QACrE,2DAA2D;QAC3D,IAAI,YAAY,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAAC,CAAC;QAClF,IAAI,gBAAgB,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAAC,CAAC;QAClG,IAAI,aAAa,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAAC,CAAC;IAC1F,CAAC;CACJ;AAED,MAAM,OAAO,OAAQ,SAAQ,WAAW;IAAxC;;QACI,qEAAqE;QACrE,8EAA8E;QAC9E,iBAAY,GAAG,KAAK,CAAC;IAYzB,CAAC;IAVG,IAAI,IAAI;QACJ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAAC,OAAO,YAAY,CAAC;QAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,kBAAkB,CAAC,IAAY,EAAE,KAA8B,EAAE,MAA+B,IAAoB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aACpK,uBAAkB,GAAG,qBAAqB,AAAxB,CAAyB;IAClD,MAAM,KAAK,WAAW,KAAa,OAAO,KAAK,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAa,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAY,CAAC,CAAC,CAAC;IAC5J,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAa,OAAO,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAY,CAAC,CAAC,CAAC;;AAGlM,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"BusNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BusNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ConfigSetNode.d.ts b/dist/datamodel/node/data/ConfigSetNode.d.ts index 0fd3f8a..69908d9 100644 --- a/dist/datamodel/node/data/ConfigSetNode.d.ts +++ b/dist/datamodel/node/data/ConfigSetNode.d.ts @@ -2,6 +2,7 @@ import SimulinkObjectNode from '../SimulinkObjectNode.js'; import type { PropClass } from '../BaseNode.js'; import type BaseNode from '../BaseNode.js'; export default class ConfigSetNode extends SimulinkObjectNode { + Description: string; get ConfigName(): string; active?: boolean; constructor(name: string, parent: BaseNode | null, props: Record, serial: Record); diff --git a/dist/datamodel/node/data/ConfigSetNode.d.ts.map b/dist/datamodel/node/data/ConfigSetNode.d.ts.map index 51d5793..ea2d23a 100644 --- a/dist/datamodel/node/data/ConfigSetNode.d.ts.map +++ b/dist/datamodel/node/data/ConfigSetNode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConfigSetNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IAQzD,IAAI,UAAU,IAAI,MAAM,CAAsB;IAI9C,MAAM,CAAC,EAAE,OAAO,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAwD;IAC1E,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAK5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA4B;IAC5D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;IAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;CACtG"} \ No newline at end of file +{"version":3,"file":"ConfigSetNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IASzD,WAAW,EAAE,MAAM,CAAC;IAQpB,IAAI,UAAU,IAAI,MAAM,CAAsB;IAI9C,MAAM,CAAC,EAAE,OAAO,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAwD;IAC1E,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAS5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA4B;IAC5D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;IAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;CACtG"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ConfigSetNode.js b/dist/datamodel/node/data/ConfigSetNode.js index be678a7..598d9fd 100644 --- a/dist/datamodel/node/data/ConfigSetNode.js +++ b/dist/datamodel/node/data/ConfigSetNode.js @@ -2,6 +2,7 @@ import SimulinkObjectNode from '../SimulinkObjectNode.js'; import PropName from '../../prop/PropName.js'; import PropDataType from '../../prop/PropDataType.js'; +import PropDescription from '../../prop/PropDescription.js'; const CLASS_NAME = 'Simulink.ConfigSet'; export default class ConfigSetNode extends SimulinkObjectNode { // The config set's own Name property. In a .sldd the entry name and this @@ -12,18 +13,22 @@ export default class ConfigSetNode extends SimulinkObjectNode { // ConfigName stale, and since serializeValue writes ConfigName, the saved // file kept the OLD name and the entry reverted on reopen. get ConfigName() { return this.name; } - constructor(name, parent, props, serial) { super(name, parent, serial); } + constructor(name, parent, props, serial) { super(name, parent, serial); this.Description = props.Description || ''; } get icon() { return this.active ? 'check_settings' : 'settings'; } get className() { return CLASS_NAME; } // A ConfigSet has no scalar "value" — the Value column is empty and not editable. get displayValue() { return ''; } get valueEditable() { return false; } - getProperties() { return [PropName, PropDataType]; } + getProperties() { return [PropName, PropDataType, PropDescription]; } // PI layout: schema-driven "General" group (classes/configSet.json). - // UNGATED: a config set MATLAB can load has to be able to say what it is called, so the - // key is written whatever the file carried — and because it is a view of `name`, a - // renamed entry saves under the new name on both paths. - _serializedOverrides() { return { Name: this.ConfigName }; } + // Name is UNGATED: a config set MATLAB can load has to be able to say what it is called, + // so the key is written whatever the file carried — and because it is a view of `name`, a + // renamed entry saves under the new name on both paths. Description is GATED, on the same + // terms as every other Description in this cluster: a config set whose file never carried + // one must not gain an empty one on save, or opening a dictionary and saving it with no + // edits produces a diff in source control. Order follows AliasTypeNode — the identity key + // the class owns, then the gated description. + _serializedOverrides() { return Object.assign({ Name: this.ConfigName }, this._gatedProps({ Description: this.Description })); } static get defaultName() { return 'Configuration'; } static createDefault(name, parent) { const rawVal = ConfigSetNode._defaultRawVal(CLASS_NAME, { Name: name || 'Configuration' }); const props = ConfigSetNode._propsOf(rawVal); return new ConfigSetNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } static parse(rawVal, name, parent) { const props = ConfigSetNode._propsOf(rawVal); return new ConfigSetNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } diff --git a/dist/datamodel/node/data/ConfigSetNode.js.map b/dist/datamodel/node/data/ConfigSetNode.js.map index 48d4132..e06d823 100644 --- a/dist/datamodel/node/data/ConfigSetNode.js.map +++ b/dist/datamodel/node/data/ConfigSetNode.js.map @@ -1 +1 @@ -{"version":3,"file":"ConfigSetNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IACzD,yEAAyE;IACzE,sEAAsE;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,oEAAoE;IACpE,0EAA0E;IAC1E,2DAA2D;IAC3D,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAK9C,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACpJ,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,kFAAkF;IAClF,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,qEAAqE;IACrE,wFAAwF;IACxF,mFAAmF;IACnF,wDAAwD;IACxD,oBAAoB,KAA8B,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,KAAK,WAAW,KAAa,OAAO,eAAe,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAmB,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IAC3U,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAmB,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CAC3Q"} \ No newline at end of file +{"version":3,"file":"ConfigSetNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IAUzD,yEAAyE;IACzE,sEAAsE;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,oEAAoE;IACpE,0EAA0E;IAC1E,2DAA2D;IAC3D,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAK9C,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5M,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,kFAAkF;IAClF,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClF,qEAAqE;IACrE,yFAAyF;IACzF,0FAA0F;IAC1F,0FAA0F;IAC1F,0FAA0F;IAC1F,wFAAwF;IACxF,0FAA0F;IAC1F,8CAA8C;IAC9C,oBAAoB,KAA8B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzJ,MAAM,KAAK,WAAW,KAAa,OAAO,eAAe,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAmB,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IAC3U,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAmB,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CAC3Q"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ConfigSetRefNode.d.ts b/dist/datamodel/node/data/ConfigSetRefNode.d.ts index 5c89b8c..d21937d 100644 --- a/dist/datamodel/node/data/ConfigSetRefNode.d.ts +++ b/dist/datamodel/node/data/ConfigSetRefNode.d.ts @@ -3,6 +3,7 @@ import type { PropClass } from '../BaseNode.js'; import type BaseNode from '../BaseNode.js'; export default class ConfigSetRefNode extends SimulinkObjectNode { SourceName: string; + Description: string; active?: boolean; constructor(name: string, parent: BaseNode | null, props: Record, serial: Record); get icon(): string; diff --git a/dist/datamodel/node/data/ConfigSetRefNode.d.ts.map b/dist/datamodel/node/data/ConfigSetRefNode.d.ts.map index 2075f81..a0cd123 100644 --- a/dist/datamodel/node/data/ConfigSetRefNode.d.ts.map +++ b/dist/datamodel/node/data/ConfigSetRefNode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConfigSetRefNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetRefNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,kBAAkB;IAC5D,UAAU,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,OAAO,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAoF;IACtG,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAK5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA2B;IAC3D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,gBAAgB;IAC7E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,gBAAgB;CACzG"} \ No newline at end of file +{"version":3,"file":"ConfigSetRefNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetRefNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,kBAAkB;IAc5D,UAAU,EAAE,MAAM,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,OAAO,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAoF;IACtG,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAK5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA2B;IAC3D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,gBAAgB;IAC7E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,gBAAgB;CACzG"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ConfigSetRefNode.js b/dist/datamodel/node/data/ConfigSetRefNode.js index aeeb752..e933154 100644 --- a/dist/datamodel/node/data/ConfigSetRefNode.js +++ b/dist/datamodel/node/data/ConfigSetRefNode.js @@ -2,20 +2,21 @@ import SimulinkObjectNode from '../SimulinkObjectNode.js'; import PropName from '../../prop/PropName.js'; import PropDataType from '../../prop/PropDataType.js'; +import PropDescription from '../../prop/PropDescription.js'; const CLASS_NAME = 'Simulink.ConfigSetRef'; export default class ConfigSetRefNode extends SimulinkObjectNode { - constructor(name, parent, props, serial) { super(name, parent, serial); this.SourceName = props.SourceName || ''; } + constructor(name, parent, props, serial) { super(name, parent, serial); this.SourceName = props.SourceName || ''; this.Description = props.Description || ''; } get icon() { return this.active ? 'check_configurationReference' : 'configurationReference'; } get className() { return CLASS_NAME; } // A ConfigSetRef has no scalar "value" — the Value column is empty and not editable. get displayValue() { return ''; } get valueEditable() { return false; } - getProperties() { return [PropName, PropDataType]; } + getProperties() { return [PropName, PropDataType, PropDescription]; } // PI layout: schema-driven "General" group (classes/configSetRef.json). - // UNGATED, on the same terms as a ConfigSet's Name: a reference that cannot say what it - // points at is not a reference, so the key is written even as the empty string a - // half-built entry carries. - _serializedOverrides() { return { SourceName: this.SourceName }; } + // SourceName is UNGATED, on the same terms as a ConfigSet's Name: a reference that cannot + // say what it points at is not a reference, so the key is written even as the empty string + // a half-built entry carries. Description is GATED — see ConfigSetNode._serializedOverrides. + _serializedOverrides() { return Object.assign({ SourceName: this.SourceName }, this._gatedProps({ Description: this.Description })); } static get defaultName() { return 'ConfigSetRef'; } static createDefault(name, parent) { const rawVal = ConfigSetRefNode._defaultRawVal(CLASS_NAME, { SourceName: '' }); const props = ConfigSetRefNode._propsOf(rawVal); return new ConfigSetRefNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } static parse(rawVal, name, parent) { const props = ConfigSetRefNode._propsOf(rawVal); return new ConfigSetRefNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } diff --git a/dist/datamodel/node/data/ConfigSetRefNode.js.map b/dist/datamodel/node/data/ConfigSetRefNode.js.map index 3b7ba6c..0029b50 100644 --- a/dist/datamodel/node/data/ConfigSetRefNode.js.map +++ b/dist/datamodel/node/data/ConfigSetRefNode.js.map @@ -1 +1 @@ -{"version":3,"file":"ConfigSetRefNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetRefNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAC3C,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,kBAAkB;IAI5D,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAI,KAAK,CAAC,UAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1M,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtG,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,qFAAqF;IACrF,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,wEAAwE;IACxE,wFAAwF;IACxF,iFAAiF;IACjF,4BAA4B;IAC5B,oBAAoB,KAA8B,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,KAAK,WAAW,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAsB,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IACxU,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAsB,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CACpR"} \ No newline at end of file +{"version":3,"file":"ConfigSetRefNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ConfigSetRefNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAC3C,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,kBAAkB;IAoB5D,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAI,KAAK,CAAC,UAAqB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;IAClQ,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtG,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,qFAAqF;IACrF,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClF,wEAAwE;IACxE,0FAA0F;IAC1F,2FAA2F;IAC3F,6FAA6F;IAC7F,oBAAoB,KAA8B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/J,MAAM,KAAK,WAAW,KAAa,OAAO,cAAc,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAsB,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IACxU,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAsB,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CACpR"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ParameterNode.d.ts b/dist/datamodel/node/data/ParameterNode.d.ts index 1bf158d..45c5570 100644 --- a/dist/datamodel/node/data/ParameterNode.d.ts +++ b/dist/datamodel/node/data/ParameterNode.d.ts @@ -25,7 +25,6 @@ export default class ParameterNode extends DataNode { serializeXml(tagName: string, attrs: Record | undefined, indent: number): string; static get defaultName(): string; static createDefault(name: string, parent: BaseNode | null): ParameterNode; - static _normalizeMinMax(val: unknown): number | undefined; static parse(rawVal: Record, name: string, parent: BaseNode | null): ParameterNode; } //# sourceMappingURL=ParameterNode.d.ts.map \ No newline at end of file diff --git a/dist/datamodel/node/data/ParameterNode.d.ts.map b/dist/datamodel/node/data/ParameterNode.d.ts.map index 922bf00..e37e0b3 100644 --- a/dist/datamodel/node/data/ParameterNode.d.ts.map +++ b/dist/datamodel/node/data/ParameterNode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParameterNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ParameterNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAe3C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,QAAQ;IAC/C,KAAK,EAAE,OAAO,CAAC;IAKf,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBlH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAQD,IAAI,SAAS,IAAI,MAAM,CAGtB;IAQD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,YAAY,IAAI,MAAM,CAKzB;IAwCD,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAiB1D,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsB5C,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED,aAAa,IAAI,SAAS,EAAE;IAO5B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAoJ5E,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsCnD,cAAc,IAAI,OAAO;IAOzB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhG,MAAM,KAAK,WAAW,IAAI,MAAM,CAAoB;IAEpD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;IAM1E,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAKzD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;CAUtG"} \ No newline at end of file +{"version":3,"file":"ParameterNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ParameterNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAe3C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,QAAQ;IAC/C,KAAK,EAAE,OAAO,CAAC;IAKf,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBlH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAQD,IAAI,SAAS,IAAI,MAAM,CAGtB;IAQD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,YAAY,IAAI,MAAM,CAKzB;IAwCD,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAiB1D,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsB5C,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED,aAAa,IAAI,SAAS,EAAE;IAO5B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAoJ5E,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsCnD,cAAc,IAAI,OAAO;IAOzB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhG,MAAM,KAAK,WAAW,IAAI,MAAM,CAAoB;IAEpD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;IAU1E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;CAUtG"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ParameterNode.js b/dist/datamodel/node/data/ParameterNode.js index ff9a844..b7c32ac 100644 --- a/dist/datamodel/node/data/ParameterNode.js +++ b/dist/datamodel/node/data/ParameterNode.js @@ -349,12 +349,9 @@ export default class ParameterNode extends DataNode { const props = SimulinkObjectNode._propsOf(rawVal); return new ParameterNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } - static _normalizeMinMax(val) { - if (Array.isArray(val) && val.length === 0) { - return undefined; - } - return val; - } + // _normalizeMinMax is inherited from DataNode — this class had its own identical copy + // until Simulink.ValueType became the third class to need it. Static inheritance keeps + // every existing `ParameterNode._normalizeMinMax(...)` call site spelled the same. static parse(rawVal, name, parent) { const elem = rawVal._elements && rawVal._elements[0]; const props = ((elem && elem._properties) || {}); diff --git a/dist/datamodel/node/data/ParameterNode.js.map b/dist/datamodel/node/data/ParameterNode.js.map index 854be67..947e91c 100644 --- a/dist/datamodel/node/data/ParameterNode.js.map +++ b/dist/datamodel/node/data/ParameterNode.js.map @@ -1 +1 @@ -{"version":3,"file":"ParameterNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ParameterNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ParameterNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ParameterNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ValueTypeNode.d.ts b/dist/datamodel/node/data/ValueTypeNode.d.ts index f079819..555603e 100644 --- a/dist/datamodel/node/data/ValueTypeNode.d.ts +++ b/dist/datamodel/node/data/ValueTypeNode.d.ts @@ -1,9 +1,16 @@ import SimulinkObjectNode from '../SimulinkObjectNode.js'; -import type { PropClass } from '../BaseNode.js'; +import type { PropClass, PIGroupDef } from '../BaseNode.js'; import type BaseNode from '../BaseNode.js'; +import type { SetPropertyResult } from '../DataNode.js'; export default class ValueTypeNode extends SimulinkObjectNode { Description: string; DataType: string; + Dimensions: unknown; + Complexity: string; + DimensionsMode: string; + Min: number | undefined; + Max: number | undefined; + Unit: string; constructor(name: string, parent: BaseNode | null, props: Record, serial: Record); get icon(): string; get className(): string; @@ -11,6 +18,8 @@ export default class ValueTypeNode extends SimulinkObjectNode { get displayValue(): string; get valueEditable(): boolean; getProperties(): PropClass[]; + getPILayout(): PIGroupDef[]; + setProperty(propName: string, stringValue: string): true | SetPropertyResult; _serializedOverrides(): Record; static get defaultName(): string; static createDefault(name: string, parent: BaseNode | null): ValueTypeNode; diff --git a/dist/datamodel/node/data/ValueTypeNode.d.ts.map b/dist/datamodel/node/data/ValueTypeNode.d.ts.map index 7cb5917..35d1ad6 100644 --- a/dist/datamodel/node/data/ValueTypeNode.d.ts.map +++ b/dist/datamodel/node/data/ValueTypeNode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ValueTypeNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ValueTypeNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAwD;IAC1E,IAAI,SAAS,IAAI,MAAM,CAAuB;IAG9C,IAAI,QAAQ,IAAI,MAAM,CAA0B;IAGhD,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAM5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAwB;IACxD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;IAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;CACtG"} \ No newline at end of file +{"version":3,"file":"ValueTypeNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ValueTypeNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAaxD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IAYjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;gBACD,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA2BlH,IAAI,IAAI,IAAI,MAAM,CAAwD;IAC1E,IAAI,SAAS,IAAI,MAAM,CAAuB;IAG9C,IAAI,QAAQ,IAAI,MAAM,CAA0B;IAGhD,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAe5B,WAAW,IAAI,UAAU,EAAE;IAc3B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAgB5E,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAgB/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAwB;IACxD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;IAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa;CACtG"} \ No newline at end of file diff --git a/dist/datamodel/node/data/ValueTypeNode.js b/dist/datamodel/node/data/ValueTypeNode.js index 93124a0..1a994b2 100644 --- a/dist/datamodel/node/data/ValueTypeNode.js +++ b/dist/datamodel/node/data/ValueTypeNode.js @@ -3,9 +3,43 @@ import SimulinkObjectNode from '../SimulinkObjectNode.js'; import PropName from '../../prop/PropName.js'; import PropDataType from '../../prop/PropDataType.js'; import PropDescription from '../../prop/PropDescription.js'; +import PropKind from '../../prop/PropKind.js'; +import PropClassAtom from '../../prop/PropClass.js'; +import PropMin from '../../prop/PropMin.js'; +import PropMax from '../../prop/PropMax.js'; +import PropUnit from '../../prop/PropUnit.js'; +import PropComplexity from '../../prop/PropComplexity.js'; +import PropDimensions from '../../prop/PropDimensions.js'; +import PropDimensionsMode from '../../prop/PropDimensionsMode.js'; const CLASS_NAME = 'Simulink.ValueType'; export default class ValueTypeNode extends SimulinkObjectNode { - constructor(name, parent, props, serial) { super(name, parent, serial); this.Description = props.Description || ''; this.DataType = props.DataType || 'double'; } + constructor(name, parent, props, serial) { + super(name, parent, serial); + this.Description = props.Description || ''; + this.DataType = props.DataType || 'double'; + this.Dimensions = props.Dimensions; + // MATLAB's defaults for a ValueType that declares neither (probed on a live object): + // 'real' and 'Fixed' — NOT the 'auto' a Simulink.Signal defaults to, which is why + // schema/classes/valueType.json overrides the shared dimensionsMode descriptor's + // default per class rather than changing it there. That JSON default feeds the TABLE + // column (via schemaColumns) while this fallback feeds the Property Inspector, so both + // have to say Fixed; valueTypeValueProps.test.ts asserts the two agree rather than + // asserting each on its own. Display values only: the gates in _serializedOverrides + // compare against the same literals, so a ValueType the file left silent saves silent. + this.Complexity = props.Complexity || 'real'; + this.DimensionsMode = props.DimensionsMode || 'Fixed'; + // No `*_internal` alias reading, unlike BusElementNode: a probe wrote a ValueType with + // every property non-default and the dictionary came back with flat keys only. That + // aliasing is specific to bus elements in SLX XML, so looking for it here would be + // inventing a spelling MATLAB does not use. + this.Min = ValueTypeNode._normalizeMinMax(props.Min); + this.Max = ValueTypeNode._normalizeMinMax(props.Max); + // `Unit` FIRST, the opposite order from SignalNode/BusElementNode: MATLAB serializes a + // Simulink.ValueType's unit as `Unit` and a Simulink.Parameter's or Signal's as + // `DocUnits` (both measured off dictionaries MATLAB wrote). Both spellings are read so + // a file written either way displays, but this class's own canonical key wins. + this.Unit = props.Unit || props.DocUnits || ''; + } get icon() { return this.isDerived ? 'typeSignalUI' : 'wsValue'; } get className() { return CLASS_NAME; } // The DataType column shows the ValueType's underlying DataType property @@ -15,15 +49,83 @@ export default class ValueTypeNode extends SimulinkObjectNode { // editable (the DataType is surfaced in the Data Type column). get displayValue() { return ''; } get valueEditable() { return false; } - getProperties() { return [PropName, PropDataType, PropDescription]; } - // PI layout is schema-driven (schema/classes/valueType.json). - // DataType spells its own gate rather than going through _gatedProps: 'double' is what an - // ABSENT DataType means, and it is also truthy, so the shared truthiness test would write - // that default back into every ValueType a dictionary never declared one for. Compared - // against the default instead, only a type the file stated or the model changed is saved. - _serializedOverrides() { const sp = this.serial._properties; const overrides = {}; if ('DataType' in sp || this.DataType !== 'double') { - overrides.DataType = this.DataType; - } return Object.assign(overrides, this._gatedProps({ Description: this.Description })); } + getProperties() { return [PropName, PropDataType, PropDimensions, PropComplexity, PropDimensionsMode, PropMin, PropMax, PropUnit, PropDescription]; } + // Override-driven rather than schema-driven, even though schema/classes/valueType.json + // carries a layout with exactly these groups and this order — the JSON stays, because it + // is what schemaColumns reads for the table's dimensionsMode column, and the two are + // pinned against each other by test/valueTypeValueProps.test.ts. + // + // The reason is that `complexity` and `dimensionsMode` are NOT in schemaBridge's + // ATOM_BY_KEY, so the schema route resolves them to the raw descriptor, whose readValue + // hydrates from `serial._properties`. That is right for a read-only projection and wrong + // the moment the property becomes an editable node field: an edit lands on the field, the + // table re-reads the field and updates, and the PI keeps reading the untouched source bag + // — the same value showing two different things in two panes. (trySetSchemaProperty + // cannot close that gap: both descriptors are `editor: 'label'`, so it declines them and + // nothing writes back into the bag.) Going through the atoms makes both panes read the + // one field. BusElementNode is override-driven for the same reason. + getPILayout() { + return [ + { group: 'General', items: [PropName, PropDataType, PropKind, PropClassAtom] }, + { group: 'Value Properties', items: [ + PropDimensions, PropComplexity, + PropMin, PropMax, PropUnit, + PropDimensionsMode, PropDescription, + ] }, + ]; + } + // Min/Max take the shared, MATLAB-verified "finite real double scalar" validator rather + // than DataNode's generic numeric path, which wrongly accepts Inf/NaN; the two enums take + // the shared enumeral check, which reads its legal set from the prop atom's readOptions so + // the values accepted here and the values the dropdown offers cannot diverge. + setProperty(propName, stringValue) { + if (propName === 'Min' || propName === 'Max') { + return this._setMinMax(propName, stringValue); + } + const notAnEnumeral = this._rejectUnknownEnumeral(propName, stringValue); + if (notAnEnumeral) { + return notAnEnumeral; + } + return super.setProperty(propName, stringValue); + } + // Keys in MATLAB's own order (alphabetical, as it writes them), so a ValueType that gains + // a key still reads the way a MATLAB-written one does. Every gate here says the same + // thing: write the key if the FILE carried it, or if the live value is something other + // than what its absence means. DataType and the two enums spell that out against their + // default rather than going through _gatedProps, because each default is truthy and the + // shared truthiness test would write it back into every ValueType a dictionary never + // declared one for; the enums also need `this.X &&` so a CLEAR (which stores '') reads as + // absence and not as a value. Dimensions is deliberately absent: it is read-only, so + // there is no live value to write over the bag both paths already merge the file's own + // keys from. + _serializedOverrides() { + const sp = this.serial._properties; + const unitKey = 'DocUnits' in sp ? 'DocUnits' : 'Unit'; + const overrides = {}; + if ('Complexity' in sp || (this.Complexity && this.Complexity !== 'real')) { + overrides.Complexity = this.Complexity; + } + if ('DataType' in sp || this.DataType !== 'double') { + overrides.DataType = this.DataType; + } + Object.assign(overrides, this._gatedProps({ Description: this.Description })); + if ('DimensionsMode' in sp || (this.DimensionsMode && this.DimensionsMode !== 'Fixed')) { + overrides.DimensionsMode = this.DimensionsMode; + } + // A cleared bound goes out as `[]` — MATLAB's own empty — and not as the value the + // file held there, so emptying the Minimum box does not silently save the old number + // back. See BusElementNode._applyElementOverrides for the full note. + if ('Max' in sp || this.Max !== undefined) { + overrides.Max = this.Max !== undefined ? this.Max : []; + } + if ('Min' in sp || this.Min !== undefined) { + overrides.Min = this.Min !== undefined ? this.Min : []; + } + if (unitKey in sp || this.Unit) { + overrides[unitKey] = this.Unit; + } + return overrides; + } static get defaultName() { return 'ValueType'; } static createDefault(name, parent) { const rawVal = ValueTypeNode._defaultRawVal(CLASS_NAME); const props = ValueTypeNode._propsOf(rawVal); return new ValueTypeNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } static parse(rawVal, name, parent) { const props = ValueTypeNode._propsOf(rawVal); return new ValueTypeNode(name, parent, props, { _rawVal: rawVal, _properties: props }); } diff --git a/dist/datamodel/node/data/ValueTypeNode.js.map b/dist/datamodel/node/data/ValueTypeNode.js.map index 5e0d33f..3bb152f 100644 --- a/dist/datamodel/node/data/ValueTypeNode.js.map +++ b/dist/datamodel/node/data/ValueTypeNode.js.map @@ -1 +1 @@ -{"version":3,"file":"ValueTypeNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ValueTypeNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,kBAAkB;IAGzD,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAI,KAAK,CAAC,QAAmB,IAAI,QAAQ,CAAC,CAAC,CAAC;IACpQ,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClF,8DAA8D;IAC9D,0FAA0F;IAC1F,0FAA0F;IAC1F,uFAAuF;IACvF,0FAA0F;IAC1F,oBAAoB,KAA8B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAsC,CAAC,CAAC,MAAM,SAAS,GAA4B,EAAE,CAAC,CAAC,IAAI,UAAU,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAAC,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnV,MAAM,KAAK,WAAW,KAAa,OAAO,WAAW,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAmB,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IACxS,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAmB,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CAC3Q"} \ No newline at end of file +{"version":3,"file":"ValueTypeNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ValueTypeNode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/schema/classes/breakpoint.json b/dist/datamodel/schema/classes/breakpoint.json index 5818cc7..a36d411 100644 --- a/dist/datamodel/schema/classes/breakpoint.json +++ b/dist/datamodel/schema/classes/breakpoint.json @@ -1,8 +1,16 @@ { "Simulink.Breakpoint": { - "props": [], + "props": [ + { "$ref": "storageClass", "options": ["Auto", "Model default", "ExportedGlobal", "ImportedExtern", "ImportedExternPointer", "BitField", "Const", "Volatile", "ConstVolatile", "Define", "ImportedDefine", "ExportToFile", "ImportFromFile", "FileScope", "Struct", "GetSet", "CompilerFlag"] }, + "structTypeName", + "structTypeDataScope", + "structTypeHeaderFile", + "supportTunableSize" + ], "layout": [ - { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "description"] } + { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "description"] }, + { "group": "Code Generation", "items": ["storageClass", "structTypeName", "structTypeDataScope", "structTypeHeaderFile"] }, + { "group": "Advanced", "items": ["supportTunableSize"] } ] } } diff --git a/dist/datamodel/schema/classes/configSet.json b/dist/datamodel/schema/classes/configSet.json index ceb0129..a929a65 100644 --- a/dist/datamodel/schema/classes/configSet.json +++ b/dist/datamodel/schema/classes/configSet.json @@ -2,7 +2,7 @@ "Simulink.ConfigSet": { "props": [], "layout": [ - { "group": "General", "items": ["name", "value", "dataType", "kind", "class"] } + { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "description"] } ] } } diff --git a/dist/datamodel/schema/classes/configSetRef.json b/dist/datamodel/schema/classes/configSetRef.json index 4239262..8f92a3b 100644 --- a/dist/datamodel/schema/classes/configSetRef.json +++ b/dist/datamodel/schema/classes/configSetRef.json @@ -1,8 +1,8 @@ { "Simulink.ConfigSetRef": { - "props": [], + "props": ["sourceName"], "layout": [ - { "group": "General", "items": ["name", "value", "dataType", "kind", "class"] } + { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "sourceName", "description"] } ] } } diff --git a/dist/datamodel/schema/classes/enumType.json b/dist/datamodel/schema/classes/enumType.json index a1c12d7..bec452d 100644 --- a/dist/datamodel/schema/classes/enumType.json +++ b/dist/datamodel/schema/classes/enumType.json @@ -5,12 +5,13 @@ "storageType", "dataScope", "headerFile", - "addClassNameToEnumNames" + "addClassNameToEnumNames", + "isTunableInCode" ], "layout": [ { "group": "General", "items": ["name", "kind", "class"] }, { "group": "Value Properties", "items": ["enumValue", "storageType", "description"] }, - { "group": "Code Generation", "items": ["dataScope", "headerFile", "addClassNameToEnumNames"] } + { "group": "Code Generation", "items": ["dataScope", "headerFile", "addClassNameToEnumNames", "isTunableInCode"] } ] } } diff --git a/dist/datamodel/schema/classes/lookupTable.json b/dist/datamodel/schema/classes/lookupTable.json index 32d3a64..2ec50ec 100644 --- a/dist/datamodel/schema/classes/lookupTable.json +++ b/dist/datamodel/schema/classes/lookupTable.json @@ -1,9 +1,19 @@ { "Simulink.LookupTable": { - "props": ["breakpointsSpecification"], + "props": [ + "breakpointsSpecification", + { "$ref": "storageClass", "options": ["Auto", "Model default", "ExportedGlobal", "ImportedExtern", "ImportedExternPointer", "BitField", "Const", "Volatile", "ConstVolatile", "Define", "ImportedDefine", "ExportToFile", "ImportFromFile", "FileScope", "Struct", "GetSet", "CompilerFlag"] }, + "structTypeName", + "structTypeDataScope", + "structTypeHeaderFile", + "allowDifferentTableBpSizes", + "supportTunableSize" + ], "layout": [ { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "description"] }, - { "group": "Value Properties", "items": ["breakpointsSpecification"] } + { "group": "Value Properties", "items": ["breakpointsSpecification"] }, + { "group": "Code Generation", "items": ["storageClass", "structTypeName", "structTypeDataScope", "structTypeHeaderFile"] }, + { "group": "Advanced", "items": ["allowDifferentTableBpSizes", "supportTunableSize"] } ] } } diff --git a/dist/datamodel/schema/classes/valueType.json b/dist/datamodel/schema/classes/valueType.json index 415c2c2..8e4b49a 100644 --- a/dist/datamodel/schema/classes/valueType.json +++ b/dist/datamodel/schema/classes/valueType.json @@ -4,11 +4,11 @@ "dataType", "description", "dimensions", - "dimensionsMode", + { "$ref": "dimensionsMode", "default": "Fixed" }, "complexity", "min", "max", - "unit" + { "$ref": "unit", "sourcePath": "Unit" } ], "layout": [ { "group": "General", "items": ["name", "dataType", "kind", "class"] }, diff --git a/dist/datamodel/schema/props/codeGen.json b/dist/datamodel/schema/props/codeGen.json index d91a927..fa8bee5 100644 --- a/dist/datamodel/schema/props/codeGen.json +++ b/dist/datamodel/schema/props/codeGen.json @@ -11,5 +11,9 @@ "getFunction": { "label": "Get Function", "sourcePath": "CoderInfo.CustomAttributes.GetFunction", "type": "string", "editor": "label", "default": "" }, "setFunction": { "label": "Set Function", "sourcePath": "CoderInfo.CustomAttributes.SetFunction", "type": "string", "editor": "label", "default": "" }, "preserveElementDimensions": { "label": "Preserve Element Dimensions", "sourcePath": "PreserveElementDimensions", "type": "bool", "editor": "label", "default": "" }, - "addClassNameToEnumNames": { "label": "Add Class Name To Enum Names", "sourcePath": "AddClassNameToEnumNames", "type": "bool", "editor": "label", "default": "" } + "addClassNameToEnumNames": { "label": "Add Class Name To Enum Names", "sourcePath": "AddClassNameToEnumNames", "type": "bool", "editor": "label", "default": "" }, + "isTunableInCode": { "label": "Is Tunable In Code", "sourcePath": "IsTunableInCode", "type": "bool", "editor": "label", "default": "" }, + "structTypeName": { "label": "Name", "sourcePath": "StructTypeInfo.Name", "type": "string", "editor": "label", "default": "" }, + "structTypeDataScope": { "label": "Data Scope", "sourcePath": "StructTypeInfo.DataScope", "type": "string", "editor": "label", "default": "Auto" }, + "structTypeHeaderFile": { "label": "Header File", "sourcePath": "StructTypeInfo.HeaderFileName", "type": "string", "editor": "label", "default": "" } } diff --git a/dist/datamodel/schema/props/core.json b/dist/datamodel/schema/props/core.json index 96f29ea..5493015 100644 --- a/dist/datamodel/schema/props/core.json +++ b/dist/datamodel/schema/props/core.json @@ -1,5 +1,6 @@ { "value": { "label": "Value", "sourcePath": "Value", "type": "any", "editor": "text" }, "dataType": { "label": "Data Type", "sourcePath": "DataType", "type": "string", "editor": "label", "default": "" }, - "description": { "label": "Description", "sourcePath": "Description", "type": "string", "editor": "textArea", "default": "" } + "description": { "label": "Description", "sourcePath": "Description", "type": "string", "editor": "textArea", "default": "" }, + "sourceName": { "label": "Source Name", "sourcePath": "SourceName", "type": "string", "editor": "label", "default": "" } } diff --git a/dist/datamodel/schema/props/dataObject.json b/dist/datamodel/schema/props/dataObject.json index 9527ccb..c129b6d 100644 --- a/dist/datamodel/schema/props/dataObject.json +++ b/dist/datamodel/schema/props/dataObject.json @@ -11,5 +11,7 @@ "sampleTime": { "label": "Sample Time", "sourcePath": "SampleTime", "type": "any", "editor": "label", "default": "" }, "samplingMode": { "label": "Sampling Mode", "sourcePath": "SamplingMode", "type": "string", "editor": "label", "default": "" }, "breakpointsSpecification": { "label": "Breakpoints Specification", "sourcePath": "BreakpointsSpecification", "type": "string", "editor": "label", "default": "Explicit values" }, + "supportTunableSize": { "label": "Support Tunable Size", "sourcePath": "SupportTunableSize", "type": "bool", "editor": "label", "default": "" }, + "allowDifferentTableBpSizes": { "label": "Allow Multiple Instances Of Type To Have Different Table Breakpoint Sizes", "sourcePath": "AllowMultipleInstancesOfTypeToHaveDifferentTableBreakpointSizes", "type": "bool", "editor": "label", "default": "" }, "bank": { "label": "Bank", "sourcePath": "Bank", "type": "any", "editor": "label", "default": "" } } diff --git a/package.json b/package.json index ce6540d..e33ec19 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "data-explorer-core", - "version": "1.21.0", + "version": "1.22.0", "description": "Parser, data model, and node schema for Simulink data-dictionary, model, MAT-file, and project files. Presentation-independent; embeddable in-process.", "license": "BSD-3-Clause", "type": "module", diff --git a/src/datamodel/node/DataNode.ts b/src/datamodel/node/DataNode.ts index 94d325b..8d1ce21 100644 --- a/src/datamodel/node/DataNode.ts +++ b/src/datamodel/node/DataNode.ts @@ -440,6 +440,71 @@ export default class DataNode extends BaseNode { return true; } + // MATLAB's empty bound is `[]`, and `[]` is truthy: left as it arrives it reaches + // the table as the text `[]` and the writers as a real value, so a class holding a + // bound as a node field normalizes it to `undefined` on the way in — the same + // "no bound" _setMinMax above stores for a cleared cell. Shared rather than + // per-class so the two ends of that round trip cannot disagree about what an + // absent bound is: ParameterNode, BusElementNode and ValueTypeNode all call it, and + // the first two each carried an identical private copy until the third needed one. + static _normalizeMinMax(val: unknown): number | undefined { + if (Array.isArray(val) && val.length === 0) { return undefined; } + return val as number | undefined; + } + + // Refuse a value MATLAB's enum does not contain, for any property surfaced as a + // dropdown (Complexity, DimensionsMode). Without this the edit reaches the generic + // branch for a string field above, which stores whatever text arrived: the table's + // own combobox can only offer legal choices, but the Property Inspector has no + // combobox and seeds a plain text box, so 'Real' or 'fixed' would be written into a + // file MATLAB then refuses to load — the failure an unlock has to rule out before + // it is an unlock at all. + // + // The legal set is read off the prop atom's readOptions — the SAME call the + // cell's dropdown is built from (BaseNode.getPropInfo) — rather than restated + // here. Two copies of an enum is how a UI ends up offering two choices and + // accepting three. + // + // The wording is MATLAB's own, from a probe of the live object (recorded in + // Simulink.BusElement.md): assigning anything else raises "There is no + // enumerated value named 'X'." Note this is MATLAB's message for a rejected + // ASSIGNMENT; that the values we do accept produce a file MATLAB reopens with + // the same values is the live tier's claim to make, and it has not been run + // here (test/parity/matlab/writeback.live.test.ts, gated on DEX_MATLAB_CMD). + // + // Lives here beside _setMinMax, rather than on BusElementNode where it started with + // one caller, because Simulink.ValueType's Complexity/DimensionsMode are the same + // two closed enums and need the same rule. Copying it would have copied the + // ''-is-a-CLEAR licence below, which is precisely the kind of subtlety that rots out + // of sync between two copies. + _rejectUnknownEnumeral(propName: string, stringValue: string): SetPropertyResult | null { + const prop = this._propFor(propName); + if (!prop || prop.editor !== 'select' || !prop.readOptions) { + return null; + } + // The empty string is a CLEAR, not an illegal enumeral — the same licence + // _setMinMax takes for '' and '[]'. It has to be, because it is what a user + // emptying the cell submits, and because DataModel.editProperty captures the + // prior value for UNDO: refusing '' would leave the undo of a clear silently + // unapplied. Storing '' restores absence rather than writing an illegal value, + // and every write-back gate for these props reads '' as absence too, so the + // object goes back out exactly as it came in. + if (stringValue === '') { + return null; + } + const options = prop.readOptions(this); + if (options.length === 0 || options.indexOf(stringValue) >= 0) { + return null; + } + const current = (this as unknown as Record)[prop.nodeProperty || prop.key]; + return { + error: true, + reason: "There is no enumerated value named '" + stringValue + "'.", + invalidValue: stringValue, + validValue: typeof current === 'string' ? current : '', + }; + } + // No structural editing by default. The classes that DO manage children (bus, // enum type, struct, MATLAB array/cell/string) override both, delegating to // childEdit.ts. Returning null here — rather than inheriting a wrapper around diff --git a/src/datamodel/node/data/BusNode.ts b/src/datamodel/node/data/BusNode.ts index ce042a0..ae75c70 100644 --- a/src/datamodel/node/data/BusNode.ts +++ b/src/datamodel/node/data/BusNode.ts @@ -21,11 +21,11 @@ export class BusElementNode extends BaseBusElementNode { // Verified against MATLAB (Simulink.BusElement): these are real element // properties that were not surfaced before, so their columns read empty. // Complexity {real|complex} and DimensionsMode {Fixed|Variable} are closed - // enums and are now EDITABLE selects — validated against the enum below and - // written back in _applyElementOverrides. Dimensions is a positive double - // vector with a symbolic-char alternative and stays read-only: nothing in the - // source claims its constraint was worked out, and an unlock is worth only as - // much as the rule that refuses a bad value. + // enums and are now EDITABLE selects — validated by + // DataNode._rejectUnknownEnumeral and written back in _applyElementOverrides. + // Dimensions is a positive double vector with a symbolic-char alternative and + // stays read-only: nothing in the source claims its constraint was worked out, + // and an unlock is worth only as much as the rule that refuses a bad value. Complexity: string; Dimensions: unknown; DimensionsMode: string; @@ -45,14 +45,16 @@ export class BusElementNode extends BaseBusElementNode { // DataType); an unset type means the Simulink default of 'double'. const rawDataType = props.DataType_internal !== undefined ? props.DataType_internal : props.DataType; this.DataType = (rawDataType as string) || 'double'; - this.Complexity = (props.Complexity as string) || ''; + // MATLAB's own defaults for an element that declares neither (probed on a live + // Simulink.BusElement): Complexity 'real', DimensionsMode 'Fixed' — the same pair + // Simulink.ValueType defaults to, and NOT the 'auto' a Simulink.Signal uses. These + // are DISPLAY values only: the write-back gates in _applyElementOverrides compare + // against the same two literals, so an element the file left silent still saves + // silent. Before this the fallback was '', which showed blanks where MATLAB shows + // a value. + this.Complexity = (props.Complexity as string) || 'real'; this.Dimensions = props.Dimensions; - this.DimensionsMode = (props.DimensionsMode as string) || ''; - } - - static _normalizeMinMax(val: unknown): number | undefined { - if (Array.isArray(val) && val.length === 0) { return undefined; } - return val as number | undefined; + this.DimensionsMode = (props.DimensionsMode as string) || 'Fixed'; } // A StructType's elements use the struct-element icon; a derived @@ -108,54 +110,6 @@ export class BusElementNode extends BaseBusElementNode { return super.setProperty(propName, stringValue); } - // Refuse a value MATLAB's enum does not contain, for either element property - // surfaced as a dropdown (Complexity, DimensionsMode). Without this the edit - // reaches DataNode's generic branch for a string field, which stores whatever - // text arrived: the table's own combobox can only offer legal choices, but the - // Property Inspector has no combobox and seeds a plain text box, so 'Real' or - // 'fixed' would be written into a file MATLAB then refuses to load — the - // failure an unlock has to rule out before it is an unlock at all. - // - // The legal set is read off the prop atom's readOptions — the SAME call the - // cell's dropdown is built from (BaseNode.getPropInfo) — rather than restated - // here. Two copies of an enum is how a UI ends up offering two choices and - // accepting three. - // - // The wording is MATLAB's own, from a probe of the live object (recorded in - // Simulink.BusElement.md): assigning anything else raises "There is no - // enumerated value named 'X'." Note this is MATLAB's message for a rejected - // ASSIGNMENT; that the values we do accept produce a file MATLAB reopens with - // the same values is the live tier's claim to make, and it has not been run - // here (test/parity/matlab/writeback.live.test.ts, gated on DEX_MATLAB_CMD). - _rejectUnknownEnumeral(propName: string, stringValue: string): SetPropertyResult | null { - const prop = this._propFor(propName); - if (!prop || prop.editor !== 'select' || !prop.readOptions) { - return null; - } - // The empty string is a CLEAR, not an illegal enumeral — the same licence - // _setMinMax takes for '' and '[]'. It has to be, because it is what UNDO - // submits: an element that never carried the property reads as '' (see the - // constructor's `|| ''`), DataModel.editProperty captures that as the prior - // value, and refusing it would leave the undo of a perfectly good edit - // silently unapplied. Storing '' restores absence rather than writing an - // illegal value — _applyElementOverrides then omits the key entirely, so the - // element goes back out exactly as it came in. - if (stringValue === '') { - return null; - } - const options = prop.readOptions(this); - if (options.length === 0 || options.indexOf(stringValue) >= 0) { - return null; - } - const current = (this as unknown as Record)[prop.nodeProperty || prop.key]; - return { - error: true, - reason: "There is no enumerated value named '" + stringValue + "'.", - invalidValue: stringValue, - validValue: typeof current === 'string' ? current : '', - }; - } - _applyElementOverrides(props: Record): void { const sp = this.serial._properties as Record; const minKey = 'Min_internal' in sp ? 'Min_internal' : 'Min'; @@ -183,10 +137,15 @@ export class BusElementNode extends BaseBusElementNode { // `

complex

` or as its JSON member); // what was missing was the copy from the node field into the bag, so the // serializer faithfully re-emitted the value parsed from the file. - // Guarded the same way as Description above so an element that never - // carried the key does not gain one on a clean round trip. - if ('Complexity' in sp || this.Complexity) { props.Complexity = this.Complexity; } - if ('DimensionsMode' in sp || this.DimensionsMode) { props.DimensionsMode = this.DimensionsMode; } + // Guarded like DataType above — against the DEFAULT, not on truthiness — so an + // element that never carried the key does not gain one on a clean round trip. + // Truthiness was enough only while an absent enum read as ''; now that it reads as + // MATLAB's default the same test is always true, and every untyped element in every + // dictionary would come back with both keys added. The extra `this.X &&` covers the + // CLEAR: emptying the cell stores '' (see DataNode._rejectUnknownEnumeral), which is + // not a value either property has, so it means absence here too. + if ('Complexity' in sp || (this.Complexity && this.Complexity !== 'real')) { props.Complexity = this.Complexity; } + if ('DimensionsMode' in sp || (this.DimensionsMode && this.DimensionsMode !== 'Fixed')) { props.DimensionsMode = this.DimensionsMode; } if ('Description' in sp || this.Description) { props.Description = this.Description; } } } diff --git a/src/datamodel/node/data/ConfigSetNode.ts b/src/datamodel/node/data/ConfigSetNode.ts index 2aa7630..286708a 100644 --- a/src/datamodel/node/data/ConfigSetNode.ts +++ b/src/datamodel/node/data/ConfigSetNode.ts @@ -4,8 +4,18 @@ import type { PropClass } from '../BaseNode.js'; import type BaseNode from '../BaseNode.js'; import PropName from '../../prop/PropName.js'; import PropDataType from '../../prop/PropDataType.js'; +import PropDescription from '../../prop/PropDescription.js'; const CLASS_NAME = 'Simulink.ConfigSet'; export default class ConfigSetNode extends SimulinkObjectNode { + // A real top-level property of a MATLAB config set, and the ONLY one of the four its + // Property Inspector shows that a file reliably carries — see configSetSchemaProps.test.ts + // for why StartTime/StopTime/SystemTargetFile/SourceLocation are deliberately unmodeled. + // The field is not optional decoration: `description` is a key in schemaBridge's + // ATOM_BY_KEY, so the layout row reads THIS field rather than the schema descriptor's + // sourcePath. Until it existed the row rendered blank and, because toPIObject adds every + // layout key to shownKeys, the raw Description was suppressed from the "Other" group as + // well — a Description in the file, unreachable in the UI. + Description: string; // The config set's own Name property. In a .sldd the entry name and this // property are the same string — both parse paths build the node with // _properties.Name equal to the entry name — so this is a view of `name` @@ -18,18 +28,22 @@ export default class ConfigSetNode extends SimulinkObjectNode { // parser (which knows the active state); undefined on the SLDD path, where // it is treated as inactive — the SLDD icon is unchanged. active?: boolean; - constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) { super(name, parent, serial); } + constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) { super(name, parent, serial); this.Description = (props.Description as string) || ''; } get icon(): string { return this.active ? 'check_settings' : 'settings'; } get className(): string { return CLASS_NAME; } // A ConfigSet has no scalar "value" — the Value column is empty and not editable. get displayValue(): string { return ''; } get valueEditable(): boolean { return false; } - getProperties(): PropClass[] { return [PropName, PropDataType]; } + getProperties(): PropClass[] { return [PropName, PropDataType, PropDescription]; } // PI layout: schema-driven "General" group (classes/configSet.json). - // UNGATED: a config set MATLAB can load has to be able to say what it is called, so the - // key is written whatever the file carried — and because it is a view of `name`, a - // renamed entry saves under the new name on both paths. - _serializedOverrides(): Record { return { Name: this.ConfigName }; } + // Name is UNGATED: a config set MATLAB can load has to be able to say what it is called, + // so the key is written whatever the file carried — and because it is a view of `name`, a + // renamed entry saves under the new name on both paths. Description is GATED, on the same + // terms as every other Description in this cluster: a config set whose file never carried + // one must not gain an empty one on save, or opening a dictionary and saving it with no + // edits produces a diff in source control. Order follows AliasTypeNode — the identity key + // the class owns, then the gated description. + _serializedOverrides(): Record { return Object.assign({ Name: this.ConfigName }, this._gatedProps({ Description: this.Description })); } static get defaultName(): string { return 'Configuration'; } static createDefault(name: string, parent: BaseNode | null): ConfigSetNode { const rawVal = ConfigSetNode._defaultRawVal(CLASS_NAME, { Name: name || 'Configuration' }); const props = ConfigSetNode._propsOf(rawVal); return new ConfigSetNode(name, parent, props, { _rawVal: rawVal, _properties: props } as Record); } static parse(rawVal: Record, name: string, parent: BaseNode | null): ConfigSetNode { const props = ConfigSetNode._propsOf(rawVal); return new ConfigSetNode(name, parent, props, { _rawVal: rawVal, _properties: props } as Record); } diff --git a/src/datamodel/node/data/ConfigSetRefNode.ts b/src/datamodel/node/data/ConfigSetRefNode.ts index 82d9db6..dc7d9d2 100644 --- a/src/datamodel/node/data/ConfigSetRefNode.ts +++ b/src/datamodel/node/data/ConfigSetRefNode.ts @@ -4,23 +4,40 @@ import type { PropClass } from '../BaseNode.js'; import type BaseNode from '../BaseNode.js'; import PropName from '../../prop/PropName.js'; import PropDataType from '../../prop/PropDataType.js'; +import PropDescription from '../../prop/PropDescription.js'; const CLASS_NAME = 'Simulink.ConfigSetRef'; export default class ConfigSetRefNode extends SimulinkObjectNode { + // The reference's whole content: the name of the config set it points AT. Stored and + // saved from the start; it now also has a PI row, through the schema descriptor + // `sourceName` (classes/configSetRef.json) rather than through a node atom — which is + // sound only because the row is read-only. The descriptor hydrates + // `serial._properties.SourceName`, so an EDIT would land on this field and leave the row + // showing the untouched bag; if this ever becomes editable it has to move to an atom, for + // the reason ValueTypeNode.getPILayout records at length. + // + // One fixed sourcePath is enough despite the era-varying spelling (`SourceName` in + // R2021a+, `WSVarName` in R2018a and earlier) because the normalization happens upstream: + // SlxParser reads either into ParsedConfigSet.sourceName and + // ModelSectionNode.addConfigSetEntry writes it back as `props.SourceName`, so by the time + // a node sees it the key is always spelled one way. SourceName: string; + // See ConfigSetNode.Description — the same field for the same reason (the `description` + // layout key resolves to an atom that reads the node field, not the schema sourcePath). + Description: string; // See ConfigSetNode.active — set by the SLX parser only. active?: boolean; - constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) { super(name, parent, serial); this.SourceName = (props.SourceName as string) || ''; } + constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) { super(name, parent, serial); this.SourceName = (props.SourceName as string) || ''; this.Description = (props.Description as string) || ''; } get icon(): string { return this.active ? 'check_configurationReference' : 'configurationReference'; } get className(): string { return CLASS_NAME; } // A ConfigSetRef has no scalar "value" — the Value column is empty and not editable. get displayValue(): string { return ''; } get valueEditable(): boolean { return false; } - getProperties(): PropClass[] { return [PropName, PropDataType]; } + getProperties(): PropClass[] { return [PropName, PropDataType, PropDescription]; } // PI layout: schema-driven "General" group (classes/configSetRef.json). - // UNGATED, on the same terms as a ConfigSet's Name: a reference that cannot say what it - // points at is not a reference, so the key is written even as the empty string a - // half-built entry carries. - _serializedOverrides(): Record { return { SourceName: this.SourceName }; } + // SourceName is UNGATED, on the same terms as a ConfigSet's Name: a reference that cannot + // say what it points at is not a reference, so the key is written even as the empty string + // a half-built entry carries. Description is GATED — see ConfigSetNode._serializedOverrides. + _serializedOverrides(): Record { return Object.assign({ SourceName: this.SourceName }, this._gatedProps({ Description: this.Description })); } static get defaultName(): string { return 'ConfigSetRef'; } static createDefault(name: string, parent: BaseNode | null): ConfigSetRefNode { const rawVal = ConfigSetRefNode._defaultRawVal(CLASS_NAME, { SourceName: '' }); const props = ConfigSetRefNode._propsOf(rawVal); return new ConfigSetRefNode(name, parent, props, { _rawVal: rawVal, _properties: props } as Record); } static parse(rawVal: Record, name: string, parent: BaseNode | null): ConfigSetRefNode { const props = ConfigSetRefNode._propsOf(rawVal); return new ConfigSetRefNode(name, parent, props, { _rawVal: rawVal, _properties: props } as Record); } diff --git a/src/datamodel/node/data/ParameterNode.ts b/src/datamodel/node/data/ParameterNode.ts index 7b9b0b1..996f7f2 100644 --- a/src/datamodel/node/data/ParameterNode.ts +++ b/src/datamodel/node/data/ParameterNode.ts @@ -374,10 +374,9 @@ export default class ParameterNode extends DataNode { return new ParameterNode(name, parent, props, { _rawVal: rawVal, _properties: props } as Record); } - static _normalizeMinMax(val: unknown): number | undefined { - if (Array.isArray(val) && val.length === 0) { return undefined; } - return val as number | undefined; - } + // _normalizeMinMax is inherited from DataNode — this class had its own identical copy + // until Simulink.ValueType became the third class to need it. Static inheritance keeps + // every existing `ParameterNode._normalizeMinMax(...)` call site spelled the same. static parse(rawVal: Record, name: string, parent: BaseNode | null): ParameterNode { const elem = rawVal._elements && (rawVal._elements as unknown[])[0]; diff --git a/src/datamodel/node/data/Simulink.Breakpoint.md b/src/datamodel/node/data/Simulink.Breakpoint.md index 8d55fed..79fe8e6 100644 --- a/src/datamodel/node/data/Simulink.Breakpoint.md +++ b/src/datamodel/node/data/Simulink.Breakpoint.md @@ -4,7 +4,8 @@ **Node class:** `BreakpointNode` (`src/datamodel/node/data/BreakpointNode.ts`) **MATLAB class:** `Simulink.Breakpoint` -**Editable in our UI:** no (read-only pass-through; only Name and Description editable) +**Editable in our UI:** Name, Description, and Storage Class (the table's Storage Class +column, a 17-value dropdown). Everything else is a read-only projection of the source bag. **Verified against:** MATLAB R2027a (probe_class('Simulink.Breakpoint')) ## Overview @@ -12,10 +13,14 @@ A Simulink.Breakpoint stores shared breakpoint data for use by multiple lookup table blocks. It contains a Breakpoints sub-object (with Value, DataType, Dimensions, Unit), CoderInfo, StructTypeInfo, and a SupportTunableSize flag. In our -UI the Breakpoint surfaces as a read-only entry: the Value column is empty and not -editable (`valueEditable = false`). The Property Inspector shows Name, Value -(empty), DataType (class name), and Description. Only Name and Description are -editable via the UI. +UI the Breakpoint has no scalar value: the Value column is empty and not editable +(`valueEditable = false`). Its Property Inspector groups (from +`schema/classes/breakpoint.json`) are General (Name, Value, Data Type, Kind, Class, +Description), Code Generation (Storage Class and the three StructTypeInfo keys under their +MATLAB labels Name / Data Scope / Header File) and Advanced (Support Tunable Size) — plus +the "Other" catch-all for what stays unmodelled. There is no Value Properties group, +because a Breakpoint has no `BreakpointsSpecification`. Every PI row but Name and +Description is a label; Storage Class is editable in the TABLE, not the PI. ## Property table @@ -26,7 +31,19 @@ editable via the UI. | Breakpoints | Simulink.lookuptable.Breakpoint | public | no | Breakpoints / Breakpoints | — | Sub-object (Value, DataType, Dimensions, Unit, FieldName) | | CoderInfo | Simulink.CoderInfo | protected | no | CoderInfo / CoderInfo | — | Sub-object | | StructTypeInfo | Simulink.lookuptable.StructTypeInfo | public | no | StructTypeInfo / StructTypeInfo | — | Sub-object (DataScope, HeaderFileName, Name) | -| SupportTunableSize | logical | public | no | SupportTunableSize / SupportTunableSize | — | true/false | + +The flat properties the schema surfaces individually (`schema/props/codeGen.json`, +`props/dataObject.json`) — the same five a `Simulink.LookupTable` has, minus its +table-instance switch. The left column is the MATLAB property; the schema key follows in +parentheses where the two differ. + +| Property | MATLAB type | SetAccess | Editable here | Serialized path | Editor | Allowed values / constraint | +|----------|-------------|-----------|---------------|-----------------|--------|-----------------------------| +| CoderInfo.StorageClass (`storageClass`) | char (enum) | public | **yes** (table column) | CoderInfo.StorageClass | select | 17 values, per class — see "Allowed values" | +| StructTypeInfo.Name (`structTypeName`) | char | public | no (label) | StructTypeInfo.Name | label | Any string; default `''` | +| StructTypeInfo.DataScope (`structTypeDataScope`) | char (enum) | public | no (label) | StructTypeInfo.DataScope | label | 'Auto', 'Exported', 'Imported'; default 'Auto' | +| StructTypeInfo.HeaderFileName (`structTypeHeaderFile`) | char | public | no (label) | StructTypeInfo.HeaderFileName | label | Any string; default `''` | +| SupportTunableSize (`supportTunableSize`) | logical | public | no (label) | SupportTunableSize | label | true/false; blank when the file omits the key | ## Non-obvious behavior (the reason this doc exists) @@ -49,10 +66,60 @@ editable via the UI. surfaced through the scalar editor — would require a dedicated array editor. Our UI preserves it during round-trip via the pass-through serialization. +### The five flat properties + +This class used to declare NO schema at all — not even a layout — so everything MATLAB +models about its code generation reached the Property Inspector only as flattened "Other" +rows (`Other.CoderInfo.StorageClass`, `Other.StructTypeInfo.DataScope`, …). The five it now +declares behave exactly as a `Simulink.LookupTable`'s do; see that doc for the full account +of the nested `CoderInfo` / `StructTypeInfo` traversal, why an absent key is the common case +and renders each descriptor's own default, and why displaying a default must write nothing. + +- **The group titles are MATLAB's, measured.** `+entry_adapter/+lut/Bp.m` reads the same + `LutBase.getCodeGenDataDefinitionsPropAndItems` and + `getCodeGenStructTypeDefinitionsPropAndItems` that `Lut.m` does, so the data-definition + property and the three StructTypeInfo properties land in ONE `CodeGenerationGroup`, and + `SupportTunableSize` sits alone in `AdvancedGroup`. MATLAB's PI resource catalog spells + those "Code Generation" and "Advanced". + +- **What a Breakpoint does NOT claim.** It has no + `AllowMultipleInstancesOfTypeToHaveDifferentTableBreakpointSizes` — a LookupTable governs + whether its instances may differ in table size, and a lone breakpoint set has no table to + differ from — and no `BreakpointsSpecification`. Both are asserted ABSENT from the layout, + not merely undisplayed: a copy-paste of `lookupTable.json` would otherwise give a + Breakpoint two permanently blank rows. + Test: `test/lookupTableFlatProps.test.ts`. + ## Allowed values (enums / comboboxes) -None exposed in our UI. All sub-object enum properties (DataType: 'auto'/etc., -StorageClass, DataScope) are read-only. +- `CoderInfo.StorageClass` → the same 17 values as a `Simulink.LookupTable`, in MATLAB's + own order: `Auto`, `Model default`, `ExportedGlobal`, `ImportedExtern`, + `ImportedExternPointer`, `BitField`, `Const`, `Volatile`, `ConstVolatile`, `Define`, + `ImportedDefine`, `ExportToFile`, `ImportFromFile`, `FileScope`, `Struct`, `GetSet`, + `CompilerFlag`. + + **The reason is the shared adapter, not a separate measurement.** + `LutBase.getCodeGenDataDefinitionsPropAndItems` is defined once and read by both `Lut.m` + and `Bp.m`, and it takes its allowed values from the same `dataCache('StorageClass')` with + no class-conditional narrowing — so the two classes share one list, and no evidence of a + Breakpoint-specific set turned up. The 17 were measured on a LookupTable; they were not + re-measured against a Breakpoint object. + + Like the LookupTable's, this list arrives through a per-class `$ref` override of the + shared `storageClass` descriptor, and `resolveRef`'s merge is one level deep, so the + override REPLACES the shared 6-value list rather than adding to it — which is what is + wanted, since the 17 are not a superset (they include neither `SimulinkGlobal` nor + `Custom`). `trySetSchemaProperty` validates against it, so it is an enforcement point: + `Custom` is refused here and still accepted on a `Simulink.Parameter`. The LookupTable doc + has the full rationale. + Test: `test/lookupTableFlatProps.test.ts`. + +- `StructTypeInfo.DataScope` → `Auto` | `Exported` | `Imported` (measured on R2027a). The + descriptor carries no `options` array for it, because it ships `editor: 'label'` — there + is no write to validate. + +All other sub-object enum properties (`Breakpoints.DataType`, …) remain read-only and +unmodelled. ## Validation mirrored in code @@ -62,6 +129,17 @@ StorageClass, DataScope) are read-only. - No additional validation for Description (any string accepted). +- `storageClass`: enforced by `trySetSchemaProperty` against this class's own 17-value + `options` list — the only one of the five with a write path at all. A value outside the + list is refused, and so is a legal value written into a bag that carries no `CoderInfo` + (`writeSourcePath` never synthesizes a missing sub-object). + Test: `test/lookupTableFlatProps.test.ts`. + +- The other four (`structTypeName`, `structTypeDataScope`, `structTypeHeaderFile`, + `supportTunableSize`): nothing to mirror. Each is a read-only projection of the source + bag — `editor: 'label'`, not `projected`, not a node field — so `trySetSchemaProperty` + declines it and no value ever reaches a validator. + ## Round-trip coverage - JSON sldd: parse → verify className + read-only contract → serialize → re-parse. @@ -69,6 +147,10 @@ StorageClass, DataScope) are read-only. - Binary sldd: same. Test: `test/parity/fidelity/typedef.fidelity.test.ts` (binary format loop). - MATLAB gate: Description edit → MATLAB reads back. PASS. +- The five flat properties, in-process only: a configured Breakpoint renders all five, + including the two that travel through a nested sub-object, and a `storageClass` write + lands at `CoderInfo.StorageClass`. **No MATLAB re-open gate was run for any of the five.** + Test: `test/lookupTableFlatProps.test.ts`. ## Open questions / deferred @@ -84,8 +166,15 @@ StorageClass, DataScope) are read-only. array that requires a dedicated editor UX. Not exposed via the scalar text editor; fully deferred. -- **SupportTunableSize**: Boolean flag controlling tunable-size behavior. Not - exposed in our UI. +- **SupportTunableSize is displayed but not editable**: it renders in the Advanced group as + a read-only label. Editability deferred for the same reason as `StructTypeInfo.DataScope` + below — no verified write path. + +- **`StructTypeInfo.DataScope` shipped read-only even though its allowed set is known.** + MATLAB accepts `Auto` | `Exported` | `Imported`, but nothing has verified the WRITE path: + whether MATLAB reloads a dictionary in which we changed it, and what it does when the + scope disagrees with the header-file setting. An unlock is worth only as much as the rule + that refuses a bad value, so the property is a label until that rule exists. - **TunableSizeName / TunableSizeValue**: Properties inside the Breakpoints sub-object for tunable-size configuration. Not exposed. diff --git a/src/datamodel/node/data/Simulink.BusElement.md b/src/datamodel/node/data/Simulink.BusElement.md index 9cb9539..496ab0d 100644 --- a/src/datamodel/node/data/Simulink.BusElement.md +++ b/src/datamodel/node/data/Simulink.BusElement.md @@ -83,11 +83,28 @@ Both are surfaced as `editor: 'select'` dropdowns over MATLAB's own enum - `elem.DimensionsMode = 'fixed'` / anything outside the enum → **"There is no enumerated value named 'fixed'."** - `elem. = ''` → treated as a CLEAR, not a rejection. Not MATLAB's behavior - (MATLAB refuses `''` too) but required by ours: an element that never carried the - property reads as `''`, so that is the prior value undo submits, and refusing it - would leave the undo of a legitimate edit silently unapplied. A cleared property is - omitted from the serialized bag entirely, so it cannot reach a file as an empty - enumeral. + (MATLAB refuses `''` too) but required by ours: `''` is what a user emptying the cell + submits, and `DataModel.editProperty` captures the prior value for UNDO, so refusing + it would leave the undo of a clear silently unapplied. A cleared property is omitted + from the serialized bag entirely — the write-back gate reads `''` as absence — so it + cannot reach a file as an empty enumeral. + +### Complexity / DimensionsMode — displayed default vs saved key + +An element whose file declares neither property DISPLAYS MATLAB's own default for it, +`real` and `Fixed` (probed on a live `Simulink.BusElement` — the same pair +`Simulink.ValueType` defaults to, and NOT the `auto` a `Simulink.Signal` uses). MATLAB +shows a value for both on every element it has, because the object always has one; only +the file is silent. Before this the fallback was `''`, so the two rows read blank. + +These are DISPLAY values only. `_applyElementOverrides` writes each key only when the +FILE carried it or the live value differs from that same default, so an element the file +left silent still saves silent: open a dictionary, change nothing, save, and no element +gains a key. The gate cannot be a truthiness test (`'Complexity' in sp || this.Complexity`, +which is what it was) — with a non-empty default that is always true, and every untyped +element in every dictionary would silently gain both keys. The extra `this.X &&` covers +the CLEAR above, `''` not being a value either enum has. +Test: `test/busElementDisplayDefaults.test.ts`. The casing is not normalized in either direction — MATLAB wrote 'real' lower case and 'Fixed' capitalized, and it refuses the other spelling of each, so a @@ -126,7 +143,8 @@ value. Test: round-trip in `test/parity/fidelity/element.fidelity.test.ts`. - `BusElementNode.setProperty('complexity'|'dimensionsMode', ...)` routes through - `_rejectUnknownEnumeral` (override in BusNode.ts), which reads the legal set off the + `_rejectUnknownEnumeral` (on `DataNode`, beside `_setMinMax`; it started here with one + caller and moved when `Simulink.ValueType` needed the same rule), which reads the legal set off the prop atom's `readOptions` — the same call the dropdown is built from, so the offered choices and the accepted values cannot drift — and returns `{error, reason: "There is no enumerated value named 'X'."}`. diff --git a/src/datamodel/node/data/Simulink.ConfigSet.md b/src/datamodel/node/data/Simulink.ConfigSet.md index 928de52..c39359e 100644 --- a/src/datamodel/node/data/Simulink.ConfigSet.md +++ b/src/datamodel/node/data/Simulink.ConfigSet.md @@ -4,21 +4,28 @@ **Node class:** `ConfigSetNode` (`src/datamodel/node/data/ConfigSetNode.ts`) **MATLAB class:** `Simulink.ConfigSet` -**Editable in our UI:** no (`valueEditable` explicitly returns `false`) +**Editable in our UI:** no value editor (`valueEditable` explicitly returns `false`); +Name and Description are editable **Verified against:** not probed (no params.sldd fixture instantiates this class) ## Overview A Simulink.ConfigSet represents a model configuration set. In MATLAB, it holds -dozens of solver/code-generation/diagnostic settings. In our UI it appears as a -read-only entry with an empty Value column and no inline editor. The node is +dozens of solver/code-generation/diagnostic settings. In our UI it appears as an +entry with an empty Value column and no value editor. The node is primarily seen in `.slx` files (the SLX parser sets the `active` flag for the model's current configuration) and occasionally in `.sldd` files. -The node exposes [PropName, PropDataType] in `getProperties()`. It carries a -`ConfigName` getter (a view of the entry `name` — see below) and an optional -`active` boolean set by the SLX parser. The icon switches between -`check_settings` (active) and `settings` (inactive) based on this flag. +The node exposes [PropName, PropDataType, PropDescription] in `getProperties()`, so +the table's Description column reads the node's `Description` field rather than +`toRow`'s fallback. It carries a `ConfigName` getter (a view of the entry `name` — +see below) and an optional `active` boolean set by the SLX parser. The icon switches +between `check_settings` (active) and `settings` (inactive) based on this flag. + +The Property Inspector layout is schema-driven: one **General** group +(`schema/classes/configSet.json`) listing the five identity keys and then +`description`, which is where every other class file that carries a Description in +General puts it. The node has a `createDefault` static for constructing minimal instances. @@ -28,8 +35,11 @@ The node has a `createDefault` static for constructing minimal instances. |-------------|--------|--------------------------|-------------------------------| | Name | text | entry name AND _properties.Name | MATLAB identifier | | ConfigName | — | Name (in _properties) | Getter over `name`; not stored separately | +| Description | textArea | Description (in _properties) | Any string; gated on save | | DataType | label | (className display) | Read-only label | +## Non-obvious behavior (the reason this doc exists) + ### Name and ConfigName are one value In a `.sldd` the entry name and the config set's own `Name` property are the same @@ -46,17 +56,100 @@ reopen. Contrast `ConfigSetRefNode.SourceName`, which names an *external* config set and correctly stays independent of a rename. Both behaviours are pinned in `test/configSetSerialize.test.ts`. +### Description is read from the node field, not the schema descriptor + +`description` is a key in `schemaBridge`'s `ATOM_BY_KEY`, and `resolvePropForKey` +prefers the atom over the class's schema descriptor — so the layout row resolves to +`PropDescription`, which reads the node's `Description` **field**, never the +descriptor's `sourcePath`. The constructor used to drop its `props` argument +entirely, which left the field looking declared while not existing: `BaseNode` +declares `Description?: string` for every node, and a TypeScript `field?: string` +that is never assigned emits nothing at runtime. + +Adding `description` to `configSet.json` alone would therefore have shipped the exact +defect `Simulink.ValueType` shipped — see its "The value properties were modelled but +unreachable" section for the mechanism. The fix is the constructor's assignment, not +the layout. `test/schemaLayoutResolvable.test.ts` now guards the whole class of bug at +the seam, rather than per class after the fact. +Test: `test/configSetSchemaProps.test.ts` — the first assertion of each block is that +the value DISPLAYS, in both panes, not that a row exists. + +### Description is gated on save; Name is not + +`_serializedOverrides` writes `Name` unconditionally — a config set MATLAB can load +has to be able to say what it is called, and because the key is a view of `name`, a +renamed entry saves under the new name on both paths. `Description` goes through +`SimulinkObjectNode._gatedProps`, which keeps the key only when the FILE already +carried it or the node now holds a value. A config set whose file never carried a +Description must not gain an empty one, or opening a dictionary and saving it with no +edits produces a diff in source control. Same terms as every other Description in this +cluster (AliasType, Breakpoint, CustomObject, LookupTable, NumericType). + +### The properties MATLAB's Property Inspector shows that we do not model + +MATLAB models four more parameters a config set's inspector shows — `StartTime`, +`StopTime`, `SystemTargetFile`, `SourceLocation` — and none of them is modeled here. +`test/configSetSchemaProps.test.ts` pins the omission together with the measurement +that decided it (the config-set part of every era fixture in +`test/parity/artifacts/slx_layouts/`). For the first three, three reasons at once: a +value at its default is not written at all, in any era; the R2026b+ JSON nests them +inside a heterogeneous `Simulink.ConfigComponent` array keyed by `_object_class`, +which a fixed schema `sourcePath` cannot address; and one era (R2025a XML) carries +none of the three. A layout key for any of them would render a permanently blank row +on some era of every real file — the defect above, not a step towards parity. +`SourceLocation` is out for a different reason, recorded at +`src/datamodel/parser/SlxParser.ts:59-62`: it survives an export as the literal +`Base Workspace` even when the set came from a data dictionary, so on a file we might +be handed it is not a fact about the model. + +Not modeling them is not hiding them: the PI's "Other" catch-all still lists whichever +of them a file happens to carry, which is what makes a blank modeled row the strictly +worse option. + ## Read-only / no-fixture status - `valueEditable` is explicitly `false` in the source code. - `displayValue` returns `''`. - No `params.sldd` fixture instantiates this class (it appears in `.slx` models parsed via the SLX parser). -- **Contract-lock**: assert `valueEditable === false` and className via `createDefault` +- **Contract-lock**: assert `valueEditable === false`, className, `displayValue === ''`, + the icon, and `getProperties()` === [Name, DataType, Description] via `createDefault` in `test/parity/fidelity/hostnodes.fidelity.test.ts`. +- Description is editable even so: `descriptionEditable` is `BaseNode`'s default `true`, + which is a different question from `valueEditable` — a config set with no scalar value + can still be described. + +## Validation mirrored in code + +- Name: validated by `DataNode.setProperty` → `validateMatlabName` (valid MATLAB + identifier, unique in namespace, max 63 chars, not a keyword). + +- Description: nothing to mirror — any string is accepted, and the string editor cannot + deliver the non-string MATLAB would reject. + +## Round-trip coverage + +- Both save paths (`_getSerializedProperties` for the compressed-binary `.sldd`, + `serializeValue` for the JSON of an uncompressed-text one), in both directions and in + every state the gate distinguishes: a file with no Description gains none; a file's + Description comes straight back; a Description typed onto an entry that had none is + written; and the two paths name the same keys. + Test: `test/configSetSchemaProps.test.ts`. +- Every unmodeled property in the bag is re-emitted untouched — a config set holds dozens + of solver parameters we do not model, and a save that dropped them would lose most of + the entry. Same test. +- The `Name`/rename ownership question: `test/configSetSerialize.test.ts`. +- Two-save-path agreement for the whole cluster: `test/absentPropertyWriteBack.test.ts`. +- MATLAB re-open gate: NOT run for the Description edit — see below. ## Open questions / deferred +- **MATLAB re-open gate for the Description edit — NOT RUN.** The edit is verified + in-process (serialize → re-parse) only. The sibling classes with the same gated + Description each record a PASS of their own (`Simulink.Breakpoint`, + `Simulink.LookupTable`, `Simulink.NumericType`, `Simulink.ValueType`); this class has + none, and no fixture instantiates it, so there is nothing here to cite. + - **Active detection on SLDD path**: the `active` flag is only set by the SLX parser; on the SLDD path it is always `undefined` (treated as inactive). This is correct for standalone `.sldd` files. diff --git a/src/datamodel/node/data/Simulink.ConfigSetRef.md b/src/datamodel/node/data/Simulink.ConfigSetRef.md index 4abe082..2271131 100644 --- a/src/datamodel/node/data/Simulink.ConfigSetRef.md +++ b/src/datamodel/node/data/Simulink.ConfigSetRef.md @@ -4,8 +4,12 @@ **Node class:** `ConfigSetRefNode` (`src/datamodel/node/data/ConfigSetRefNode.ts`) **MATLAB class:** `Simulink.ConfigSetRef` -**Editable in our UI:** no (`valueEditable` explicitly returns `false`) +**Editable in our UI:** no value editor (`valueEditable` explicitly returns `false`); +Name and Description are editable, SourceName is read-only **Verified against:** not probed (no params.sldd fixture instantiates this class) +**Measured, not matched:** MATLAB's own inspector adapter +(`+entry_adapter/ConfigSetRef.m`) groups and labels the source differently — a +deliberate divergence, recorded below. ## Overview @@ -13,9 +17,16 @@ A Simulink.ConfigSetRef is a reference to an external configuration set (stored a data dictionary). It carries a `SourceName` string identifying which configuration set it points to. Like ConfigSet, it is primarily encountered in `.slx` files. -The node exposes [PropName, PropDataType] in `getProperties()`. The `active` flag -(set by the SLX parser) drives the icon: `check_configurationReference` (active) -vs. `configurationReference` (inactive). +The node exposes [PropName, PropDataType, PropDescription] in `getProperties()`, so the +table's Description column reads the node's `Description` field rather than `toRow`'s +fallback. `SourceName` is deliberately NOT there: it reaches the Property Inspector as a +schema descriptor and has no table column. The `active` flag (set by the SLX parser) +drives the icon: `check_configurationReference` (active) vs. `configurationReference` +(inactive). + +The Property Inspector layout is schema-driven: one **General** group +(`schema/classes/configSetRef.json`) listing the five identity keys, then `sourceName`, +then `description`. The node has a `createDefault` static for constructing minimal instances (with an empty `SourceName`). @@ -25,17 +36,112 @@ empty `SourceName`). | Property | Editor | Serialized key | Notes | |-------------|--------|----------------------------|-----------------------------| | Name | text | entry name | MATLAB identifier | -| SourceName | — | SourceName (in _properties)| Name of referenced config | +| SourceName | label | SourceName (in _properties)| Name of referenced config; read-only, PI row only (no table column); written unconditionally | +| Description | textArea | Description (in _properties) | Any string; gated on save | | DataType | label | (className display) | Read-only label | +## Non-obvious behavior (the reason this doc exists) + +### SourceName reaches the PI as a schema descriptor, not a node atom + +`sourceName` is not an `ATOM_BY_KEY` key, so its row resolves to the schema descriptor +(declared in `schema/props/core.json`, listed for this class by `configSetRef.json`'s +`props`) and hydrates `serial._properties.SourceName` rather than reading +`node.SourceName`. That is sound only while the row is read-only: an edit lands on the +field, so the row would go on showing the untouched bag. If SourceName ever becomes +editable it has to move to an atom — the divergence `ValueTypeNode.getPILayout` records +at length. +`test/configSetSchemaProps.test.ts` asserts the hydrated value and the field AGREE, +which is the assertion that fails to say so. + +One fixed `sourcePath: "SourceName"` is enough despite the era-varying spelling +(`SourceName` in R2021a and later, `WSVarName` in R2018a and earlier) because the +normalization happens upstream, before any node is built: `SlxParser.configSetIdentity` +reads `props.SourceName ?? props.WSVarName ?? ''` into `ParsedConfigSet.sourceName` +(`src/datamodel/parser/SlxParser.ts:192` for the R2026b+ JSON layout, `:211` for every +XML era), and `ModelSectionNode.addConfigSetEntry` writes it back as `props.SourceName` +(`src/datamodel/node/container/ModelSectionNode.ts:69-71`). + +### SourceName is read-only, where MATLAB offers a combobox + +MATLAB's `SourceName` is an editable combobox whose allowed values come from +`configset.internal.util.getReferenceableConfigSets(csr)` — a query against the live +model, which we cannot answer from a file. Offering free text where MATLAB offers a +constrained list would be an unlock without a rule that refuses a bad value, so the +descriptor is `editor: "label"`. It is still saved unconditionally: a reference that +cannot say what it points at is not a reference, so the key is written even as the +empty string a half-built entry carries. Contrast a `ConfigSet`'s `Name`, which is a +view of the entry name — a rename must move that and must NOT touch this. +Test: `test/configSetSerialize.test.ts` owns the ownership question; +`test/configSetSchemaProps.test.ts` pins the row's label and its `editable === false`. + +### Source Name sits in General, not in MATLAB's own group — deliberately + +MATLAB's `+entry_adapter/ConfigSetRef.m` puts `SourceName` in a group titled +**Referenced Configuration**, alongside `SourceLocation` and `SourceResolved`, and +labels the row just **"Name"** — a label that only reads correctly because of the group +title. We put `sourceName` in **General**, labelled **"Source Name"**. Two reasons. +First, we model neither group-mate: `SourceLocation` is out for the reason recorded at +`src/datamodel/parser/SlxParser.ts:59-62` (it exports as the literal `Base Workspace` +even when the set came from a data dictionary, so it is not a fact about the file), and +`SourceResolved` is live-model resolution state no file carries — so matching MATLAB +would mean a group of exactly one row. Second, "Source Name" in General conveys what +"Name" under that group title conveys. + +### Description + +Same field, same mechanism, same gate as a `Simulink.ConfigSet`: the `description` +layout key resolves to the `PropDescription` atom, which reads the node's `Description` +**field**, not the descriptor's `sourcePath`, and the constructor used to drop its +`props` argument entirely — see `Simulink.ConfigSet.md`'s "Description is read from the +node field, not the schema descriptor" and, for the mechanism in full, +`Simulink.ValueType.md`'s "The value properties were modelled but unreachable". +`Description` is gated by `SimulinkObjectNode._gatedProps` so a reference whose file +never carried one does not gain an empty one on save. +Test: `test/configSetSchemaProps.test.ts`; the class of bug is guarded at the seam by +`test/schemaLayoutResolvable.test.ts`. + ## Read-only / no-fixture status - `valueEditable` is explicitly `false` in the source code. - `displayValue` returns `''`. - No `params.sldd` fixture instantiates this class. -- **Contract-lock**: assert `valueEditable === false` and className via `createDefault` +- **Contract-lock**: assert `valueEditable === false`, className, `displayValue === ''`, + the icon, and `getProperties()` === [Name, DataType, Description] via `createDefault` in `test/parity/fidelity/hostnodes.fidelity.test.ts`. +- Description is editable even so: `descriptionEditable` is `BaseNode`'s default `true`, + which is a different question from `valueEditable`. + +## Validation mirrored in code + +- Name: validated by `DataNode.setProperty` → `validateMatlabName` (valid MATLAB + identifier, unique in namespace, max 63 chars, not a keyword). + +- Description: nothing to mirror — any string is accepted. + +- SourceName: none, and none to mirror — the row is read-only, so no value of ours ever + reaches it. MATLAB's constraint is a live-model query (see above), which is why. + +## Round-trip coverage + +- Both save paths (`_getSerializedProperties` for the compressed-binary `.sldd`, + `serializeValue` for the JSON of an uncompressed-text one), in both directions and in + every state the Description gate distinguishes, plus `SourceName` written + unconditionally in each of them, plus a check that the two paths name the same keys. + Test: `test/configSetSchemaProps.test.ts`. +- Every unmodeled property in the bag is re-emitted untouched. Same test. +- Rename must not touch `SourceName`: `test/configSetSerialize.test.ts`. +- Two-save-path agreement for the whole cluster: `test/absentPropertyWriteBack.test.ts`. +- MATLAB re-open gate: NOT run for the Description edit — see below. ## Open questions / deferred +- **MATLAB re-open gate for the Description edit — NOT RUN.** Verified in-process + (serialize → re-parse) only; no fixture instantiates this class, and no PASS is + recorded for it anywhere in the repo. Same status as `Simulink.ConfigSet`. + +- **SourceName editing**: would need the allowed set MATLAB gets from + `getReferenceableConfigSets`, which is a live-model query. If it is ever unlocked, the + row must move from the schema descriptor to a node atom first (see above). + - **Fixture generation**: deferred. diff --git a/src/datamodel/node/data/Simulink.EnumType.md b/src/datamodel/node/data/Simulink.EnumType.md index c85d6f0..43f0e43 100644 --- a/src/datamodel/node/data/Simulink.EnumType.md +++ b/src/datamodel/node/data/Simulink.EnumType.md @@ -12,9 +12,12 @@ A Simulink.data.dictionary.EnumTypeDefinition defines a custom enumeration type within a data dictionary. In our UI the enum surfaces as an editable entry whose Value column shows the DefaultValue (or the first enumeral's name when no default is -set). Its Property Inspector exposes Name, Value (select editor), DataType (label), -and Description. The child tree shows individual enumeral rows, each with -Name/Value/Description. +set). Its Property Inspector groups (from `schema/classes/enumType.json`) are General +(Name, Kind, Class), Value Properties (Value — a select editor — Storage Type, +Description) and Code Generation (Data Scope, Header File, Add Class Name To Enum Names, +Is Tunable In Code). Everything but Name, Value and Description is a read-only label. +The child tree shows individual enumeral +rows, each with Name/Value/Description. ## Property table @@ -24,10 +27,11 @@ Name/Value/Description. | DefaultValue | char | public | yes | DefaultValue / DefaultValue | select | Must be empty or match an existing enumeral Name | | DataType | char | public | no (label) | (not serialized as top-level) | label | Any string (free-form) | | Description | char | public | yes | Description / Description | text | Any string | -| DataScope | char (enum) | public | no | DataScope / DataScope | — | 'Auto', 'Exported', 'Imported' | -| HeaderFile | char | public | no | HeaderFile / HeaderFile | — | Any string | -| StorageType | char | public | no | StorageType / StorageType | — | Any string | -| AddClassNameToEnumNames | logical | public | no | AddClassNameToEnumNames | — | true/false | +| DataScope | char (enum) | public | no (label) | DataScope / DataScope | label | 'Auto', 'Exported', 'Imported' | +| HeaderFile | char | public | no (label) | HeaderFile / HeaderFile | label | Any string | +| StorageType | char | public | no (label) | StorageType / StorageType | label | Any string | +| AddClassNameToEnumNames | logical | public | no (label) | AddClassNameToEnumNames | label | true/false | +| IsTunableInCode | logical | public | no (label) | IsTunableInCode / IsTunableInCode | label | true/false; blank when the file omits the key | ## Non-obvious behavior (the reason this doc exists) @@ -73,6 +77,34 @@ Name/Value/Description. This rejection is **unreachable** from our UI (the select editor and text editor always deliver strings). Type-guarded by the string editor. +### IsTunableInCode — the row that cannot be gated + +- **It goes last in Code Generation because MATLAB appends it last.** + `SLEnum.getCodegenPropertyNames()` builds DataScope, HeaderFile and + AddClassNameToEnumNames, then appends IsTunableInCode when the `OpaqueEnum` feature + is on — which it is in R2027a, where the property reports `valid=1 readonly=0`. + +- **The row is always shown.** The feature gate lives in the running MATLAB + installation, not in the `.sldd`, and a file carries no trace of whether the release + that wrote it had `OpaqueEnum` enabled. So an enum whose bag omits the key gets a + BLANK row rather than no row. Hiding it on a heuristic would hide a value other files + really carry, and it would hide it twice over: `BaseNode.toPIObject` adds every + resolved layout key to `shownKeys`, so the "Other" catch-all suppresses the raw + property as well — the same defect the ValueType doc records. + +- **`false` is not the same as absent.** `hydrate` substitutes the descriptor's default + only when the resolved value is `undefined`, and that default is `''`. An enum that + turns tunability off renders `false`; one that never mentioned it renders nothing. A + truthiness test anywhere on this path collapses the two. + +- **Serialized flat, as a real boolean.** R2027a writes `"IsTunableInCode": true` at the + top level — not a nested sub-object and not MATLAB's `'on'`/`'off'` string. The + display path stringifies it to `"true"`; both save paths must not, because a `"true"` + reaches the binary XML writer as `Class="char"` where a logical belongs. + +- Property-Inspector-only: the descriptor is not `projected`, so it contributes no table + column. Test: `test/enumIsTunableInCode.test.ts`. + ## Structural editing (add/remove enumerals) ### canAddChild / canRemoveChild @@ -122,6 +154,12 @@ This ensures add/remove stays consistent in the serialized format. ("Default value does not match any of the enumeration names") is unreachable. Test: `test/parity/fidelity/enumtype.fidelity.test.ts`. +- IsTunableInCode: nothing to mirror. The descriptor declares `editor: 'label'` and + `buildPILayout` forces every schema-resolved PI item to a label regardless, so there + is no write path to validate — the property is a read-only projection of the source + bag, not a node field. What is pinned instead is that reading it for display writes + nothing. Test: `test/enumIsTunableInCode.test.ts`. + ## Round-trip coverage - JSON sldd: parse → edit DefaultValue → serialize → re-parse → value preserved. @@ -133,6 +171,11 @@ This ensures add/remove stays consistent in the serialized format. - Structural add → MATLAB opens file, `__class__` matches. PASS. - Structural remove → MATLAB opens file, `__class__` matches. PASS. Test: `test/parity/fidelity/enumtype.fidelity.test.ts` (gated on DEX_MATLAB_CMD). +- IsTunableInCode, in-process only: an enum that carries the key saves it unchanged as a + logical on both save paths, an enum that omits it gains no key on either, and the saved + bag re-parses to the same displayed value and the same group membership. **No MATLAB + re-open gate was run for this property.** + Test: `test/enumIsTunableInCode.test.ts`. ## MATLAB round-trip gate limitations @@ -150,5 +193,8 @@ This ensures add/remove stays consistent in the serialized format. stale (MATLAB would reject it). Our UI does not yet cascade a rename into the parent's DefaultValue — deferred until enumeral name editing is surfaced. -- **DataScope / HeaderFile / StorageType / AddClassNameToEnumNames**: These - properties exist in MATLAB but are not surfaced in our UI editor. Deferred. +- **DataScope / HeaderFile / StorageType / AddClassNameToEnumNames / + IsTunableInCode**: all five are displayed — read-only labels in the Code Generation + group, except StorageType, which sits under Value Properties. None is EDITABLE: the + Property Inspector has no edit channel, and none of the five is `projected`, so none + reaches the table's editable-cell path either. Editability deferred. diff --git a/src/datamodel/node/data/Simulink.LookupTable.md b/src/datamodel/node/data/Simulink.LookupTable.md index 2b8f9fe..61ba763 100644 --- a/src/datamodel/node/data/Simulink.LookupTable.md +++ b/src/datamodel/node/data/Simulink.LookupTable.md @@ -4,18 +4,22 @@ **Node class:** `LookupTableNode` (`src/datamodel/node/data/LookupTableNode.ts`) **MATLAB class:** `Simulink.LookupTable` -**Editable in our UI:** no (read-only pass-through; only Name and Description editable) +**Editable in our UI:** Name, Description, and Storage Class (the table's Storage Class +column, a 17-value dropdown). Everything else is a read-only projection of the source bag. **Verified against:** MATLAB R2027a (probe_class('Simulink.LookupTable')) ## Overview A Simulink.LookupTable stores table data with breakpoints for use by lookup-table blocks. It contains a Table sub-object, one or more Breakpoint sub-objects, -CoderInfo, StructTypeInfo, and configuration flags. In our UI the LookupTable -surfaces as a read-only entry: the Value column is empty and not editable -(`valueEditable = false`). The Property Inspector shows Name, Value (empty), -DataType (class name), and Description. Only Name and Description are editable via -the UI. +CoderInfo, StructTypeInfo, and configuration flags. In our UI the LookupTable has no +scalar value: the Value column is empty and not editable (`valueEditable = false`). Its +Property Inspector groups (from `schema/classes/lookupTable.json`) are General (Name, +Value, Data Type, Kind, Class, Description), Value Properties (Breakpoints +Specification), Code Generation (Storage Class, and the three StructTypeInfo keys under +their MATLAB labels Name / Data Scope / Header File) and Advanced (the two tunable-size +switches) — plus the "Other" catch-all for what stays unmodelled. Every PI row but Name +and Description is a label; Storage Class is editable in the TABLE, not the PI. ## Property table @@ -27,7 +31,20 @@ the UI. | Breakpoints | Simulink.lookuptable.Breakpoint | public | no | Breakpoints / Breakpoints | — | Sub-object (Value, DataType, Dimensions, Unit, FieldName) | | CoderInfo | Simulink.CoderInfo | protected | no | CoderInfo / CoderInfo | — | Sub-object | | StructTypeInfo | Simulink.lookuptable.StructTypeInfo | public | no | StructTypeInfo / StructTypeInfo | — | Sub-object (DataScope, HeaderFileName, Name) | -| SupportTunableSize | logical | public | no | SupportTunableSize / SupportTunableSize | — | true/false | +| BreakpointsSpecification | char (enum) | public | no (label) | BreakpointsSpecification / same | label | Default 'Explicit values' | + +The flat properties the schema surfaces individually (`schema/props/codeGen.json`, +`props/dataObject.json`). The left column is the MATLAB property; the schema key follows +in parentheses where the two differ. + +| Property | MATLAB type | SetAccess | Editable here | Serialized path | Editor | Allowed values / constraint | +|----------|-------------|-----------|---------------|-----------------|--------|-----------------------------| +| CoderInfo.StorageClass (`storageClass`) | char (enum) | public | **yes** (table column) | CoderInfo.StorageClass | select | 17 values, per class — see "Allowed values" | +| StructTypeInfo.Name (`structTypeName`) | char | public | no (label) | StructTypeInfo.Name | label | Any string; default `''` | +| StructTypeInfo.DataScope (`structTypeDataScope`) | char (enum) | public | no (label) | StructTypeInfo.DataScope | label | 'Auto', 'Exported', 'Imported'; default 'Auto' | +| StructTypeInfo.HeaderFileName (`structTypeHeaderFile`) | char | public | no (label) | StructTypeInfo.HeaderFileName | label | Any string; default `''` | +| SupportTunableSize (`supportTunableSize`) | logical | public | no (label) | SupportTunableSize | label | true/false; blank when the file omits the key | +| AllowMultipleInstancesOfTypeToHaveDifferentTableBreakpointSizes (`allowDifferentTableBpSizes`) | logical | public | no (label) | same | label | true/false; blank when the file omits the key | ## Non-obvious behavior (the reason this doc exists) @@ -51,10 +68,100 @@ the UI. array/table editor. Our UI preserves them during round-trip via the pass-through serialization (serial._rawVal is cloned with property overrides merged). +### The six flat properties, and why DISPLAY is what gets asserted + +This class used to declare almost no schema — only `breakpointsSpecification` — so its +entire code-generation surface reached the Property Inspector as flattened "Other" rows +(`Other.CoderInfo.StorageClass`, `Other.StructTypeInfo.DataScope`, …): raw serialized +paths in a collapsed catch-all rather than named, grouped properties. + +- **The group titles are MATLAB's, measured, not chosen.** MATLAB's own adapter + (`+entry_adapter/+lut/Lut.m`) has `insertCodeGenGroup` concatenate + `getCodeGenDataDefinitionsPropAndItems` with + `getCodeGenStructTypeDefinitionsPropAndItems`, so the data-definition property and the + three StructTypeInfo properties land in ONE `CodeGenerationGroup` — StructTypeInfo does + not get a group of its own. `AdvancedGroup` holds + `AllowMultipleInstancesOfTypeToHaveDifferentTableBreakpointSizes` first and then + `SupportTunableSize`. MATLAB's PI resource catalog spells `CodeGenerationGroup` as + "Code Generation" and `AdvancedGroup` as "Advanced". + +- **Two of the six reach their value through a nested MCOS sub-object**, which is why the + test asserts the RENDERED sheet rather than the JSON's contents: a `props` entry can + resolve and still render blank, and the value has to travel `serial._properties` → + `resolveSourcePath` → `hydrate` → `toPIObject` to be seen. `StructTypeInfo.HeaderFileName` + is deliberately spelled differently from its schema key `structTypeHeaderFile` — the + sourcePath, not the key, is what addresses the file. + +- **Absent is the common case, not an edge one.** A JSON `.sldd` omits any property sitting + at its default, so most files carry none of these keys. Each then renders its own + descriptor default (`storageClass` → 'Auto', `structTypeDataScope` → 'Auto', the rest + blank), and an incomplete `StructTypeInfo` — say one carrying only `Name` — falls back + per leaf rather than to whatever the traversal last touched. + +- **Displaying a default writes nothing.** `hydrate` substitutes the default into the + returned value only, never back into the bag, so a LookupTable that is opened, rendered + and saved keeps exactly the keys it arrived with on both save paths. + +- **Surfacing a property must also silence its raw row.** Each prop declares + `sourceKeys = [first path segment]`, so modelling `CoderInfo.StorageClass` excludes the + whole raw `CoderInfo` bag from "Other" — otherwise one value appears twice under two + names. `Table` and `Breakpoints` stay in "Other" on purpose: that is how a property + nobody has modelled stays visible instead of being silently dropped. + + Test: `test/lookupTableFlatProps.test.ts`. + +### The storageClass options are REPLACED per class, not widened + +`storageClass` is a single shared descriptor in `props/codeGen.json`, used by +`Simulink.Parameter`, `Simulink.Signal` and these two classes — and the value sets are NOT +nested. MATLAB accepts 17 values on a LookupTable and the shared list holds 6, but the two +overlap in only FOUR (`Auto`, `ExportedGlobal`, `ImportedExtern`, +`ImportedExternPointer`): the LookupTable adds 13 the shared descriptor never listed, and +REFUSES the two it offers that are left over, `SimulinkGlobal` and `Custom`. So the 17 are +not a superset of the 6, and neither widening nor narrowing the shared entry is available — +widening would offer `Custom` on a LookupTable, narrowing would break Parameter and Signal. +Both LUT classes override `options` through a per-class `$ref` instead. + +What makes that override a REPLACEMENT is `resolveRef` in `schema/index.ts`: it merges +`{ ...base, ...override }`, one level deep. An `options` array in the override substitutes +for the base's array wholesale — no concat, no deep union. That is exactly what is wanted +here, and worth knowing before authoring an override that only means to ADD a value. + +And the list is an **enforcement point, not a dropdown decoration**: +`trySetSchemaProperty` compares an incoming `editor: 'select'` write against `prop.options` +and returns a refusal on a miss. So a `Custom` that a `Simulink.Parameter` accepts is +refused on a LookupTable, and a `CompilerFlag` a LookupTable accepts stays refused on a +Parameter. A refusal does not half-apply — the bag is byte-identical afterwards. +Test: `test/lookupTableFlatProps.test.ts` (both directions; the Parameter assertions are +what prove the override is per-class — "fixing" this by editing the shared descriptor +would leave the LookupTable assertions green and fail those). + +### A Storage Class write can be legal and still refused + +`writeSourcePath` never synthesizes a missing sub-object, so a bag with no `CoderInfo` gets +a refusal ("Cannot set Storage Class (target property is absent)") even for a value in the +list. A newly created LookupTable is exactly that bag: unlike `ParameterNode.createDefault`, +`LookupTableNode.createDefault` seeds no CoderInfo — so the value displays (default 'Auto') +and is not yet writable, and the refusal says which. +Test: `test/lookupTableFlatProps.test.ts`. + ## Allowed values (enums / comboboxes) -None exposed in our UI. All sub-object enum properties (DataType: 'auto'/etc., -StorageClass, DataScope) are read-only. +- `CoderInfo.StorageClass` → the 17 values MATLAB accepts on a LookupTable, in MATLAB's + own order: `Auto`, `Model default`, `ExportedGlobal`, `ImportedExtern`, + `ImportedExternPointer`, `BitField`, `Const`, `Volatile`, `ConstVolatile`, `Define`, + `ImportedDefine`, `ExportToFile`, `ImportFromFile`, `FileScope`, `Struct`, `GetSet`, + `CompilerFlag`. Measured on R2027a. Held in `classes/lookupTable.json` as a `$ref` + override, and again as the test's own literal so the schema cannot both define and + verify the list. + +- `StructTypeInfo.DataScope` → `Auto` | `Exported` | `Imported`, also measured on R2027a. + The descriptor carries NO `options` array for it, because it ships `editor: 'label'`: + there is no write to validate, and an options list is only worth authoring where + something enforces it. + +All other sub-object enum properties (`Table.DataType`, `Breakpoints.DataType`, …) remain +read-only and unmodelled. ## Validation mirrored in code @@ -64,6 +171,17 @@ StorageClass, DataScope) are read-only. - No additional validation for Description (any string accepted). +- `storageClass`: enforced by `trySetSchemaProperty` against the class's own 17-value + `options` list, returning `{ error: true, reason: 'Invalid value for Storage Class' }` on + a miss and `'Cannot set Storage Class (target property is absent)'` when the bag has no + `CoderInfo`. This is the only one of the six with a write path at all. + Test: `test/lookupTableFlatProps.test.ts`. + +- The other five (`structTypeName`, `structTypeDataScope`, `structTypeHeaderFile`, + `supportTunableSize`, `allowDifferentTableBpSizes`): nothing to mirror. Each is a + read-only projection of the source bag — `editor: 'label'`, not `projected`, not a node + field — so `trySetSchemaProperty` declines it and no value ever reaches a validator. + ## Round-trip coverage - JSON sldd: parse → verify className + read-only contract → serialize → re-parse. @@ -71,6 +189,12 @@ StorageClass, DataScope) are read-only. - Binary sldd: same. Test: `test/parity/fidelity/typedef.fidelity.test.ts` (binary format loop). - MATLAB gate: Description edit → MATLAB reads back. PASS. +- The six flat properties, in-process only: a LookupTable that carries them renders every + value including the two nested paths; one that omits them renders each descriptor + default; and both bags keep exactly the keys they arrived with on both save paths after + the sheet has been rendered. A `storageClass` write lands at `CoderInfo.StorageClass` for + all 17 values. **No MATLAB re-open gate was run for any of the six.** + Test: `test/lookupTableFlatProps.test.ts`. ## Open questions / deferred @@ -90,5 +214,27 @@ StorageClass, DataScope) are read-only. multiple Breakpoints sub-objects. Our parser preserves all of them during round-trip but does not expose array editing for any dimension. -- **SupportTunableSize**: Boolean flag controlling tunable-size behavior. Not - exposed in our UI. +- **No Table / Breakpoints PI group either**, beyond the array editing above: MATLAB builds + one group PER breakpoint, dynamically, for an N-D table — that is the lookup-table + specification editor, a whole Simulink dialog rather than a row. None of the six flat + properties touches it, so both bags keep reaching the sheet through "Other", which is + what keeps them visible while unmodelled. + +- **`StructTypeInfo.DataScope` shipped read-only even though its allowed set is known.** + MATLAB accepts `Auto` | `Exported` | `Imported` and nothing has verified the WRITE path + for it — whether MATLAB reloads a dictionary in which we changed it, and what it does + when the scope disagrees with the header-file setting. The rule this repo goes by is that + an unlock is worth only as much as the rule that refuses a bad value, so the property is + a label until that rule exists. Same reason `Simulink.ValueType`'s Dimensions is a label. + +- **The two tunable-size switches are displayed but not editable.** `SupportTunableSize` + and `AllowMultipleInstancesOfTypeToHaveDifferentTableBreakpointSizes` render in the + Advanced group as read-only labels. Editability deferred for the same reason as + DataScope: no verified write path. + +- **The 63-character property name is abbreviated in the schema.** + `AllowMultipleInstancesOfTypeToHaveDifferentTableBreakpointSizes` is keyed + `allowDifferentTableBpSizes`, and its `label` carries the spelled-out name. So the key is + short without hiding the property: `test/parity/matlab/schemaProps.test.ts` carries a + path→key rename table, so the parity check still measures the abbreviation against + MATLAB's own property name rather than losing sight of it. diff --git a/src/datamodel/node/data/Simulink.ValueType.md b/src/datamodel/node/data/Simulink.ValueType.md index 7265359..1901c0b 100644 --- a/src/datamodel/node/data/Simulink.ValueType.md +++ b/src/datamodel/node/data/Simulink.ValueType.md @@ -4,34 +4,82 @@ **Node class:** `ValueTypeNode` (`src/datamodel/node/data/ValueTypeNode.ts`) **MATLAB class:** `Simulink.ValueType` -**Editable in our UI:** no (read-only pass-through; only Name and Description editable) +**Editable in our UI:** yes (Name, Description, Min, Max, Complexity, DimensionsMode) **Verified against:** MATLAB R2027a (probe_class('Simulink.ValueType')) +**Partly unverified:** the Min / Max / Complexity / DimensionsMode unlock is verified +in-process only. There is no MATLAB re-open gate for those four — see "Open questions". ## Overview A Simulink.ValueType defines a reusable value-type specification (data type, unit, dimensions, complexity, min/max bounds) that can be applied to signals, states, and -parameters. In our UI the ValueType surfaces as a read-only entry: the Value column -is empty and not editable (`valueEditable = false`). The Data Type column shows the -underlying DataType property (defaulting to 'double'). The Property Inspector shows -Name, Value (empty), DataType, and Description. Only Name and Description are -editable via the UI. +parameters. In our UI the ValueType has no scalar "value": the Value column is empty and +not editable (`valueEditable = false`). The Data Type column shows the underlying +DataType property (defaulting to 'double'). The Property Inspector shows Name, DataType, +Dimensions, Complexity, DimensionsMode, Min, Max, Unit, and Description — the same +value-property surface a `Simulink.BusElement` gets, and for the same reason: MATLAB +models these properties on the object, so a UI that hides them is hiding data the file +carries. ## Property table -| Property | MATLAB type | SetAccess | Editable here | Serialized key (JSON / binary) | Editor | Allowed values / constraint | -|-------------|-------------|-----------|---------------|--------------------------------|--------|-----------------------------| -| Name | char | (entry) | yes | name / name | text | Valid MATLAB identifier, unique in namespace | -| Description | char | public | yes | Description / Description | text | Any string | -| DataType | char | public | no (label) | DataType / DataType | label | Any string (free-form; MATLAB validates downstream) | -| Unit | char | public | no | Unit / Unit | — | Any string (SI or custom unit) | -| Min | double / [] | public | no | Min / Min | — | Finite real double scalar, or [] | -| Max | double / [] | public | no | Max / Max | — | Finite real double scalar, or [] | -| Complexity | char (enum) | public | no | Complexity / Complexity | — | 'real' or 'complex' | -| Dimensions | double | public | no | Dimensions / Dimensions | — | Positive integer row vector | +| Property | MATLAB type | SetAccess | Editable here | Serialized key (JSON / binary) | Editor | Allowed values / constraint | +|----------------|-------------|-----------|---------------|--------------------------------|----------|-----------------------------| +| Name | char | (entry) | yes | name / name | text | Valid MATLAB identifier, unique in namespace | +| Description | char | public | yes | Description / Description | textArea | Any string | +| DataType | char | public | no (label) | DataType / DataType | label | Any string (free-form; MATLAB validates downstream) | +| Unit | char | public | no (label) | Unit / Unit | label | Any string (SI or custom unit) | +| Min | double / [] | public | yes | Min / Min | text | Finite real double scalar; `[]` clears | +| Max | double / [] | public | yes | Max / Max | text | Finite real double scalar; `[]` clears | +| Complexity | char (enum) | public | yes | Complexity / Complexity | select | 'real' or 'complex' (exact case); `''` clears | +| DimensionsMode | char (enum) | public | yes | DimensionsMode / DimensionsMode | select | 'Fixed' or 'Variable' (exact case); `''` clears | +| Dimensions | double | public | no (label) | Dimensions / Dimensions | label | Positive integer row vector | ## Non-obvious behavior (the reason this doc exists) +### The value properties were modelled but unreachable + +`schema/classes/valueType.json` already carried a layout naming `min`, `max`, `unit`, +`dimensions` and `complexity`, and every one of those rows rendered BLANK. Those keys +resolve through `schemaBridge`'s `ATOM_BY_KEY` to atoms that read node FIELDS, and +`ValueTypeNode` had no such fields — so each row read empty AND was added to `shownKeys`, +which had the "Other" catch-all suppress the raw source key as well. A `"Unit": "m"` in +the dictionary was therefore invisible in both panes at once +(`test/parity/artifacts/text/params.sldd`'s `MyValueType` is exactly that file). The fix +is the fields; the layout did not need to change. +Test: `test/valueTypeValueProps.test.ts`. + +### Unit is spelled `Unit`, not `DocUnits` + +MATLAB serializes a ValueType's unit as a flat `Unit` key, where a `Simulink.Parameter`'s +or `Simulink.Signal`'s is `DocUnits` (both measured off dictionaries MATLAB wrote). The +node reads both spellings so a file written either way displays, `Unit` first, and writes +back under whichever spelling the file used. `PropUnit` already declares +`sourceKeys = ['DocUnits', 'Unit']`, so neither spelling leaks into "Other". +The per-class `sourcePath: "Unit"` override in `valueType.json` says the same thing on the +schema side; it is pinned by a test that reads the resolved descriptor, because nothing in +the rendered UI depends on it today. + +### Complexity / DimensionsMode — displayed default vs saved key + +A ValueType that declares neither DISPLAYS MATLAB's default, `real` and `Fixed` — the same +pair `Simulink.BusElement` defaults to, and NOT the `auto` a `Simulink.Signal` uses. Two +places have to agree on that: `valueType.json` overrides the shared `dimensionsMode` +descriptor's `default` per class (which feeds the TABLE column via `schemaColumns`) and the +constructor's fallback feeds the Property Inspector. The test asserts the two AGREE rather +than asserting each alone. + +Display values only: `_serializedOverrides` writes each key only when the FILE carried it +or the live value differs from the default, so a ValueType the file left silent saves +silent. See the BusElement doc for why the gate cannot be a truthiness test. + +### No `*_internal` aliases + +Unlike `Simulink.BusElement`, none of these properties is read through a `*_internal` +alias: a probe wrote a ValueType with every property non-default and the dictionary came +back with flat keys only. That aliasing is specific to bus elements in SLX XML, so looking +for it here would be inventing a spelling MATLAB does not use. + ### Value column - A ValueType has no scalar "value" — `displayValue` returns `''` and @@ -52,7 +100,12 @@ editable via the UI. ## Allowed values (enums / comboboxes) -None exposed in our UI. Complexity ('real'/'complex') is read-only. +- Complexity → `['real', 'complex']` (`PropComplexity.readOptions`) +- DimensionsMode → `['Fixed', 'Variable']` (`PropDimensionsMode.readOptions`) + +Exact case, not normalized in either direction: MATLAB wrote 'real' lower case and 'Fixed' +capitalized and refuses the other spelling of each, so a case-insensitive match here would +produce a file MATLAB will not load. ## Validation mirrored in code @@ -60,6 +113,18 @@ None exposed in our UI. Complexity ('real'/'complex') is read-only. identifier, unique in namespace, max 63 chars, not a keyword). Test: `test/parity/fidelity/typedef.fidelity.test.ts`. +- Min / Max: `setProperty` routes to `DataNode._setMinMax`, the shared finite-real-double- + scalar rule (`{error, reason: "