@elaraai/east-diagnostics 1.0.4 → 1.0.5
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 +4 -1
- package/dist/src/east-module.d.ts +45 -0
- package/dist/src/east-module.d.ts.map +1 -0
- package/dist/src/east-module.js +57 -0
- package/dist/src/east-module.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lsp.d.ts +11 -0
- package/dist/src/lsp.d.ts.map +1 -0
- package/dist/src/lsp.js +236 -0
- package/dist/src/lsp.js.map +1 -0
- package/dist/src/rules/index.d.ts +1 -0
- package/dist/src/rules/index.d.ts.map +1 -1
- package/dist/src/rules/index.js +3 -0
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/no-untracked-east-data.d.ts +3 -0
- package/dist/src/rules/no-untracked-east-data.d.ts.map +1 -0
- package/dist/src/rules/no-untracked-east-data.js +70 -0
- package/dist/src/rules/no-untracked-east-data.js.map +1 -0
- package/dist/src/service.d.ts +5 -0
- package/dist/src/service.d.ts.map +1 -1
- package/dist/src/service.js +34 -3
- package/dist/src/service.js.map +1 -1
- package/dist/src/tsserver-plugin.d.ts +25 -0
- package/dist/src/tsserver-plugin.d.ts.map +1 -0
- package/dist/src/tsserver-plugin.js +93 -0
- package/dist/src/tsserver-plugin.js.map +1 -0
- package/dist/src/type-diff-rewrite.d.ts +20 -0
- package/dist/src/type-diff-rewrite.d.ts.map +1 -0
- package/dist/src/type-diff-rewrite.js +94 -0
- package/dist/src/type-diff-rewrite.js.map +1 -0
- package/dist/src/type-reify.d.ts +25 -0
- package/dist/src/type-reify.d.ts.map +1 -0
- package/dist/src/type-reify.js +299 -0
- package/dist/src/type-reify.js.map +1 -0
- package/package.json +6 -2
- package/dist/src/rules/no-ts-helpers-in-east.d.ts +0 -3
- package/dist/src/rules/no-ts-helpers-in-east.d.ts.map +0 -1
- package/dist/src/rules/no-ts-helpers-in-east.js +0 -50
- package/dist/src/rules/no-ts-helpers-in-east.js.map +0 -1
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// East's TS-level encoding tags `{ type: "Struct", fields: … }` etc. Each tag
|
|
2
|
+
// maps to the companion property the encoding carries (see east's types.ts).
|
|
3
|
+
const PRIMITIVE_TAGS = new Set(["Never", "Null", "Boolean", "Integer", "Float", "String", "DateTime", "Blob"]);
|
|
4
|
+
const MAX_DEPTH = 32;
|
|
5
|
+
class Bail extends Error {
|
|
6
|
+
}
|
|
7
|
+
function bail() {
|
|
8
|
+
throw new Bail();
|
|
9
|
+
}
|
|
10
|
+
function propType(ctx, type, name) {
|
|
11
|
+
const symbol = ctx.checker.getPropertyOfType(type, name);
|
|
12
|
+
if (symbol === undefined)
|
|
13
|
+
return undefined;
|
|
14
|
+
return ctx.checker.getTypeOfSymbol(symbol);
|
|
15
|
+
}
|
|
16
|
+
function literalString(type) {
|
|
17
|
+
return type !== undefined && type.isStringLiteral() ? type.value : undefined;
|
|
18
|
+
}
|
|
19
|
+
function typeArguments(ctx, type) {
|
|
20
|
+
const { t, checker } = ctx;
|
|
21
|
+
if ((type.flags & t.TypeFlags.Object) === 0)
|
|
22
|
+
return [];
|
|
23
|
+
if ((type.objectFlags & t.ObjectFlags.Reference) === 0)
|
|
24
|
+
return [];
|
|
25
|
+
return checker.getTypeArguments(type);
|
|
26
|
+
}
|
|
27
|
+
// Strip `undefined`/`null`-flag members (optional properties) from a union
|
|
28
|
+
// before reifying — East types have no undefined.
|
|
29
|
+
function stripAbsent(ctx, type) {
|
|
30
|
+
const members = type.isUnion() ? type.types : [type];
|
|
31
|
+
return members.filter((m) => (m.flags & (ctx.t.TypeFlags.Undefined | ctx.t.TypeFlags.Void)) === 0);
|
|
32
|
+
}
|
|
33
|
+
function reifyUnion(ctx, members) {
|
|
34
|
+
const reified = [];
|
|
35
|
+
for (const m of members) {
|
|
36
|
+
try {
|
|
37
|
+
reified.push(walk(ctx, m));
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
if (!(e instanceof Bail))
|
|
41
|
+
throw e;
|
|
42
|
+
// Unreifiable member (e.g. the callback form in SubtypeExprOrValue) — skip.
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (reified.length === 0)
|
|
46
|
+
bail();
|
|
47
|
+
// East constructors intern, so structurally identical members are identical.
|
|
48
|
+
const distinct = [...new Set(reified)];
|
|
49
|
+
// SubtypeExprOrValue unions always admit Expr<NeverType>; the bottom type is
|
|
50
|
+
// never the informative member when anything else reified.
|
|
51
|
+
const nonNever = distinct.filter((r) => r !== ctx.east.NeverType);
|
|
52
|
+
const candidates = nonNever.length > 0 ? nonNever : distinct;
|
|
53
|
+
if (candidates.length === 1)
|
|
54
|
+
return candidates[0];
|
|
55
|
+
// Several distinct members (e.g. the per-case variant forms alongside
|
|
56
|
+
// Expr<VariantType<…>>): fold to the least upper bound when one exists.
|
|
57
|
+
try {
|
|
58
|
+
return candidates.reduce((a, b) => ctx.east.TypeUnion(a, b));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
bail();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function structFromProperties(ctx, type) {
|
|
65
|
+
const fields = {};
|
|
66
|
+
for (const prop of ctx.checker.getPropertiesOfType(type)) {
|
|
67
|
+
const name = prop.getName();
|
|
68
|
+
if (name.startsWith("__@"))
|
|
69
|
+
continue; // unique-symbol members (type ids etc.)
|
|
70
|
+
fields[name] = walk(ctx, ctx.checker.getTypeOfSymbol(prop));
|
|
71
|
+
}
|
|
72
|
+
return ctx.east.StructType(fields);
|
|
73
|
+
}
|
|
74
|
+
function reifyEncoding(ctx, type, tag) {
|
|
75
|
+
const { east, checker } = ctx;
|
|
76
|
+
if (PRIMITIVE_TAGS.has(tag))
|
|
77
|
+
return east[`${tag}Type`];
|
|
78
|
+
switch (tag) {
|
|
79
|
+
case "Ref": {
|
|
80
|
+
const v = propType(ctx, type, "value") ?? bail();
|
|
81
|
+
return east.RefType(walk(ctx, v));
|
|
82
|
+
}
|
|
83
|
+
case "Array": {
|
|
84
|
+
const v = propType(ctx, type, "value") ?? bail();
|
|
85
|
+
return east.ArrayType(walk(ctx, v));
|
|
86
|
+
}
|
|
87
|
+
case "Set": {
|
|
88
|
+
const k = propType(ctx, type, "key") ?? bail();
|
|
89
|
+
return east.SetType(walk(ctx, k));
|
|
90
|
+
}
|
|
91
|
+
case "Dict": {
|
|
92
|
+
const k = propType(ctx, type, "key") ?? bail();
|
|
93
|
+
const v = propType(ctx, type, "value") ?? bail();
|
|
94
|
+
return east.DictType(walk(ctx, k), walk(ctx, v));
|
|
95
|
+
}
|
|
96
|
+
case "Vector": {
|
|
97
|
+
const e = propType(ctx, type, "element") ?? bail();
|
|
98
|
+
return east.VectorType(walk(ctx, e));
|
|
99
|
+
}
|
|
100
|
+
case "Matrix": {
|
|
101
|
+
const e = propType(ctx, type, "element") ?? bail();
|
|
102
|
+
return east.MatrixType(walk(ctx, e));
|
|
103
|
+
}
|
|
104
|
+
case "Struct": {
|
|
105
|
+
const fieldsType = propType(ctx, type, "fields") ?? bail();
|
|
106
|
+
const fields = {};
|
|
107
|
+
for (const prop of checker.getPropertiesOfType(fieldsType)) {
|
|
108
|
+
const name = prop.getName();
|
|
109
|
+
if (name.startsWith("__@"))
|
|
110
|
+
continue;
|
|
111
|
+
fields[name] = reifyUnion(ctx, stripAbsent(ctx, checker.getTypeOfSymbol(prop)));
|
|
112
|
+
}
|
|
113
|
+
return east.StructType(fields);
|
|
114
|
+
}
|
|
115
|
+
case "Variant": {
|
|
116
|
+
const casesType = propType(ctx, type, "cases") ?? bail();
|
|
117
|
+
const cases = {};
|
|
118
|
+
for (const prop of checker.getPropertiesOfType(casesType)) {
|
|
119
|
+
const name = prop.getName();
|
|
120
|
+
if (name.startsWith("__@"))
|
|
121
|
+
continue;
|
|
122
|
+
cases[name] = reifyUnion(ctx, stripAbsent(ctx, checker.getTypeOfSymbol(prop)));
|
|
123
|
+
}
|
|
124
|
+
return east.VariantType(cases);
|
|
125
|
+
}
|
|
126
|
+
case "Function":
|
|
127
|
+
case "AsyncFunction": {
|
|
128
|
+
const inputsType = propType(ctx, type, "inputs") ?? bail();
|
|
129
|
+
if (!checker.isTupleType(inputsType))
|
|
130
|
+
bail();
|
|
131
|
+
const inputs = typeArguments(ctx, inputsType).map((i) => walk(ctx, i));
|
|
132
|
+
const output = walk(ctx, propType(ctx, type, "output") ?? bail());
|
|
133
|
+
return tag === "Function" ? east.FunctionType(inputs, output) : east.AsyncFunctionType(inputs, output);
|
|
134
|
+
}
|
|
135
|
+
case "Recursive": {
|
|
136
|
+
const node = propType(ctx, type, "node");
|
|
137
|
+
// The bare marker `{ type: "Recursive" }` is a self-reference to the
|
|
138
|
+
// innermost RecursiveType scope being built.
|
|
139
|
+
if (node === undefined) {
|
|
140
|
+
if (ctx.selves.length === 0)
|
|
141
|
+
bail();
|
|
142
|
+
return ctx.selves[ctx.selves.length - 1];
|
|
143
|
+
}
|
|
144
|
+
return ctx.east.RecursiveType((self) => {
|
|
145
|
+
ctx.selves.push(self);
|
|
146
|
+
try {
|
|
147
|
+
return walk(ctx, node);
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
ctx.selves.pop();
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
default:
|
|
155
|
+
bail();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Plain JS values are accepted wherever SubtypeExprOrValue admits them — map
|
|
159
|
+
// the common ones the way east's TypeOf<> does.
|
|
160
|
+
function reifyRawValue(ctx, type) {
|
|
161
|
+
const { t, east, checker } = ctx;
|
|
162
|
+
const f = type.flags;
|
|
163
|
+
if (f & (t.TypeFlags.BigInt | t.TypeFlags.BigIntLiteral))
|
|
164
|
+
return east.IntegerType;
|
|
165
|
+
if (f & (t.TypeFlags.Number | t.TypeFlags.NumberLiteral))
|
|
166
|
+
return east.FloatType;
|
|
167
|
+
if (f & (t.TypeFlags.String | t.TypeFlags.StringLiteral | t.TypeFlags.TemplateLiteral))
|
|
168
|
+
return east.StringType;
|
|
169
|
+
if (f & (t.TypeFlags.Boolean | t.TypeFlags.BooleanLiteral))
|
|
170
|
+
return east.BooleanType;
|
|
171
|
+
if (f & t.TypeFlags.Null)
|
|
172
|
+
return east.NullType;
|
|
173
|
+
if ((f & t.TypeFlags.Object) === 0)
|
|
174
|
+
bail();
|
|
175
|
+
const name = type.getSymbol()?.getName();
|
|
176
|
+
switch (name) {
|
|
177
|
+
case "Date": return east.DateTimeType;
|
|
178
|
+
case "Uint8Array": return east.BlobType;
|
|
179
|
+
case "Float64Array": return east.VectorType(east.FloatType);
|
|
180
|
+
case "BigInt64Array": return east.VectorType(east.IntegerType);
|
|
181
|
+
case "Uint8ClampedArray": return east.VectorType(east.BooleanType);
|
|
182
|
+
case "Array":
|
|
183
|
+
case "ReadonlyArray": {
|
|
184
|
+
const [el] = typeArguments(ctx, type);
|
|
185
|
+
if (el === undefined)
|
|
186
|
+
bail();
|
|
187
|
+
return east.ArrayType(reifyUnion(ctx, stripAbsent(ctx, el)));
|
|
188
|
+
}
|
|
189
|
+
case "Set":
|
|
190
|
+
case "ReadonlySet": {
|
|
191
|
+
const [el] = typeArguments(ctx, type);
|
|
192
|
+
if (el === undefined)
|
|
193
|
+
bail();
|
|
194
|
+
return east.SetType(reifyUnion(ctx, stripAbsent(ctx, el)));
|
|
195
|
+
}
|
|
196
|
+
case "Map":
|
|
197
|
+
case "ReadonlyMap": {
|
|
198
|
+
const [k, v] = typeArguments(ctx, type);
|
|
199
|
+
if (k === undefined || v === undefined)
|
|
200
|
+
bail();
|
|
201
|
+
return east.DictType(reifyUnion(ctx, stripAbsent(ctx, k)), reifyUnion(ctx, stripAbsent(ctx, v)));
|
|
202
|
+
}
|
|
203
|
+
default: break;
|
|
204
|
+
}
|
|
205
|
+
if (checker.isTupleType(type)) {
|
|
206
|
+
const elements = typeArguments(ctx, type).map((e) => reifyUnion(ctx, stripAbsent(ctx, e)));
|
|
207
|
+
const distinct = new Set(elements);
|
|
208
|
+
if (distinct.size !== 1)
|
|
209
|
+
bail();
|
|
210
|
+
return east.ArrayType(elements[0]);
|
|
211
|
+
}
|
|
212
|
+
// A plain object literal is a struct value. Anything callable/indexed isn't.
|
|
213
|
+
if (type.getCallSignatures().length > 0 || type.getConstructSignatures().length > 0)
|
|
214
|
+
bail();
|
|
215
|
+
if (checker.getIndexInfosOfType(type).length > 0)
|
|
216
|
+
bail();
|
|
217
|
+
const props = checker.getPropertiesOfType(type);
|
|
218
|
+
if (props.length === 0)
|
|
219
|
+
bail();
|
|
220
|
+
const fields = {};
|
|
221
|
+
for (const prop of props) {
|
|
222
|
+
const propName = prop.getName();
|
|
223
|
+
if (propName.startsWith("__@"))
|
|
224
|
+
continue;
|
|
225
|
+
fields[propName] = reifyUnion(ctx, stripAbsent(ctx, checker.getTypeOfSymbol(prop)));
|
|
226
|
+
}
|
|
227
|
+
return east.StructType(fields);
|
|
228
|
+
}
|
|
229
|
+
function walk(ctx, type) {
|
|
230
|
+
if (++ctx.depth > MAX_DEPTH)
|
|
231
|
+
bail();
|
|
232
|
+
try {
|
|
233
|
+
if (type.isUnion())
|
|
234
|
+
return reifyUnion(ctx, stripAbsent(ctx, type));
|
|
235
|
+
// Expr<T> and every subclass carry their East type as the unique-symbol
|
|
236
|
+
// property [TypeSymbol] — instantiated by the checker, so reading it
|
|
237
|
+
// handles IntegerExpr, StructExpr<…>, BlockBuilder lets, all of them.
|
|
238
|
+
const properties = type.getProperties();
|
|
239
|
+
const exprTypeProp = properties.find((p) => p.getName().startsWith("__@TypeSymbol"));
|
|
240
|
+
if (exprTypeProp !== undefined) {
|
|
241
|
+
ctx.sawEastShape = true;
|
|
242
|
+
return walk(ctx, ctx.checker.getTypeOfSymbol(exprTypeProp));
|
|
243
|
+
}
|
|
244
|
+
// The branded value containers. variant must be recognised before the
|
|
245
|
+
// encoding-tag check: its `type` property is the *case name*, and e.g.
|
|
246
|
+
// variant("Array", …) would otherwise be misread as an ArrayType encoding.
|
|
247
|
+
if (properties.some((p) => p.getName().startsWith("__@variant_symbol"))) {
|
|
248
|
+
const caseName = literalString(propType(ctx, type, "type")) ?? bail();
|
|
249
|
+
const payload = propType(ctx, type, "value") ?? bail();
|
|
250
|
+
ctx.sawEastShape = true;
|
|
251
|
+
return ctx.east.VariantType({ [caseName]: reifyUnion(ctx, stripAbsent(ctx, payload)) });
|
|
252
|
+
}
|
|
253
|
+
if (properties.some((p) => p.getName().startsWith("__@ref_symbol"))) {
|
|
254
|
+
const v = propType(ctx, type, "value") ?? bail();
|
|
255
|
+
ctx.sawEastShape = true;
|
|
256
|
+
return ctx.east.RefType(reifyUnion(ctx, stripAbsent(ctx, v)));
|
|
257
|
+
}
|
|
258
|
+
const tag = literalString(propType(ctx, type, "type"));
|
|
259
|
+
if (tag !== undefined) {
|
|
260
|
+
try {
|
|
261
|
+
const result = reifyEncoding(ctx, type, tag);
|
|
262
|
+
ctx.sawEastShape = true;
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
if (!(e instanceof Bail))
|
|
267
|
+
throw e;
|
|
268
|
+
// Not actually an encoding (e.g. a struct *value* with a `type` field)
|
|
269
|
+
// — fall through to the raw-value mapping.
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return reifyRawValue(ctx, type);
|
|
273
|
+
}
|
|
274
|
+
finally {
|
|
275
|
+
ctx.depth--;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Reify the TypeScript type of an East-related expression into an `EastType`
|
|
280
|
+
* built with the project's own `@elaraai/east` constructors (so it is interned
|
|
281
|
+
* and directly usable with `diffTypes`). Handles `Expr<T>` and subclasses (via
|
|
282
|
+
* the `[TypeSymbol]` property), the `{ type: "…" }` type encodings including
|
|
283
|
+
* recursive types, the raw-value forms `SubtypeExprOrValue` admits, and unions
|
|
284
|
+
* of those. Returns `undefined` for anything it cannot map faithfully.
|
|
285
|
+
*/
|
|
286
|
+
export function reifyEastType(t, checker, type, east) {
|
|
287
|
+
const ctx = { t, checker, east, depth: 0, selves: [], sawEastShape: false };
|
|
288
|
+
try {
|
|
289
|
+
return { type: walk(ctx, type), eastShaped: ctx.sawEastShape };
|
|
290
|
+
}
|
|
291
|
+
catch (e) {
|
|
292
|
+
if (e instanceof Bail)
|
|
293
|
+
return undefined;
|
|
294
|
+
// Constructor invariants (e.g. RecursiveType SCC checks) can throw on
|
|
295
|
+
// shapes the checker permits — treat as unreifiable, never crash a host.
|
|
296
|
+
return undefined;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=type-reify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-reify.js","sourceRoot":"","sources":["../../src/type-reify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elaraai/east-diagnostics",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
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.",
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/src/index.d.ts",
|
|
12
12
|
"default": "./dist/src/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./tsserver-plugin": {
|
|
15
|
+
"types": "./dist/src/tsserver-plugin.d.ts",
|
|
16
|
+
"default": "./dist/src/tsserver-plugin.js"
|
|
13
17
|
}
|
|
14
18
|
},
|
|
15
19
|
"files": [
|
|
@@ -40,7 +44,7 @@
|
|
|
40
44
|
"devDependencies": {
|
|
41
45
|
"@types/node": "^22.18.1",
|
|
42
46
|
"typescript": "~5.9.2",
|
|
43
|
-
"@elaraai/east": "1.0.
|
|
47
|
+
"@elaraai/east": "1.0.5"
|
|
44
48
|
},
|
|
45
49
|
"scripts": {
|
|
46
50
|
"build": "tsc",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-ts-helpers-in-east.d.ts","sourceRoot":"","sources":["../../../src/rules/no-ts-helpers-in-east.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAiB5C,eAAO,MAAM,iBAAiB,EAAE,QAsC/B,CAAC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { isEastExprType } from "../east-type.js";
|
|
2
|
-
const NAME = "no-ts-helpers-in-east";
|
|
3
|
-
const CODE = 990010;
|
|
4
|
-
// A TypeScript helper that constructs East values — a `function`/`const` whose
|
|
5
|
-
// return type is an East `Expr` — should be inlined at each call site;
|
|
6
|
-
// repetition is preferred over a `node()`/`link()`-style builder.
|
|
7
|
-
//
|
|
8
|
-
// Keyed on *declarations* (function declarations and `const fn = (…) => …`),
|
|
9
|
-
// which excludes every inline callback (East.function bodies, `.map`, event
|
|
10
|
-
// handlers are bare arrow *arguments*, never declarations). Note: a component
|
|
11
|
-
// factory (`createButton(): ExprType<UIComponentType>`) is structurally
|
|
12
|
-
// identical, so this rule is APPLICATION-SCOPED — the daemon must not run it on
|
|
13
|
-
// East library-factory packages. Hence it is exported separately, not in the
|
|
14
|
-
// default `allRules`.
|
|
15
|
-
export const noTsHelpersInEast = {
|
|
16
|
-
name: NAME,
|
|
17
|
-
code: CODE,
|
|
18
|
-
description: "Disallow TypeScript helpers that build East values (functions returning an East expression); inline at the call site.",
|
|
19
|
-
check(node, ctx) {
|
|
20
|
-
const t = ctx.ts;
|
|
21
|
-
let fnLike;
|
|
22
|
-
let reportNode;
|
|
23
|
-
if (t.isFunctionDeclaration(node) && node.body !== undefined && node.name !== undefined) {
|
|
24
|
-
fnLike = node;
|
|
25
|
-
reportNode = node.name;
|
|
26
|
-
}
|
|
27
|
-
else if (t.isVariableDeclaration(node) &&
|
|
28
|
-
node.initializer !== undefined &&
|
|
29
|
-
(t.isArrowFunction(node.initializer) || t.isFunctionExpression(node.initializer))) {
|
|
30
|
-
fnLike = node.initializer;
|
|
31
|
-
reportNode = node.name;
|
|
32
|
-
}
|
|
33
|
-
if (fnLike === undefined || reportNode === undefined)
|
|
34
|
-
return;
|
|
35
|
-
const signature = ctx.checker.getSignatureFromDeclaration(fnLike);
|
|
36
|
-
if (signature === undefined || !isEastExprType(signature.getReturnType()))
|
|
37
|
-
return;
|
|
38
|
-
const sf = ctx.sourceFile;
|
|
39
|
-
const start = reportNode.getStart(sf);
|
|
40
|
-
ctx.report({
|
|
41
|
-
ruleName: NAME,
|
|
42
|
-
code: CODE,
|
|
43
|
-
start,
|
|
44
|
-
length: reportNode.getEnd() - start,
|
|
45
|
-
messageText: "This TypeScript helper builds an East value (it returns an East expression). Inline the construction at each call site instead of factoring it into a helper — repetition is preferred.",
|
|
46
|
-
category: "warning",
|
|
47
|
-
});
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=no-ts-helpers-in-east.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-ts-helpers-in-east.js","sourceRoot":"","sources":["../../../src/rules/no-ts-helpers-in-east.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,+EAA+E;AAC/E,uEAAuE;AACvE,kEAAkE;AAClE,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,wEAAwE;AACxE,gFAAgF;AAChF,6EAA6E;AAC7E,sBAAsB;AACtB,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,WAAW,EACT,uHAAuH;IACzH,KAAK,CAAC,IAAI,EAAE,GAAG;QACb,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QAEjB,IAAI,MAA2C,CAAC;QAChD,IAAI,UAA+B,CAAC;QACpC,IAAI,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxF,MAAM,GAAG,IAAI,CAAC;YACd,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,CAAC;aAAM,IACL,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9B,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EACjF,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO;QAE7D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YAAE,OAAO;QAElF,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC;YACT,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,IAAI;YACV,KAAK;YACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,KAAK;YACnC,WAAW,EACT,yLAAyL;YAC3L,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|