eslint-plugin-ts-data-forge 0.8.6 → 0.10.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.
Files changed (70) hide show
  1. package/README.md +21 -19
  2. package/dist/plugin.d.mts +4 -0
  3. package/dist/plugin.d.mts.map +1 -1
  4. package/dist/plugin.mjs +2 -0
  5. package/dist/plugin.mjs.map +1 -1
  6. package/dist/rule-types.d.mts +31 -1
  7. package/dist/rule-types.d.mts.map +1 -1
  8. package/dist/rule-types.mjs.map +1 -1
  9. package/dist/rules/ast-utils.d.mts +21 -2
  10. package/dist/rules/ast-utils.d.mts.map +1 -1
  11. package/dist/rules/ast-utils.mjs +51 -4
  12. package/dist/rules/ast-utils.mjs.map +1 -1
  13. package/dist/rules/constants.d.mts +2 -0
  14. package/dist/rules/constants.d.mts.map +1 -1
  15. package/dist/rules/constants.mjs +9 -0
  16. package/dist/rules/constants.mjs.map +1 -1
  17. package/dist/rules/mutable-result.d.mts +10 -0
  18. package/dist/rules/mutable-result.d.mts.map +1 -0
  19. package/dist/rules/mutable-result.mjs +145 -0
  20. package/dist/rules/mutable-result.mjs.map +1 -0
  21. package/dist/rules/prefer-arr-generate.d.mts +57 -0
  22. package/dist/rules/prefer-arr-generate.d.mts.map +1 -0
  23. package/dist/rules/prefer-arr-generate.mjs +588 -0
  24. package/dist/rules/prefer-arr-generate.mjs.map +1 -0
  25. package/dist/rules/prefer-arr-uniq.d.mts.map +1 -1
  26. package/dist/rules/prefer-arr-uniq.mjs +2 -149
  27. package/dist/rules/prefer-arr-uniq.mjs.map +1 -1
  28. package/dist/rules/prefer-canonical-array-slicing.d.mts.map +1 -1
  29. package/dist/rules/prefer-canonical-array-slicing.mjs +47 -28
  30. package/dist/rules/prefer-canonical-array-slicing.mjs.map +1 -1
  31. package/dist/rules/prefer-is-non-null-object.d.mts.map +1 -1
  32. package/dist/rules/prefer-is-non-null-object.mjs +110 -40
  33. package/dist/rules/prefer-is-non-null-object.mjs.map +1 -1
  34. package/dist/rules/prefer-is-record-and-has-key.d.mts.map +1 -1
  35. package/dist/rules/prefer-is-record-and-has-key.mjs +102 -45
  36. package/dist/rules/prefer-is-record-and-has-key.mjs.map +1 -1
  37. package/dist/rules/prefer-pipe-map-nullable.d.mts +24 -0
  38. package/dist/rules/prefer-pipe-map-nullable.d.mts.map +1 -0
  39. package/dist/rules/prefer-pipe-map-nullable.mjs +266 -0
  40. package/dist/rules/prefer-pipe-map-nullable.mjs.map +1 -0
  41. package/dist/rules/prefer-range-for-loop.d.mts.map +1 -1
  42. package/dist/rules/prefer-range-for-loop.mjs +97 -16
  43. package/dist/rules/prefer-range-for-loop.mjs.map +1 -1
  44. package/dist/rules/rules.d.mts +2 -0
  45. package/dist/rules/rules.d.mts.map +1 -1
  46. package/dist/rules/rules.mjs +4 -0
  47. package/dist/rules/rules.mjs.map +1 -1
  48. package/package.json +11 -11
  49. package/src/plugin.mts +2 -0
  50. package/src/rule-types.mts +33 -1
  51. package/src/rules/ast-utils.mts +72 -5
  52. package/src/rules/constants.mts +12 -0
  53. package/src/rules/mutable-result.mts +204 -0
  54. package/src/rules/prefer-arr-generate.mts +918 -0
  55. package/src/rules/prefer-arr-generate.test.mts +967 -0
  56. package/src/rules/prefer-arr-is-bounded-length-array.test.mts +19 -0
  57. package/src/rules/prefer-arr-is-max-length-array.test.mts +8 -0
  58. package/src/rules/prefer-arr-is-min-length-array.test.mts +8 -0
  59. package/src/rules/prefer-arr-uniq.mts +2 -207
  60. package/src/rules/prefer-canonical-array-slicing.mts +57 -40
  61. package/src/rules/prefer-canonical-array-slicing.test.mts +55 -0
  62. package/src/rules/prefer-is-non-null-object.mts +160 -57
  63. package/src/rules/prefer-is-non-null-object.test.mts +138 -0
  64. package/src/rules/prefer-is-record-and-has-key.mts +148 -67
  65. package/src/rules/prefer-is-record-and-has-key.test.mts +118 -23
  66. package/src/rules/prefer-pipe-map-nullable.mts +391 -0
  67. package/src/rules/prefer-pipe-map-nullable.test.mts +470 -0
  68. package/src/rules/prefer-range-for-loop.mts +142 -21
  69. package/src/rules/prefer-range-for-loop.test.mts +127 -5
  70. package/src/rules/rules.mts +4 -0
@@ -0,0 +1,57 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type Options = readonly [];
3
+ type MessageIds = 'useArrGenerate' | 'suggestArrGenerate';
4
+ /**
5
+ * The callback of `xs.flatMap((x) => (cond ? [a, b] : []))` decides per
6
+ * element whether to keep it and what to keep. Written as a loop, that is
7
+ *
8
+ * ```ts
9
+ * Arr.generate(function* () {
10
+ * for (const x of xs) {
11
+ * if (cond) {
12
+ * yield a;
13
+ * yield b;
14
+ * }
15
+ * }
16
+ * });
17
+ * ```
18
+ *
19
+ * A block-bodied callback whose only `return` is its last statement works the
20
+ * same way: the statements before it move into the loop. When the empty array
21
+ * is the consequent (`cond ? [] : [a]`), the condition is negated the short way
22
+ * `negationOf` from eslint-rule-forge writes it (`a !== b`, `!a && !b`).
23
+ *
24
+ * The callback is reported only when the rewrite keeps its meaning:
25
+ *
26
+ * - The receiver is an array or a tuple at every layer of its type wrappers
27
+ * (an object with a `flatMap` method of its own is not touched).
28
+ * - The callback is a non-async arrow function with one parameter, which may
29
+ * be destructured but has no default: an index or array parameter has no
30
+ * counterpart in the loop.
31
+ * - Neither the callback nor the receiver reads `this`, `arguments`, `super`
32
+ * or `new.target`, which the generator function would rebind; the receiver
33
+ * names none of the parameter's bindings, which the loop variable would
34
+ * shadow (`node.children.flatMap((node) => …)`).
35
+ *
36
+ * The fix is applied automatically only when nothing it drops could have
37
+ * mattered; otherwise it is offered as a suggestion:
38
+ *
39
+ * - The result becomes a readonly array, so code that visibly needs a mutable
40
+ * one (see `needsMutableResult`) keeps a suggestion.
41
+ * - A type annotation on the parameter, a return type on the callback, or a
42
+ * type wrapper around the conditional or either branch
43
+ * (`[] as readonly T[]`), may be what types the elements, and the loop has
44
+ * no place for it.
45
+ * - The receiver moves into the generator function, where a narrowing of a
46
+ * property (`s.decl.items` after `s.decl !== null`) or of a variable that is
47
+ * reassigned somewhere no longer applies.
48
+ * - A `filter()` receiver becomes an intermediate array the loop iterates,
49
+ * which reads better as a condition inside the loop.
50
+ * - A comment the rewrite has no place for would be lost.
51
+ *
52
+ * One difference is not checked: `flatMap` skips the holes of a sparse array,
53
+ * while `for…of` visits them as `undefined`.
54
+ */
55
+ export declare const preferArrGenerate: TSESLint.RuleModule<MessageIds, Options>;
56
+ export {};
57
+ //# sourceMappingURL=prefer-arr-generate.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-arr-generate.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-generate.mts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAkBlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;AAS1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA4P7D,CAAC"}
@@ -0,0 +1,588 @@
1
+ import { AST_NODE_TYPES, AST_TOKEN_TYPES, ASTUtils, } from '@typescript-eslint/utils';
2
+ import { buildNamedImportFix, createGetLayerTypes, getArgumentText, getImportDeclarations, getImportedLocalName, negationOf, prefixedNegationOf, skipTypeWrappers, } from 'eslint-rule-forge';
3
+ import { Arr, hasKey, isRecord } from 'ts-data-forge';
4
+ import * as ts from 'typescript';
5
+ import { TS_DATA_FORGE_MODULE } from './constants.mjs';
6
+ import { needsMutableResult } from './mutable-result.mjs';
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+ export const preferArrGenerate = {
59
+ meta: {
60
+ type: 'suggestion',
61
+ docs: {
62
+ description: 'Replace the filter-and-map idiom `xs.flatMap((x) => (cond ? [f(x)] : []))` with a loop in `Arr.generate` from ts-data-forge.',
63
+ },
64
+ fixable: 'code',
65
+ hasSuggestions: true,
66
+ schema: [],
67
+ messages: {
68
+ useArrGenerate: 'Replace this filter-and-map `flatMap` with a loop in `Arr.generate` from ts-data-forge.',
69
+ suggestArrGenerate: 'Replace with a loop in `Arr.generate` from ts-data-forge (check the element type, and that the result may be readonly).',
70
+ },
71
+ },
72
+ create: (context) => {
73
+ const sourceCode = context.sourceCode;
74
+ const program = sourceCode.ast;
75
+ const tsDataForgeImports = getImportDeclarations(program, TS_DATA_FORGE_MODULE);
76
+ const services = sourceCode.parserServices;
77
+ const tsProgram = services?.program ?? undefined;
78
+ const esTreeNodeToTSNodeMap = services?.esTreeNodeToTSNodeMap;
79
+
80
+
81
+ if (tsProgram === undefined || esTreeNodeToTSNodeMap === undefined) {
82
+ return {};
83
+ }
84
+ const checker = tsProgram.getTypeChecker();
85
+ const getLayerTypes = createGetLayerTypes({
86
+ program: tsProgram,
87
+ esTreeNodeToTSNodeMap,
88
+ });
89
+
90
+
91
+ const negationContext = {
92
+ sourceCode,
93
+ checker,
94
+ getLayerTypes,
95
+ isBoolean: () => true,
96
+ };
97
+ const getTsNode = (
98
+
99
+ node) => esTreeNodeToTSNodeMap.get(node);
100
+ const arrLocalName = getImportedLocalName(tsDataForgeImports, 'Arr');
101
+ const arrName = arrLocalName ?? 'Arr';
102
+ const mut_matches = [];
103
+ return {
104
+ CallExpression: (node) => {
105
+ const callee = skipTypeWrappers(node.callee);
106
+ if (node.optional ||
107
+ callee.type !== AST_NODE_TYPES.MemberExpression ||
108
+ callee.optional ||
109
+ callee.computed ||
110
+ callee.property.type !== AST_NODE_TYPES.Identifier ||
111
+ callee.property.name !== 'flatMap' ||
112
+ callee.object.type === AST_NODE_TYPES.Super ||
113
+
114
+ !Arr.isFixedLengthTuple(1, node.arguments)) {
115
+ return;
116
+ }
117
+ const callback = node.arguments[0];
118
+
119
+
120
+ if (callback.type !== AST_NODE_TYPES.ArrowFunctionExpression ||
121
+ callback.async ||
122
+ !Arr.isFixedLengthTuple(1, callback.params)) {
123
+ return;
124
+ }
125
+ const param = callback.params[0];
126
+ if (param.type !== AST_NODE_TYPES.Identifier &&
127
+ param.type !== AST_NODE_TYPES.ObjectPattern &&
128
+ param.type !== AST_NODE_TYPES.ArrayPattern) {
129
+ return;
130
+ }
131
+
132
+ if (param.optional) {
133
+ return;
134
+ }
135
+ const typeArguments = node.typeArguments;
136
+
137
+ if (typeArguments !== undefined && typeArguments.params.length !== 1) {
138
+ return;
139
+ }
140
+ const shape = getFilterMapShape(sourceCode, callback);
141
+ if (shape === undefined) {
142
+ return;
143
+ }
144
+ const receiver = callee.object;
145
+ if ((shape.prelude ?? []).some((statement) => someDescendant(sourceCode, statement, isReturnStatement, false)) ||
146
+ someDescendant(sourceCode, callback, rebindsInGenerator, true) ||
147
+ someDescendant(sourceCode, receiver, rebindsInGenerator, true)) {
148
+ return;
149
+ }
150
+ const paramNames = new Set(sourceCode
151
+ .getDeclaredVariables(callback)
152
+ .map((variable) => variable.name));
153
+ if (someDescendant(sourceCode, receiver, (n) => n.type === AST_NODE_TYPES.Identifier &&
154
+ paramNames.has(n.name) &&
155
+ isReference(n) &&
156
+ !isBoundWithin(sourceCode, n, receiver), true)) {
157
+ return;
158
+ }
159
+
160
+ const isArrayReceiver = getLayerTypes(receiver).every((type) => isArrayOrTupleType(checker, type));
161
+ if (!isArrayReceiver) {
162
+ return;
163
+ }
164
+ const replacement = buildReplacement({
165
+ sourceCode,
166
+ negationContext,
167
+ node,
168
+ arrName,
169
+ typeArgumentsText: typeArguments === undefined
170
+ ? ''
171
+ : sourceCode.getText(typeArguments),
172
+
173
+
174
+ paramText: param.typeAnnotation === undefined
175
+ ? sourceCode.getText(param)
176
+ : sourceCode.text
177
+ .slice(param.range[0], param.typeAnnotation.range[0])
178
+ .trimEnd(),
179
+ receiver,
180
+ shape,
181
+ });
182
+ const autofixable = !shape.wrapped &&
183
+ param.typeAnnotation === undefined &&
184
+ callback.returnType === undefined &&
185
+ !isFilterCall(receiver) &&
186
+ !someDescendant(sourceCode, receiver, (n) => isNarrowedHere(sourceCode, checker, getTsNode, n, n === skipTypeWrappers(receiver)), true) &&
187
+ !losesComments(sourceCode, callback, shape) &&
188
+ !needsMutableResult(sourceCode, checker, getTsNode, node);
189
+ mut_matches.push({ node, replacement, autofixable });
190
+ },
191
+ 'Program:exit': () => {
192
+
193
+
194
+
195
+ const firstAutofixable = mut_matches.find((m) => m.autofixable);
196
+ for (const match of mut_matches) {
197
+ const buildFix = (withImport) => (fixer) => [
198
+ ...(withImport && arrLocalName === undefined
199
+ ? buildNamedImportFix(fixer, program, TS_DATA_FORGE_MODULE, [
200
+ 'Arr',
201
+ ])
202
+ : []),
203
+ fixer.replaceText(match.node, match.replacement),
204
+ ];
205
+ if (match.autofixable) {
206
+ context.report({
207
+ node: match.node,
208
+ messageId: 'useArrGenerate',
209
+ fix: buildFix(match === firstAutofixable),
210
+ });
211
+ }
212
+ else {
213
+ context.report({
214
+ node: match.node,
215
+ messageId: 'useArrGenerate',
216
+ suggest: [
217
+ {
218
+ messageId: 'suggestArrGenerate',
219
+ fix: buildFix(true),
220
+ },
221
+ ],
222
+ });
223
+ }
224
+ }
225
+ },
226
+ };
227
+ },
228
+ defaultOptions: [],
229
+ };
230
+ const getFilterMapShape = (
231
+
232
+ sourceCode,
233
+
234
+ callback) => {
235
+ const { body } = callback;
236
+ const returnStatement = body.type === AST_NODE_TYPES.BlockStatement ? body.body.at(-1) : undefined;
237
+ if (body.type === AST_NODE_TYPES.BlockStatement &&
238
+ (returnStatement?.type !== AST_NODE_TYPES.ReturnStatement ||
239
+ returnStatement.argument === null)) {
240
+ return undefined;
241
+ }
242
+ const returned = body.type === AST_NODE_TYPES.BlockStatement
243
+ ?
244
+ returnStatement.argument
245
+ : body;
246
+ if (returned === null) {
247
+ return undefined;
248
+ }
249
+ const conditional = skipTypeWrappers(returned);
250
+ if (conditional.type !== AST_NODE_TYPES.ConditionalExpression) {
251
+ return undefined;
252
+ }
253
+ const consequent = skipTypeWrappers(conditional.consequent);
254
+ const alternate = skipTypeWrappers(conditional.alternate);
255
+ if (consequent.type !== AST_NODE_TYPES.ArrayExpression ||
256
+ alternate.type !== AST_NODE_TYPES.ArrayExpression) {
257
+ return undefined;
258
+ }
259
+ const negated = Arr.isEmpty(consequent.elements);
260
+ const kept = negated ? alternate : consequent;
261
+ const dropped = negated ? consequent : alternate;
262
+ if (!Arr.isEmpty(dropped.elements) || Arr.isEmpty(kept.elements)) {
263
+ return undefined;
264
+ }
265
+ const elements = kept.elements.filter((element) => element !== null && element.type !== AST_NODE_TYPES.SpreadElement);
266
+ if (elements.length !== kept.elements.length) {
267
+ return undefined;
268
+ }
269
+ const openingBrace = body.type === AST_NODE_TYPES.BlockStatement
270
+ ? sourceCode.getFirstToken(body)
271
+ : null;
272
+ const preludeStart = openingBrace === null
273
+ ? undefined
274
+ : sourceCode.getTokenAfter(openingBrace, { includeComments: true })
275
+ ?.range[0];
276
+ return {
277
+ prelude: body.type === AST_NODE_TYPES.BlockStatement
278
+ ? body.body.slice(0, -1)
279
+ : undefined,
280
+ preludeRange: preludeStart === undefined ||
281
+ returnStatement === undefined ||
282
+ preludeStart >= returnStatement.range[0]
283
+ ? undefined
284
+ : [preludeStart, returnStatement.range[0]],
285
+ test: conditional.test,
286
+ negated,
287
+ elements,
288
+ wrapped: conditional !== returned ||
289
+ consequent !== conditional.consequent ||
290
+ alternate !== conditional.alternate,
291
+ };
292
+ };
293
+
294
+ const buildReplacement = ({ sourceCode, negationContext, node, arrName, typeArgumentsText, paramText, receiver, shape, }) => {
295
+ const indent0 = lineIndentOf(sourceCode, node.range[0]);
296
+ const indent1 = `${indent0} `;
297
+ const indent2 = `${indent1} `;
298
+ const indent3 = `${indent2} `;
299
+ const condition = reindent(sourceCode, shape.test.range, indent2, shape.negated
300
+ ? (negationOf(shape.test, negationContext, undefined) ??
301
+ prefixedNegationOf(shape.test, sourceCode))
302
+ : sourceCode.getText(shape.test));
303
+ const { preludeRange } = shape;
304
+ const preludeLines = preludeRange === undefined
305
+ ? []
306
+ : [
307
+ `${indent2}${reindent(sourceCode, preludeRange, indent2, sourceCode.text.slice(...preludeRange).trimEnd())}`,
308
+ ];
309
+ const yieldLines = shape.elements.map((element) => `${indent3}yield ${reindent(sourceCode, element.range, indent3, getArgumentText(sourceCode, element))};`);
310
+ const receiverText = reindent(sourceCode, receiver.range, indent1, getArgumentText(sourceCode, receiver));
311
+ return [
312
+ `${arrName}.generate${typeArgumentsText}(function* () {`,
313
+ `${indent1}for (const ${paramText} of ${receiverText}) {`,
314
+ ...preludeLines,
315
+ `${indent2}if (${condition}) {`,
316
+ ...yieldLines,
317
+ `${indent2}}`,
318
+ `${indent1}}`,
319
+ `${indent0}})`,
320
+ ].join('\n');
321
+ };
322
+
323
+
324
+
325
+
326
+ const losesComments = (
327
+
328
+ sourceCode,
329
+
330
+ callback,
331
+
332
+ shape) => {
333
+ const keptRanges = [
334
+ shape.test.range,
335
+ ...shape.elements.map((element) => element.range),
336
+ ...(shape.preludeRange === undefined
337
+ ? []
338
+ : [shape.preludeRange]),
339
+ ];
340
+ return sourceCode
341
+ .getCommentsInside(callback)
342
+ .some((comment) => keptRanges.every(([start, end]) => !(start <= comment.range[0] && comment.range[1] <= end)));
343
+ };
344
+
345
+
346
+
347
+
348
+
349
+
350
+ const reindent = (
351
+
352
+ sourceCode, range, targetIndent, text) => {
353
+ if (!text.includes('\n')) {
354
+ return text;
355
+ }
356
+ const spansLines = sourceCode.ast.tokens.some((token) => range[0] <= token.range[0] &&
357
+ token.range[1] <= range[1] &&
358
+ (token.type === AST_TOKEN_TYPES.Template ||
359
+ token.type === AST_TOKEN_TYPES.String) &&
360
+ token.loc.start.line !== token.loc.end.line);
361
+ if (spansLines) {
362
+ return text;
363
+ }
364
+ const sourceIndent = lineIndentOf(sourceCode, range[0]);
365
+ const [first, ...rest] = text.split('\n');
366
+ return [
367
+ first,
368
+ ...rest.map((line) => line.startsWith(sourceIndent)
369
+ ? `${targetIndent}${line.slice(sourceIndent.length)}`
370
+ : line),
371
+ ].join('\n');
372
+ };
373
+
374
+ const lineIndentOf = (
375
+
376
+ sourceCode, index) => {
377
+ const { line } = sourceCode.getLocFromIndex(index);
378
+ const lineText = sourceCode.lines[line - 1] ?? '';
379
+ return /^\s*/u.exec(lineText)?.[0] ?? '';
380
+ };
381
+
382
+ const isFilterCall = (
383
+
384
+ node) => {
385
+ const call = skipTypeWrappers(node);
386
+ if (call.type !== AST_NODE_TYPES.CallExpression) {
387
+ return false;
388
+ }
389
+ const callee = skipTypeWrappers(call.callee);
390
+ return (callee.type === AST_NODE_TYPES.MemberExpression &&
391
+ !callee.computed &&
392
+ callee.property.type === AST_NODE_TYPES.Identifier &&
393
+ callee.property.name === 'filter');
394
+ };
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+ const isNarrowedHere = (
403
+
404
+ sourceCode,
405
+
406
+ checker,
407
+
408
+ getTsNode,
409
+
410
+ node, isReceiver) => {
411
+ if (node.type !== AST_NODE_TYPES.Identifier &&
412
+ node.type !== AST_NODE_TYPES.MemberExpression) {
413
+ return false;
414
+ }
415
+
416
+
417
+ if (node.parent.type === AST_NODE_TYPES.CallExpression &&
418
+ node.parent.callee === node) {
419
+ return false;
420
+ }
421
+ if (node.type === AST_NODE_TYPES.Identifier) {
422
+ if (!isReference(node)) {
423
+ return false;
424
+ }
425
+ const variable = ASTUtils.findVariable(sourceCode.getScope(node), node);
426
+ if (variable?.references.every((reference) => !reference.isWrite() || reference.init === true) === true) {
427
+ return false;
428
+ }
429
+ }
430
+ const tsNode = getTsNode(node);
431
+ if (tsNode === undefined) {
432
+ return false;
433
+ }
434
+ const declaredType = getDeclaredType(checker, tsNode);
435
+ const type = checker.getTypeAtLocation(tsNode);
436
+ return (declaredType !== undefined &&
437
+ declaredType !== type &&
438
+
439
+
440
+ !(isReceiver && iteratesTheSame(checker, declaredType, type)));
441
+ };
442
+
443
+
444
+
445
+
446
+
447
+ const iteratesTheSame = (
448
+
449
+ checker,
450
+
451
+ a,
452
+
453
+ b) => {
454
+ if (!isArrayOrTupleType(checker, a) || !isArrayOrTupleType(checker, b)) {
455
+ return false;
456
+ }
457
+ const elementOfA = checker.getIndexTypeOfType(a, ts.IndexKind.Number);
458
+ return (elementOfA !== undefined &&
459
+ elementOfA === checker.getIndexTypeOfType(b, ts.IndexKind.Number));
460
+ };
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+ const getDeclaredType = (
473
+
474
+ checker, tsNode) => {
475
+ if (ts.isPropertyAccessExpression(tsNode) ||
476
+ ts.isElementAccessExpression(tsNode)) {
477
+ const name = ts.isPropertyAccessExpression(tsNode)
478
+ ? tsNode.name.text
479
+ : ts.isStringLiteralLike(tsNode.argumentExpression) ||
480
+ ts.isNumericLiteral(tsNode.argumentExpression)
481
+ ? tsNode.argumentExpression.text
482
+ : undefined;
483
+ const property = name === undefined
484
+ ? undefined
485
+ : checker.getPropertyOfType(checker.getTypeAtLocation(tsNode.expression), name);
486
+
487
+
488
+ return property === undefined
489
+ ? undefined
490
+ : checker.getTypeOfSymbolAtLocation(property, tsNode.expression);
491
+ }
492
+ const symbol = checker.getSymbolAtLocation(tsNode);
493
+ const declaration = symbol?.valueDeclaration;
494
+ return symbol === undefined || declaration === undefined
495
+ ? undefined
496
+ : checker.getTypeOfSymbolAtLocation(symbol, declaration);
497
+ };
498
+
499
+
500
+
501
+
502
+
503
+ const isBoundWithin = (
504
+
505
+ sourceCode,
506
+
507
+ identifier,
508
+
509
+ container) => {
510
+ const variable = ASTUtils.findVariable(sourceCode.getScope(identifier), identifier);
511
+ return (variable !== null &&
512
+ Arr.isNonEmpty(variable.defs) &&
513
+ variable.defs.every((def) => container.range[0] <= def.name.range[0] &&
514
+ def.name.range[1] <= container.range[1]));
515
+ };
516
+
517
+ const isReference = (
518
+
519
+ node) => {
520
+ const { parent } = node;
521
+ return !((parent.type === AST_NODE_TYPES.MemberExpression &&
522
+ parent.property === node &&
523
+ !parent.computed) ||
524
+ (parent.type === AST_NODE_TYPES.Property &&
525
+ parent.key === node &&
526
+ !parent.computed &&
527
+ !parent.shorthand));
528
+ };
529
+
530
+
531
+
532
+
533
+
534
+
535
+ const someDescendant = (
536
+
537
+ sourceCode,
538
+
539
+ node,
540
+
541
+ predicate, enterArrows, isRoot = true) => {
542
+ if (predicate(node)) {
543
+ return true;
544
+ }
545
+ if (!isRoot &&
546
+ (node.type === AST_NODE_TYPES.FunctionDeclaration ||
547
+ node.type === AST_NODE_TYPES.FunctionExpression ||
548
+ node.type === AST_NODE_TYPES.ClassBody ||
549
+ (!enterArrows && node.type === AST_NODE_TYPES.ArrowFunctionExpression))) {
550
+ return false;
551
+ }
552
+ const keys = sourceCode.visitorKeys[node.type] ?? [];
553
+ return keys.some((key) => {
554
+ const child = isRecord(node) ? node[key] : undefined;
555
+ return (Arr.isArray(child) ? child : [child]).some((c) => isNode(c) &&
556
+ someDescendant(sourceCode, c, predicate, enterArrows, false));
557
+ });
558
+ };
559
+ const isNode = (value) => isRecord(value) && hasKey(value, 'type') && typeof value.type === 'string';
560
+ const isReturnStatement = (
561
+
562
+ node) => node.type === AST_NODE_TYPES.ReturnStatement;
563
+
564
+ const rebindsInGenerator = (
565
+
566
+ node) => node.type === AST_NODE_TYPES.ThisExpression ||
567
+ node.type === AST_NODE_TYPES.Super ||
568
+ node.type === AST_NODE_TYPES.MetaProperty ||
569
+ (node.type === AST_NODE_TYPES.Identifier && node.name === 'arguments');
570
+
571
+
572
+
573
+
574
+ const isArrayOrTupleType = (
575
+
576
+ checker,
577
+
578
+ type) => {
579
+ const resolved = (type.flags & ts.TypeFlags.TypeParameter) !== 0
580
+ ? (checker.getBaseConstraintOfType(type) ?? type)
581
+ : type;
582
+ return resolved.isUnion()
583
+ ? resolved.types.every((t) => isArrayOrTupleType(checker, t))
584
+ : resolved.isIntersection()
585
+ ? resolved.types.some((t) => isArrayOrTupleType(checker, t))
586
+ : checker.isArrayType(resolved) || checker.isTupleType(resolved);
587
+ };
588
+ //# sourceMappingURL=prefer-arr-generate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-arr-generate.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-generate.mts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-arr-uniq.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-uniq.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAalC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAwLzD,CAAC"}
1
+ {"version":3,"file":"prefer-arr-uniq.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-uniq.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAclC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAwLzD,CAAC"}