@memoarchitect/tools 0.15.3 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +2 -2
- package/packages/tools/lib/toolchain/providers/syside-python.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/providers/syside-python.js +3 -0
- package/packages/tools/lib/toolchain/providers/syside-python.js.map +1 -1
- package/packages/tools/lib/toolchain/providers/syside.d.ts +12 -2
- package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/providers/syside.js +20 -6
- package/packages/tools/lib/toolchain/providers/syside.js.map +1 -1
- package/packages/tools/python/memo_stage1_syside.py +40 -10
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
<code>memo-tools 0.
|
|
12
|
+
<code>memo-tools 0.16.0</code> · MIT · SysML v2 · ISO 14971 · IEC 62304 · ISO/IEC/IEEE 42010
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
> **0.15.0 is an experimental release.** It adds support for the OpenSysML compiler alongside SysIDE; the OpenSysML path is new and has had less use. The next version will be more stable. Pin an exact version.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memoarchitect/tools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "MEMO tools — SysML v2 parser, semantic model, validation, project operations, and CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./packages/tools/lib/index.js",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"check:transport": "node scripts/measure-transport-latency.mjs"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@memoarchitect/ontology": "0.
|
|
57
|
+
"@memoarchitect/ontology": "0.16.0",
|
|
58
58
|
"@openmbee/opensysml": "0.10.0",
|
|
59
59
|
"chalk": "^5.3.0",
|
|
60
60
|
"chokidar": "^4.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syside-python.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/syside-python.ts"],"names":[],"mappings":"AA0BA,mHAAmH;AACnH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"syside-python.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/syside-python.ts"],"names":[],"mappings":"AA0BA,mHAAmH;AACnH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAuBzG;AAID,0GAA0G;AAC1G,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAE7G;AAED,+EAA+E;AAC/E,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAK3G"}
|
|
@@ -40,6 +40,9 @@ export function sysidePythonCandidates(projectDir, env = process.env) {
|
|
|
40
40
|
}
|
|
41
41
|
// Where SysIDE's own documentation puts it, then the interpreters on PATH.
|
|
42
42
|
add(inEnvironment(join(homedir(), '.venvs', 'syside')));
|
|
43
|
+
// SysIDE 1.0 ships its CLI inside the Python package, so `uv tool install syside`
|
|
44
|
+
// is the way to get the `syside` command, and it keeps the interpreter here.
|
|
45
|
+
add(inEnvironment(join(env.UV_TOOL_DIR ?? join(homedir(), '.local', 'share', 'uv', 'tools'), 'syside')));
|
|
43
46
|
add(whichExecutable('python3', env));
|
|
44
47
|
add(whichExecutable('python', env));
|
|
45
48
|
return found.filter(candidate => existsSync(candidate));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syside-python.js","sourceRoot":"","sources":["../../../src/toolchain/providers/syside-python.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"syside-python.js","sourceRoot":"","sources":["../../../src/toolchain/providers/syside-python.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,19 @@ export interface SysideToolConfig {
|
|
|
12
12
|
/** Validation scope. Defaults to `all`. Use `none` for syntax only. */
|
|
13
13
|
diagnose?: 'all' | 'external' | 'project' | 'none';
|
|
14
14
|
}
|
|
15
|
-
export declare function buildSysideInvocation(context: ProviderContext): ToolInvocation;
|
|
16
15
|
/**
|
|
17
|
-
* `
|
|
16
|
+
* `all` adds the diagnostics of SysIDE's bundled standard library to the
|
|
17
|
+
* project's. 1.0.0 reports 22 errors and 10 warnings there (Geometry and
|
|
18
|
+
* Systems Library files nobody here owns), so a clean project would fail every
|
|
19
|
+
* check. `project` still diagnoses each file the project ships, including
|
|
20
|
+
* namespace shadowing and reserved-keyword misuse. 0.10.x is clean under both,
|
|
21
|
+
* so it keeps the stricter default.
|
|
22
|
+
*/
|
|
23
|
+
export declare function defaultDiagnoseScope(version: string | undefined): 'all' | 'project';
|
|
24
|
+
/** `version` is the installed SysIDE's, read from the executable when not given. */
|
|
25
|
+
export declare function buildSysideInvocation(context: ProviderContext, version?: string | undefined): ToolInvocation;
|
|
26
|
+
/**
|
|
27
|
+
* `syside --version` prints `syside 1.0.0 <commit>` (0.10 prints the same shape); the commit is noise for a
|
|
18
28
|
* probe listing. Reduce to the version number when the shape is recognisable,
|
|
19
29
|
* and otherwise report whatever it said rather than nothing.
|
|
20
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syside.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/syside.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAER,eAAe,EAEf,cAAc,EAEd,mBAAmB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC7B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;CACtD;AAsCD,wBAAgB,
|
|
1
|
+
{"version":3,"file":"syside.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/syside.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAER,eAAe,EAEf,cAAc,EAEd,mBAAmB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC7B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;CACtD;AAsCD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAGnF;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,MAAM,GAAG,SAA2C,GAC9D,cAAc,CAiBhB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIlF;AA0CD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CA+BrF;AAED,eAAO,MAAM,yBAAyB,EAAE,mBA2DvC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ─── Adapter: Syside CLI ─────────────────────────────────────────────────────
|
|
2
2
|
//
|
|
3
3
|
// The best validator available today: full semantic validation, 151 stable
|
|
4
|
-
// rule codes, absolute paths and full ranges. It cannot emit IR (`syside 0.10.
|
|
4
|
+
// rule codes, absolute paths and full ranges. It cannot emit IR (`syside` 0.10 and 1.0
|
|
5
5
|
// exposes only check/format/rule/viz/table), so it fills the validator role and
|
|
6
6
|
// nothing else — which is precisely why the validator and lowering roles are
|
|
7
7
|
// separate. Requiring one tool to do both would delete the only external
|
|
@@ -37,7 +37,7 @@ const SETTINGS_SCHEMA = [
|
|
|
37
37
|
path: `${SYSIDE_PROVIDER_ID}.diagnose`,
|
|
38
38
|
type: 'enum',
|
|
39
39
|
values: DIAGNOSE_SCOPES,
|
|
40
|
-
description: 'Validation scope. Defaults to all.',
|
|
40
|
+
description: 'Validation scope. Defaults to all, and to project for SysIDE 1.0 and later, whose `all` also fails its own bundled standard library.',
|
|
41
41
|
},
|
|
42
42
|
];
|
|
43
43
|
function settings(context) {
|
|
@@ -46,9 +46,23 @@ function settings(context) {
|
|
|
46
46
|
function command(context) {
|
|
47
47
|
return resolveExecutable(settings(context).executable, SYSIDE_PROVIDER_ID, context.projectDir);
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
/**
|
|
50
|
+
* `all` adds the diagnostics of SysIDE's bundled standard library to the
|
|
51
|
+
* project's. 1.0.0 reports 22 errors and 10 warnings there (Geometry and
|
|
52
|
+
* Systems Library files nobody here owns), so a clean project would fail every
|
|
53
|
+
* check. `project` still diagnoses each file the project ships, including
|
|
54
|
+
* namespace shadowing and reserved-keyword misuse. 0.10.x is clean under both,
|
|
55
|
+
* so it keeps the stricter default.
|
|
56
|
+
*/
|
|
57
|
+
export function defaultDiagnoseScope(version) {
|
|
58
|
+
const major = version ? Number(version.split('.')[0]) : NaN;
|
|
59
|
+
return major >= 1 ? 'project' : 'all';
|
|
60
|
+
}
|
|
61
|
+
/** `version` is the installed SysIDE's, read from the executable when not given. */
|
|
62
|
+
export function buildSysideInvocation(context, version = cachedVersion(command(context))) {
|
|
50
63
|
const tool = settings(context);
|
|
51
|
-
const
|
|
64
|
+
const scope = tool.diagnose ?? defaultDiagnoseScope(version);
|
|
65
|
+
const args = ['check', '--colour', 'no', '--diagnose', scope];
|
|
52
66
|
if (tool.configFile)
|
|
53
67
|
args.push('--config', resolveProjectPath(tool.configFile, context.projectDir));
|
|
54
68
|
if (tool.warningsAsErrors ?? true)
|
|
@@ -69,7 +83,7 @@ export function buildSysideInvocation(context) {
|
|
|
69
83
|
return { command: command(context), args, provider: SYSIDE_PROVIDER_ID };
|
|
70
84
|
}
|
|
71
85
|
/**
|
|
72
|
-
* `syside --version` prints `syside 0.
|
|
86
|
+
* `syside --version` prints `syside 1.0.0 <commit>` (0.10 prints the same shape); the commit is noise for a
|
|
73
87
|
* probe listing. Reduce to the version number when the shape is recognisable,
|
|
74
88
|
* and otherwise report whatever it said rather than nothing.
|
|
75
89
|
*/
|
|
@@ -151,7 +165,7 @@ export function parseSysideDiagnostics(output, version) {
|
|
|
151
165
|
export const sysideValidatorDescriptor = {
|
|
152
166
|
id: SYSIDE_PROVIDER_ID,
|
|
153
167
|
role: 'validator',
|
|
154
|
-
// No `emit-ir`: `syside 0.10.
|
|
168
|
+
// No `emit-ir`: neither `syside` 0.10 nor 1.0 has an AST, semantic-model or IR export.
|
|
155
169
|
capabilities: ['check', 'format'],
|
|
156
170
|
settingsSchema: SETTINGS_SCHEMA,
|
|
157
171
|
probe(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syside.js","sourceRoot":"","sources":["../../../src/toolchain/providers/syside.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"syside.js","sourceRoot":"","sources":["../../../src/toolchain/providers/syside.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,7 @@ alone, `diagnostics` of the libraries and the project), with `"library":
|
|
|
33
33
|
from __future__ import annotations
|
|
34
34
|
|
|
35
35
|
import argparse
|
|
36
|
+
import contextlib
|
|
36
37
|
import json
|
|
37
38
|
import os
|
|
38
39
|
import re
|
|
@@ -94,10 +95,16 @@ def classify(project_root: Path, library_roots: list[Path], files: list[str] | N
|
|
|
94
95
|
|
|
95
96
|
def reported(diagnostics) -> list[dict]:
|
|
96
97
|
out = []
|
|
97
|
-
for
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
|
|
98
|
+
for item in diagnostics.all:
|
|
99
|
+
# SysIDE 1.0 yields (document url, diagnostic) pairs and has no
|
|
100
|
+
# `full_message`; 0.10 yields the diagnostic alone.
|
|
101
|
+
url, diagnostic = item if isinstance(item, tuple) else (None, item)
|
|
102
|
+
if hasattr(diagnostic, "full_message"):
|
|
103
|
+
# The full message is what `syside check` prints: the snippet with its
|
|
104
|
+
# carets (the span's width) and any related note. Colour is stripped.
|
|
105
|
+
text = ANSI.sub("", diagnostic.full_message).rstrip()
|
|
106
|
+
else:
|
|
107
|
+
text = f"{url}:{diagnostic.line}:{diagnostic.col}: {severity_of(diagnostic)} ({diagnostic.code}): {diagnostic.message}"
|
|
101
108
|
out.append({"severity": severity_of(diagnostic), "text": text})
|
|
102
109
|
return out
|
|
103
110
|
|
|
@@ -147,6 +154,29 @@ def base_of(path: Path, role: str, project_root: Path, library_roots: list[Path]
|
|
|
147
154
|
(root for root in library_roots if root in path.parents), path.parent)
|
|
148
155
|
|
|
149
156
|
|
|
157
|
+
def user_documents(model):
|
|
158
|
+
"""The model's own documents. SysIDE 1.0 calls them `documents` and hands
|
|
159
|
+
them over already locked; 0.10 kept them as `user_docs`, locked by the caller."""
|
|
160
|
+
return model.user_docs if hasattr(model, "user_docs") else model.documents
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def standard_documents(model):
|
|
164
|
+
"""The standard library's documents: `stdlib_docs` up to SysIDE 0.10, the
|
|
165
|
+
model's environment's `documents` from 1.0."""
|
|
166
|
+
return model.stdlib_docs if hasattr(model, "stdlib_docs") else model.environment.documents
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@contextlib.contextmanager
|
|
170
|
+
def opened(shared):
|
|
171
|
+
"""A document to read: locked for the caller on 0.10 (`SharedMutex`), already
|
|
172
|
+
a `Document` on 1.0."""
|
|
173
|
+
if hasattr(shared, "lock"):
|
|
174
|
+
with shared.lock() as document:
|
|
175
|
+
yield document
|
|
176
|
+
else:
|
|
177
|
+
yield shared
|
|
178
|
+
|
|
179
|
+
|
|
150
180
|
def export(model, files: list[Path], role: str, project_root: Path, library_roots: list[Path],
|
|
151
181
|
standard: dict[str, str | None], carried: frozenset[str] = frozenset()):
|
|
152
182
|
"""The API JSON of the model's documents among `files`, all of one role,
|
|
@@ -157,8 +187,8 @@ def export(model, files: list[Path], role: str, project_root: Path, library_root
|
|
|
157
187
|
referenced: set[str] = set()
|
|
158
188
|
documents = []
|
|
159
189
|
index: dict[str, dict] = {}
|
|
160
|
-
for shared in model
|
|
161
|
-
with shared
|
|
190
|
+
for shared in user_documents(model):
|
|
191
|
+
with opened(shared) as document:
|
|
162
192
|
path = Path(document.url.path).resolve()
|
|
163
193
|
if str(path) not in wanted_files:
|
|
164
194
|
continue
|
|
@@ -174,8 +204,8 @@ def standard_names(model) -> dict[str, str | None]:
|
|
|
174
204
|
"""Each standard library element's qualified name (None for an unnamed one),
|
|
175
205
|
by id: read once, since walking the library is most of an export's cost."""
|
|
176
206
|
names: dict[str, str | None] = {}
|
|
177
|
-
for shared in model
|
|
178
|
-
with shared
|
|
207
|
+
for shared in standard_documents(model):
|
|
208
|
+
with opened(shared) as document:
|
|
179
209
|
for element in document.all_nodes(syside.Element):
|
|
180
210
|
qualified = element.qualified_name
|
|
181
211
|
names[str(element.element_id)] = str(qualified) if qualified else None
|
|
@@ -307,8 +337,8 @@ class Project:
|
|
|
307
337
|
if not reusable:
|
|
308
338
|
self.exported = {}
|
|
309
339
|
sent: set[str] = set()
|
|
310
|
-
for shared in model
|
|
311
|
-
with shared
|
|
340
|
+
for shared in user_documents(model):
|
|
341
|
+
with opened(shared) as document:
|
|
312
342
|
path = str(Path(document.url.path).resolve())
|
|
313
343
|
if path not in texts:
|
|
314
344
|
continue
|