@elaraai/east-diagnostics 1.0.80 → 1.0.82
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 +26 -5
- package/dist/src/east-value.d.ts +42 -0
- package/dist/src/east-value.d.ts.map +1 -0
- package/dist/src/east-value.js +223 -0
- package/dist/src/east-value.js.map +1 -0
- package/dist/src/rules/index.d.ts +18 -0
- package/dist/src/rules/index.d.ts.map +1 -1
- package/dist/src/rules/index.js +38 -0
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/no-handrolled-value-type-mirror.d.ts.map +1 -1
- package/dist/src/rules/no-handrolled-value-type-mirror.js +91 -18
- package/dist/src/rules/no-handrolled-value-type-mirror.js.map +1 -1
- package/dist/src/rules/no-handrolled-variant.d.ts.map +1 -1
- package/dist/src/rules/no-handrolled-variant.js +60 -3
- package/dist/src/rules/no-handrolled-variant.js.map +1 -1
- package/dist/src/rules/no-host-comparison-on-east-values.d.ts.map +1 -1
- package/dist/src/rules/no-host-comparison-on-east-values.js +78 -33
- package/dist/src/rules/no-host-comparison-on-east-values.js.map +1 -1
- package/dist/src/rules/no-host-parse-to-east-values.d.ts +3 -0
- package/dist/src/rules/no-host-parse-to-east-values.d.ts.map +1 -0
- package/dist/src/rules/no-host-parse-to-east-values.js +84 -0
- package/dist/src/rules/no-host-parse-to-east-values.js.map +1 -0
- package/dist/src/rules/no-host-print-of-east-values.d.ts +3 -0
- package/dist/src/rules/no-host-print-of-east-values.d.ts.map +1 -0
- package/dist/src/rules/no-host-print-of-east-values.js +92 -0
- package/dist/src/rules/no-host-print-of-east-values.js.map +1 -0
- package/dist/src/rules/no-js-collection-for-east-collection.d.ts +3 -0
- package/dist/src/rules/no-js-collection-for-east-collection.d.ts.map +1 -0
- package/dist/src/rules/no-js-collection-for-east-collection.js +70 -0
- package/dist/src/rules/no-js-collection-for-east-collection.js.map +1 -0
- package/dist/src/rules/no-js-type-dispatch-on-east-values.d.ts +7 -0
- package/dist/src/rules/no-js-type-dispatch-on-east-values.d.ts.map +1 -0
- package/dist/src/rules/no-js-type-dispatch-on-east-values.js +40 -0
- package/dist/src/rules/no-js-type-dispatch-on-east-values.js.map +1 -0
- package/dist/src/rules/no-module-scope-east-macro.d.ts.map +1 -1
- package/dist/src/rules/no-module-scope-east-macro.js +105 -17
- package/dist/src/rules/no-module-scope-east-macro.js.map +1 -1
- package/dist/src/rules/prefer-some-none.d.ts +0 -4
- package/dist/src/rules/prefer-some-none.d.ts.map +1 -1
- package/dist/src/rules/prefer-some-none.js +75 -4
- package/dist/src/rules/prefer-some-none.js.map +1 -1
- package/dist/src/run.d.ts.map +1 -1
- package/dist/src/run.js +2 -1
- package/dist/src/run.js.map +1 -1
- package/dist/src/types.d.ts +3 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-js-type-dispatch-on-east-values.d.ts","sourceRoot":"","sources":["../../../src/rules/no-js-type-dispatch-on-east-values.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAa5C,eAAO,MAAM,4BAA4B,EAAE,QAyB1C,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { importsEastPackage } from "../east-source.js";
|
|
2
|
+
import { isEastValueExpression } from "../east-value.js";
|
|
3
|
+
const NAME = "no-js-type-dispatch-on-east-values";
|
|
4
|
+
const CODE = 990035;
|
|
5
|
+
// `typeof` and `instanceof` ask JavaScript what a decoded East value is, and the
|
|
6
|
+
// answer loses its East type: an Integer and a Float are `bigint` and `number` only
|
|
7
|
+
// by accident of representation, every struct and variant is an `object`, and a
|
|
8
|
+
// Set and a Dict are whatever class built them. Dispatch on the value's East type
|
|
9
|
+
// — `isValueOf(v, T)`, or the static type it already has — or on its variant tag
|
|
10
|
+
// (`v.type`), which TypeScript narrows.
|
|
11
|
+
export const noJsTypeDispatchOnEastValues = {
|
|
12
|
+
name: NAME,
|
|
13
|
+
code: CODE,
|
|
14
|
+
description: "Flag typeof / instanceof on a decoded East value — dispatch on its East type (isValueOf) or its variant tag.",
|
|
15
|
+
check(node, ctx) {
|
|
16
|
+
const t = ctx.ts;
|
|
17
|
+
let target;
|
|
18
|
+
if (t.isTypeOfExpression(node))
|
|
19
|
+
target = node.expression;
|
|
20
|
+
else if (t.isBinaryExpression(node) && node.operatorToken.kind === t.SyntaxKind.InstanceOfKeyword)
|
|
21
|
+
target = node.left;
|
|
22
|
+
if (target === undefined)
|
|
23
|
+
return;
|
|
24
|
+
if (!importsEastPackage(ctx.sourceFile, t))
|
|
25
|
+
return;
|
|
26
|
+
if (!isEastValueExpression(target, ctx))
|
|
27
|
+
return;
|
|
28
|
+
const sf = ctx.sourceFile;
|
|
29
|
+
const start = node.getStart(sf);
|
|
30
|
+
ctx.report({
|
|
31
|
+
ruleName: NAME,
|
|
32
|
+
code: CODE,
|
|
33
|
+
start,
|
|
34
|
+
length: node.getEnd() - start,
|
|
35
|
+
messageText: "`typeof` / `instanceof` asks JavaScript what this East value is, and loses its East type. Dispatch on its East type (`isValueOf(v, T)`, or the type it already has) or on its variant tag (`v.type`).",
|
|
36
|
+
category: "warning",
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=no-js-type-dispatch-on-east-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-js-type-dispatch-on-east-values.js","sourceRoot":"","sources":["../../../src/rules/no-js-type-dispatch-on-east-values.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,IAAI,GAAG,oCAAoC,CAAC;AAClD,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,iFAAiF;AACjF,oFAAoF;AACpF,gFAAgF;AAChF,kFAAkF;AAClF,iFAAiF;AACjF,wCAAwC;AACxC,MAAM,CAAC,MAAM,4BAA4B,GAAa;IACpD,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,WAAW,EACT,8GAA8G;IAChH,KAAK,CAAC,IAAI,EAAE,GAAG;QACb,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC;QACX,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;aACpD,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,UAAU,CAAC,iBAAiB;YAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACtH,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAAE,OAAO;QACnD,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,OAAO;QAChD,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,MAAM,CAAC;YACT,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,IAAI;YACV,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK;YAC7B,WAAW,EACT,uMAAuM;YACzM,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-module-scope-east-macro.d.ts","sourceRoot":"","sources":["../../../src/rules/no-module-scope-east-macro.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"no-module-scope-east-macro.d.ts","sourceRoot":"","sources":["../../../src/rules/no-module-scope-east-macro.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,aAAa,CAAC;AAqLnE,eAAO,MAAM,sBAAsB,EAAE,QA8DpC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isEastExprType, isBlockBuilderType, isEastDefinitionType } from "../east-type.js";
|
|
2
2
|
import { insideBlockScope } from "../block-scope.js";
|
|
3
3
|
import { chainRootReceiver } from "../east-ir.js";
|
|
4
|
-
import { importsEastPackage } from "../east-source.js";
|
|
4
|
+
import { importDeclarationOf, importsEastPackage, resolvesToEastImport } from "../east-source.js";
|
|
5
5
|
const NAME = "no-module-scope-east-macro";
|
|
6
6
|
const CODE = 990011;
|
|
7
7
|
const VALUE_CONSTRUCTORS = new Set(["variant", "some"]);
|
|
@@ -19,20 +19,27 @@ function isJsx(node, t) {
|
|
|
19
19
|
function isHostTemplate(e, t) {
|
|
20
20
|
return t.isTemplateExpression(unparen(e, t));
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
// `variant(…)` / `some(…)` build East IR only when their payload is IR (an `Expr`,
|
|
23
|
+
// or an East builder); over plain host data they build a decoded VALUE — what a
|
|
24
|
+
// renderer, a runtime or a test legitimately makes — and `none` alone is a value.
|
|
25
|
+
function hasIrArgument(call, ctx) {
|
|
26
|
+
return call.arguments.some((a) => isEastExprType(ctx.checker.getTypeAtLocation(a)) || containsEastBuilder(a, ctx));
|
|
27
|
+
}
|
|
28
|
+
function isEastValueConstructor(expr, ctx) {
|
|
29
|
+
const t = ctx.ts;
|
|
23
30
|
if (t.isCallExpression(expr)) {
|
|
24
31
|
const callee = expr.expression;
|
|
25
32
|
if (t.isIdentifier(callee) && VALUE_CONSTRUCTORS.has(callee.text))
|
|
26
|
-
return
|
|
33
|
+
return hasIrArgument(expr, ctx);
|
|
27
34
|
return (t.isPropertyAccessExpression(callee) && t.isIdentifier(callee.expression) && callee.expression.text === "East" && callee.name.text === "value");
|
|
28
35
|
}
|
|
29
|
-
return
|
|
36
|
+
return false;
|
|
30
37
|
}
|
|
31
38
|
function isEastBuilderCall(call, ctx) {
|
|
32
39
|
const t = ctx.ts;
|
|
33
40
|
const callee = call.expression;
|
|
34
41
|
if (t.isIdentifier(callee) && VALUE_CONSTRUCTORS.has(callee.text))
|
|
35
|
-
return
|
|
42
|
+
return hasIrArgument(call, ctx);
|
|
36
43
|
const root = chainRootReceiver(callee, ctx);
|
|
37
44
|
if (t.isIdentifier(root) && root.text === "East")
|
|
38
45
|
return true;
|
|
@@ -64,7 +71,7 @@ function returnBuildsEast(r, ctx) {
|
|
|
64
71
|
// definition it returns has East builders (an `East.function` body) inside.
|
|
65
72
|
if (isEastDefinitionType(ctx.checker.getTypeAtLocation(r)))
|
|
66
73
|
return false;
|
|
67
|
-
if (isEastValueConstructor(r,
|
|
74
|
+
if (isEastValueConstructor(r, ctx))
|
|
68
75
|
return true;
|
|
69
76
|
if (isEastExprType(ctx.checker.getTypeAtLocation(r)))
|
|
70
77
|
return true;
|
|
@@ -74,6 +81,76 @@ function returnBuildsEast(r, ctx) {
|
|
|
74
81
|
return true;
|
|
75
82
|
return containsEastBuilder(r, ctx);
|
|
76
83
|
}
|
|
84
|
+
// Is `root` the receiver of a call that builds an East PROGRAM — `East.*` (an
|
|
85
|
+
// `East.value`, `East.function`, …), a block's `$`, or an e3 declaration on the
|
|
86
|
+
// `@elaraai/e3` import (`e3.input`, `e3.task`, …)? Utilities over decoded values
|
|
87
|
+
// (`encodeBeast2For`, `printFor`, `equalFor`, …) build no program.
|
|
88
|
+
function buildsEastProgram(root, ctx) {
|
|
89
|
+
const t = ctx.ts;
|
|
90
|
+
if (!t.isIdentifier(root))
|
|
91
|
+
return false;
|
|
92
|
+
if (isBlockBuilderType(ctx.checker.getTypeAtLocation(root)))
|
|
93
|
+
return true;
|
|
94
|
+
if (!resolvesToEastImport(root, ctx.checker, t))
|
|
95
|
+
return false;
|
|
96
|
+
if (root.text === "East")
|
|
97
|
+
return true;
|
|
98
|
+
const imp = importDeclarationOf(ctx.checker.getSymbolAtLocation(root), t);
|
|
99
|
+
return imp !== undefined && t.isStringLiteral(imp.moduleSpecifier) && imp.moduleSpecifier.text === "@elaraai/e3";
|
|
100
|
+
}
|
|
101
|
+
// Does `call`'s result flow — through array and object literals, templates and
|
|
102
|
+
// constructors — into a call that builds an East program?
|
|
103
|
+
function flowsIntoEastProgram(call, ctx) {
|
|
104
|
+
const t = ctx.ts;
|
|
105
|
+
let node = call;
|
|
106
|
+
for (;;) {
|
|
107
|
+
const parent = node.parent;
|
|
108
|
+
if (parent === undefined)
|
|
109
|
+
return false;
|
|
110
|
+
if (t.isArrayLiteralExpression(parent) || t.isObjectLiteralExpression(parent) || t.isPropertyAssignment(parent) ||
|
|
111
|
+
t.isParenthesizedExpression(parent) || t.isSpreadElement(parent) || t.isTemplateSpan(parent) ||
|
|
112
|
+
t.isTemplateExpression(parent) || t.isNewExpression(parent)) {
|
|
113
|
+
node = parent;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (t.isCallExpression(parent) && parent.expression !== node) {
|
|
117
|
+
return buildsEastProgram(chainRootReceiver(parent.expression, ctx), ctx);
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// A helper that builds decoded VALUES or composite string KEYS from host data is
|
|
123
|
+
// a macro only where its output becomes part of an East program — a call inside
|
|
124
|
+
// an East block, or one whose result flows into `East.*` / an e3 declaration. The
|
|
125
|
+
// same helper in a renderer, a runtime or a test builds host data (a fixture, a
|
|
126
|
+
// cache or channel key) and is not.
|
|
127
|
+
function feedsEastProgram(name, ctx) {
|
|
128
|
+
const t = ctx.ts;
|
|
129
|
+
const symbol = ctx.checker.getSymbolAtLocation(name);
|
|
130
|
+
if (symbol === undefined)
|
|
131
|
+
return false;
|
|
132
|
+
let found = false;
|
|
133
|
+
const visit = (n) => {
|
|
134
|
+
if (found)
|
|
135
|
+
return;
|
|
136
|
+
if (t.isCallExpression(n) && t.isIdentifier(n.expression) && ctx.checker.getSymbolAtLocation(n.expression) === symbol) {
|
|
137
|
+
if (insideBlockScope(n, ctx) || flowsIntoEastProgram(n, ctx)) {
|
|
138
|
+
found = true;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
t.forEachChild(n, visit);
|
|
143
|
+
};
|
|
144
|
+
visit(ctx.sourceFile);
|
|
145
|
+
return found;
|
|
146
|
+
}
|
|
147
|
+
// A `variant(…)` / `some(…)` call or `none` — a decoded East value.
|
|
148
|
+
function isValueConstruction(e, t) {
|
|
149
|
+
const r = unparen(e, t);
|
|
150
|
+
if (t.isIdentifier(r))
|
|
151
|
+
return r.text === "none";
|
|
152
|
+
return t.isCallExpression(r) && t.isIdentifier(r.expression) && VALUE_CONSTRUCTORS.has(r.expression.text);
|
|
153
|
+
}
|
|
77
154
|
function returnExpressions(fn, t) {
|
|
78
155
|
if (fn.body === undefined)
|
|
79
156
|
return [];
|
|
@@ -90,14 +167,18 @@ function returnExpressions(fn, t) {
|
|
|
90
167
|
t.forEachChild(fn.body, visit);
|
|
91
168
|
return out;
|
|
92
169
|
}
|
|
93
|
-
// A module-scope (outside any East block) TS helper
|
|
94
|
-
// IR
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
// a
|
|
99
|
-
//
|
|
100
|
-
//
|
|
170
|
+
// A module-scope (outside any East block) TS helper is an authoring-time macro —
|
|
171
|
+
// the signature of a string-keyed / hand-built-IR data model — when every return
|
|
172
|
+
// builds East IR (`East.value`, an `Expr` chain, a `variant`/`some` over IR); or
|
|
173
|
+
// when every return builds a decoded East value (`variant`/`some`/`none` over host
|
|
174
|
+
// data) or a composite string key from a host template (`(o, l) => \`${o}|${l}\``)
|
|
175
|
+
// AND a call of it feeds an East program (inside a block, or into `East.*` / an e3
|
|
176
|
+
// declaration). It cannot be serialized/recursed and expands inline at each call.
|
|
177
|
+
// Make it a real `East.function`, or model the data with typed keys / nested East
|
|
178
|
+
// structures. A helper building values or keys for HOST code — a renderer's
|
|
179
|
+
// fixture, a cache or channel key — is host data, not a macro. (In-block TS
|
|
180
|
+
// closures are flagged by `no-host-in-east-block`; this rule covers the
|
|
181
|
+
// module-scope helpers that the block-scoped rule cannot see.)
|
|
101
182
|
export const noModuleScopeEastMacro = {
|
|
102
183
|
name: NAME,
|
|
103
184
|
code: CODE,
|
|
@@ -111,15 +192,19 @@ export const noModuleScopeEastMacro = {
|
|
|
111
192
|
return;
|
|
112
193
|
let fn;
|
|
113
194
|
let reportNode;
|
|
195
|
+
let nameNode;
|
|
114
196
|
if (t.isFunctionDeclaration(node) && node.body !== undefined) {
|
|
115
197
|
fn = node;
|
|
116
198
|
reportNode = node.name ?? node;
|
|
199
|
+
nameNode = node.name;
|
|
117
200
|
}
|
|
118
201
|
else if (t.isVariableDeclaration(node) &&
|
|
119
202
|
node.initializer !== undefined &&
|
|
120
203
|
(t.isArrowFunction(node.initializer) || t.isFunctionExpression(node.initializer))) {
|
|
121
204
|
fn = node.initializer;
|
|
122
205
|
reportNode = node.name;
|
|
206
|
+
if (t.isIdentifier(node.name))
|
|
207
|
+
nameNode = node.name;
|
|
123
208
|
}
|
|
124
209
|
if (fn === undefined || reportNode === undefined)
|
|
125
210
|
return;
|
|
@@ -136,9 +221,12 @@ export const noModuleScopeEastMacro = {
|
|
|
136
221
|
return; // UI-composition helper
|
|
137
222
|
if (rs.length === 0)
|
|
138
223
|
return;
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
224
|
+
// IR built in a module-scope helper is a macro wherever it is used; decoded
|
|
225
|
+
// values and composite keys are one where they feed an East program.
|
|
226
|
+
const everyBuildsIr = rs.every((r) => returnBuildsEast(r, ctx));
|
|
227
|
+
const everyBuildsValue = !everyBuildsIr && rs.every((r) => returnBuildsEast(r, ctx) || isValueConstruction(r, t));
|
|
228
|
+
const everyHostKey = !everyBuildsIr && !everyBuildsValue && rs.every((r) => isHostTemplate(r, t));
|
|
229
|
+
if (!everyBuildsIr && !((everyBuildsValue || everyHostKey) && nameNode !== undefined && feedsEastProgram(nameNode, ctx)))
|
|
142
230
|
return;
|
|
143
231
|
const sf = ctx.sourceFile;
|
|
144
232
|
const start = reportNode.getStart(sf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-module-scope-east-macro.js","sourceRoot":"","sources":["../../../src/rules/no-module-scope-east-macro.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-module-scope-east-macro.js","sourceRoot":"","sources":["../../../src/rules/no-module-scope-east-macro.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
-
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
-
*/
|
|
5
1
|
import type { EastRule } from "../types.js";
|
|
6
2
|
export declare const preferSomeNone: EastRule;
|
|
7
3
|
//# sourceMappingURL=prefer-some-none.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-some-none.d.ts","sourceRoot":"","sources":["../../../src/rules/prefer-some-none.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prefer-some-none.d.ts","sourceRoot":"","sources":["../../../src/rules/prefer-some-none.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AA6EzD,eAAO,MAAM,cAAc,EAAE,QAmC5B,CAAC"}
|
|
@@ -1,12 +1,80 @@
|
|
|
1
1
|
import { resolvesToEastImport } from "../east-source.js";
|
|
2
|
+
import { isEastExprType } from "../east-type.js";
|
|
2
3
|
const NAME = "prefer-some-none";
|
|
3
4
|
const CODE = 990003;
|
|
5
|
+
/** The members of each type in `types`, a union's taken apart. */
|
|
6
|
+
function membersOf(types) {
|
|
7
|
+
return types.flatMap((type) => (type.isUnion() ? type.types : [type]));
|
|
8
|
+
}
|
|
9
|
+
/** The string-literal values of `type` (a literal or a union of them). */
|
|
10
|
+
function literalsOf(type) {
|
|
11
|
+
return membersOf([type]).flatMap((m) => (m.isStringLiteral() ? [m.value] : []));
|
|
12
|
+
}
|
|
13
|
+
/** The variant-shaped members of `expected` (an object with a `value` and a
|
|
14
|
+
* string-literal `type`), each with its tags. An `Expr` member (a factory's
|
|
15
|
+
* authoring input) or a string shorthand is none. */
|
|
16
|
+
function variantMembers(expected, at, ctx) {
|
|
17
|
+
const out = [];
|
|
18
|
+
for (const member of membersOf(expected)) {
|
|
19
|
+
if (isEastExprType(member))
|
|
20
|
+
continue;
|
|
21
|
+
if (ctx.checker.getPropertyOfType(member, "value") === undefined)
|
|
22
|
+
continue;
|
|
23
|
+
const tag = ctx.checker.getPropertyOfType(member, "type");
|
|
24
|
+
if (tag === undefined)
|
|
25
|
+
continue;
|
|
26
|
+
out.push({ member, tags: literalsOf(ctx.checker.getTypeOfSymbolAtLocation(tag, at)) });
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
/** The types of property `name` across the members of `types`. */
|
|
31
|
+
function propertyTypes(types, name, at, ctx) {
|
|
32
|
+
return membersOf(types).flatMap((m) => {
|
|
33
|
+
const prop = ctx.checker.getPropertyOfType(m, name);
|
|
34
|
+
return prop === undefined ? [] : [ctx.checker.getTypeOfSymbolAtLocation(prop, at)];
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Does `type` say nothing about what is expected — `any`, `unknown`, a type
|
|
38
|
+
* parameter still being inferred? */
|
|
39
|
+
function uninformative(type, ctx) {
|
|
40
|
+
const t = ctx.ts;
|
|
41
|
+
return (type.flags & (t.TypeFlags.Any | t.TypeFlags.Unknown | t.TypeFlags.TypeParameter)) !== 0;
|
|
42
|
+
}
|
|
43
|
+
/** What `e` may be expected to be, as the types it could take — empty when
|
|
44
|
+
* nothing says. The payload of the generic `variant(tag, payload)` gets no
|
|
45
|
+
* context from TypeScript (its type is inferred from the payload itself), so
|
|
46
|
+
* the expected type is read down from the enclosing value's instead: the payload
|
|
47
|
+
* of an East `variant(tag, …)` is the `value` of each expected member with that
|
|
48
|
+
* tag, and a property of an object literal is that property of the literal's
|
|
49
|
+
* expected types. Anywhere else, TypeScript's own contextual type. */
|
|
50
|
+
function expectedTypes(e, ctx, depth = 0) {
|
|
51
|
+
const t = ctx.ts;
|
|
52
|
+
const parent = e.parent;
|
|
53
|
+
if (depth < 8 && t.isPropertyAssignment(parent) && parent.initializer === e && (t.isIdentifier(parent.name) || t.isStringLiteral(parent.name))) {
|
|
54
|
+
const literal = expectedTypes(parent.parent, ctx, depth + 1);
|
|
55
|
+
if (literal.length > 0)
|
|
56
|
+
return propertyTypes(literal, parent.name.text, e, ctx);
|
|
57
|
+
}
|
|
58
|
+
if (depth < 8 && t.isCallExpression(parent) && parent.arguments[1] === e && t.isIdentifier(parent.expression) &&
|
|
59
|
+
parent.expression.text === "variant" && resolvesToEastImport(parent.expression, ctx.checker, t)) {
|
|
60
|
+
const tag = parent.arguments[0];
|
|
61
|
+
if (tag === undefined || !t.isStringLiteralLike(tag))
|
|
62
|
+
return [];
|
|
63
|
+
const matches = variantMembers(expectedTypes(parent, ctx, depth + 1), e, ctx).filter((m) => m.tags.includes(tag.text));
|
|
64
|
+
return propertyTypes(matches.map((m) => m.member), "value", e, ctx);
|
|
65
|
+
}
|
|
66
|
+
const direct = ctx.checker.getContextualType(e);
|
|
67
|
+
return direct !== undefined && !uninformative(direct, ctx) ? [direct] : [];
|
|
68
|
+
}
|
|
4
69
|
// `some(x)` / `none` are the canonical Option constructors; `variant("some", x)`
|
|
5
|
-
// and `variant("none", null)` produce the same value but are discouraged.
|
|
70
|
+
// and `variant("none", null)` produce the same value but are discouraged. A
|
|
71
|
+
// variant whose type has other cases beside one named `none` or `some` (a text
|
|
72
|
+
// decoration's `none`, a path's `some` step) is not an Option, and keeps its
|
|
73
|
+
// `variant(…)`; the rule reads that type through the payloads the value sits in.
|
|
6
74
|
export const preferSomeNone = {
|
|
7
75
|
name: NAME,
|
|
8
76
|
code: CODE,
|
|
9
|
-
description: 'Prefer some()/none over variant("some", …)/variant("none", null).',
|
|
77
|
+
description: 'Prefer some()/none over variant("some", …)/variant("none", null) for an Option.',
|
|
10
78
|
check(node, ctx) {
|
|
11
79
|
const t = ctx.ts;
|
|
12
80
|
if (!t.isCallExpression(node))
|
|
@@ -24,6 +92,8 @@ export const preferSomeNone = {
|
|
|
24
92
|
const tag = first.text;
|
|
25
93
|
if (tag !== "some" && tag !== "none")
|
|
26
94
|
return;
|
|
95
|
+
if (variantMembers(expectedTypes(node, ctx), node, ctx).some((m) => m.tags.some((other) => other !== "some" && other !== "none")))
|
|
96
|
+
return;
|
|
27
97
|
const sf = ctx.sourceFile;
|
|
28
98
|
const start = node.getStart(sf);
|
|
29
99
|
ctx.report({
|
|
@@ -31,9 +101,10 @@ export const preferSomeNone = {
|
|
|
31
101
|
code: CODE,
|
|
32
102
|
start,
|
|
33
103
|
length: node.getEnd() - start,
|
|
34
|
-
messageText: tag === "some"
|
|
104
|
+
messageText: (tag === "some"
|
|
35
105
|
? 'Use `some(value)` instead of `variant("some", value)`.'
|
|
36
|
-
: 'Use `none` instead of `variant("none", null)`.'
|
|
106
|
+
: 'Use `none` instead of `variant("none", null)`.') +
|
|
107
|
+
" If this is the case of a variant that is not an Option, type the value it builds (`ValueTypeOf<typeof T>`) so the case can be told apart.",
|
|
37
108
|
category: "warning",
|
|
38
109
|
});
|
|
39
110
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-some-none.js","sourceRoot":"","sources":["../../../src/rules/prefer-some-none.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prefer-some-none.js","sourceRoot":"","sources":["../../../src/rules/prefer-some-none.ts"],"names":[],"mappings":"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"}
|
package/dist/src/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIpG;;;;0EAI0E;AAC1E,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,GAAE,gBAAqB,EAC9B,KAAK,GAAE,SAAS,QAAQ,EAAa,GACpC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIpG;;;;0EAI0E;AAC1E,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,GAAE,gBAAqB,EAC9B,KAAK,GAAE,SAAS,QAAQ,EAAa,GACpC,cAAc,EAAE,CAuBlB"}
|
package/dist/src/run.js
CHANGED
|
@@ -18,7 +18,8 @@ export function runEastRules(tsModule, program, sourceFile, checker, options = {
|
|
|
18
18
|
report: (d) => diagnostics.push(d),
|
|
19
19
|
};
|
|
20
20
|
const disabled = new Set(options.disabled ?? []);
|
|
21
|
-
const
|
|
21
|
+
const only = options.only === undefined ? undefined : new Set(options.only);
|
|
22
|
+
const active = rules.filter((rule) => !disabled.has(rule.name) && (only === undefined || only.has(rule.name)));
|
|
22
23
|
const visit = (node) => {
|
|
23
24
|
for (const rule of active)
|
|
24
25
|
rule.check(node, ctx);
|
package/dist/src/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;0EAI0E;AAC1E,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,OAAmB,EACnB,UAAyB,EACzB,OAAuB,EACvB,UAA4B,EAAE,EAC9B,QAA6B,QAAQ;IAErC,IAAI,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACnE,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,QAAQ;QACZ,UAAU;QACV,OAAO;QACP,OAAO;QACP,OAAO;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;KACnC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;0EAI0E;AAC1E,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,OAAmB,EACnB,UAAyB,EACzB,OAAuB,EACvB,UAA4B,EAAE,EAC9B,QAA6B,QAAQ;IAErC,IAAI,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACnE,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,QAAQ;QACZ,UAAU;QACV,OAAO;QACP,OAAO;QACP,OAAO;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;KACnC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/G,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,KAAK,MAAM,IAAI,IAAI,MAAM;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjD,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,KAAK,CAAC,UAAU,CAAC,CAAC;IAElB,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -29,6 +29,9 @@ export interface EastDiagnostic {
|
|
|
29
29
|
export interface EastRulesOptions {
|
|
30
30
|
/** Rule names to disable. */
|
|
31
31
|
disabled?: readonly string[];
|
|
32
|
+
/** Rule names to run — every other rule is off (`disabled` still applies).
|
|
33
|
+
* `hostValueRuleNames` names the set that holds decoded East values. */
|
|
34
|
+
only?: readonly string[];
|
|
32
35
|
preferExplicitEastType?: {
|
|
33
36
|
/** `"under-determined"` (default) flags only values whose East type can't
|
|
34
37
|
* be inferred (empty `[]` / `{}` / `new Map()` / `new Set()`).
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC;gFACgF;AAChF,MAAM,MAAM,QAAQ,GAAG,cAAc,YAAY,CAAC,CAAC;AAEnD,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,sBAAsB,CAAC,EAAE;QACvB;;iEAEyD;QACzD,IAAI,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,CAAC;KAC9C,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB;;wEAEoE;IACpE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IACrB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;CAC9C"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC;gFACgF;AAChF,MAAM,MAAM,QAAQ,GAAG,cAAc,YAAY,CAAC,CAAC;AAEnD,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B;4EACwE;IACxE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,sBAAsB,CAAC,EAAE;QACvB;;iEAEyD;QACzD,IAAI,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,CAAC;KAC9C,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB;;wEAEoE;IACpE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IACrB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;CAC9C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elaraai/east-diagnostics",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.82",
|
|
4
4
|
"license": "AGPL-3.0-or-later",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "East-aware diagnostic rules over the TypeScript checker — one shared engine for the editor (tsserver plugin), the agent (headless daemon), and CI.",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "^22.18.1",
|
|
46
46
|
"typescript": "~5.9.2",
|
|
47
|
-
"@elaraai/east": "1.0.
|
|
48
|
-
"@elaraai/e3": "1.0.
|
|
47
|
+
"@elaraai/east": "1.0.82",
|
|
48
|
+
"@elaraai/e3": "1.0.82"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "tsc",
|