@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.
Files changed (47) hide show
  1. package/README.md +26 -5
  2. package/dist/src/east-value.d.ts +42 -0
  3. package/dist/src/east-value.d.ts.map +1 -0
  4. package/dist/src/east-value.js +223 -0
  5. package/dist/src/east-value.js.map +1 -0
  6. package/dist/src/rules/index.d.ts +18 -0
  7. package/dist/src/rules/index.d.ts.map +1 -1
  8. package/dist/src/rules/index.js +38 -0
  9. package/dist/src/rules/index.js.map +1 -1
  10. package/dist/src/rules/no-handrolled-value-type-mirror.d.ts.map +1 -1
  11. package/dist/src/rules/no-handrolled-value-type-mirror.js +91 -18
  12. package/dist/src/rules/no-handrolled-value-type-mirror.js.map +1 -1
  13. package/dist/src/rules/no-handrolled-variant.d.ts.map +1 -1
  14. package/dist/src/rules/no-handrolled-variant.js +60 -3
  15. package/dist/src/rules/no-handrolled-variant.js.map +1 -1
  16. package/dist/src/rules/no-host-comparison-on-east-values.d.ts.map +1 -1
  17. package/dist/src/rules/no-host-comparison-on-east-values.js +78 -33
  18. package/dist/src/rules/no-host-comparison-on-east-values.js.map +1 -1
  19. package/dist/src/rules/no-host-parse-to-east-values.d.ts +3 -0
  20. package/dist/src/rules/no-host-parse-to-east-values.d.ts.map +1 -0
  21. package/dist/src/rules/no-host-parse-to-east-values.js +84 -0
  22. package/dist/src/rules/no-host-parse-to-east-values.js.map +1 -0
  23. package/dist/src/rules/no-host-print-of-east-values.d.ts +3 -0
  24. package/dist/src/rules/no-host-print-of-east-values.d.ts.map +1 -0
  25. package/dist/src/rules/no-host-print-of-east-values.js +92 -0
  26. package/dist/src/rules/no-host-print-of-east-values.js.map +1 -0
  27. package/dist/src/rules/no-js-collection-for-east-collection.d.ts +3 -0
  28. package/dist/src/rules/no-js-collection-for-east-collection.d.ts.map +1 -0
  29. package/dist/src/rules/no-js-collection-for-east-collection.js +70 -0
  30. package/dist/src/rules/no-js-collection-for-east-collection.js.map +1 -0
  31. package/dist/src/rules/no-js-type-dispatch-on-east-values.d.ts +7 -0
  32. package/dist/src/rules/no-js-type-dispatch-on-east-values.d.ts.map +1 -0
  33. package/dist/src/rules/no-js-type-dispatch-on-east-values.js +40 -0
  34. package/dist/src/rules/no-js-type-dispatch-on-east-values.js.map +1 -0
  35. package/dist/src/rules/no-module-scope-east-macro.d.ts.map +1 -1
  36. package/dist/src/rules/no-module-scope-east-macro.js +105 -17
  37. package/dist/src/rules/no-module-scope-east-macro.js.map +1 -1
  38. package/dist/src/rules/prefer-some-none.d.ts +0 -4
  39. package/dist/src/rules/prefer-some-none.d.ts.map +1 -1
  40. package/dist/src/rules/prefer-some-none.js +75 -4
  41. package/dist/src/rules/prefer-some-none.js.map +1 -1
  42. package/dist/src/run.d.ts.map +1 -1
  43. package/dist/src/run.js +2 -1
  44. package/dist/src/run.js.map +1 -1
  45. package/dist/src/types.d.ts +3 -0
  46. package/dist/src/types.d.ts.map +1 -1
  47. 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;AAqGnE,eAAO,MAAM,sBAAsB,EAAE,QAwDpC,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
- function isEastValueConstructor(expr, t) {
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 true;
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 t.isIdentifier(expr) && expr.text === "none";
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 true;
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, t))
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 whose every return builds East
94
- // IR (`variant`/`some`/`none`/`East.value`/an `Expr` chain) OR builds a composite
95
- // string key from a host template literal (`(o, l) => \`${o}|${l}\``) is an
96
- // authoring-time macro and the signature of a string-keyed / hand-built-IR data
97
- // model. It cannot be serialized/recursed and expands inline at each call. Make it
98
- // a real `East.function`, or model the data with typed keys / nested East
99
- // structures. (In-block TS closures are flagged by `no-host-in-east-block`; this
100
- // rule covers the module-scope helpers that the block-scoped rule cannot see.)
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
- const everyBuildsEast = rs.every((r) => returnBuildsEast(r, ctx));
140
- const everyHostKey = rs.every((r) => isHostTemplate(r, t));
141
- if (!everyBuildsEast && !everyHostKey)
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":"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"}
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":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ5C,eAAO,MAAM,cAAc,EAAE,QAgC5B,CAAC"}
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":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,iFAAiF;AACjF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAa;IACtC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,mEAAmE;IAChF,KAAK,CAAC,IAAI,EAAE,GAAG;QACb,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAAE,OAAO;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QACjE,2EAA2E;QAC3E,4EAA4E;QAC5E,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAAE,OAAO;QAE1D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAAE,OAAO;QACjE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO;QAE7C,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,GAAG,KAAK,MAAM;gBACZ,CAAC,CAAC,wDAAwD;gBAC1D,CAAC,CAAC,gDAAgD;YACtD,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"prefer-some-none.js","sourceRoot":"","sources":["../../../src/rules/prefer-some-none.ts"],"names":[],"mappings":"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"}
@@ -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,CAsBlB"}
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 active = rules.filter((rule) => !disabled.has(rule.name));
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);
@@ -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;IAEhE,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"}
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"}
@@ -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()`).
@@ -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.80",
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.80",
48
- "@elaraai/e3": "1.0.80"
47
+ "@elaraai/east": "1.0.82",
48
+ "@elaraai/e3": "1.0.82"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "tsc",