eslint-config-typed 5.3.3 → 5.4.1

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 (54) hide show
  1. package/dist/plugins/strict-dependencies/rules/resolve-import-path.d.mts.map +1 -1
  2. package/dist/plugins/strict-dependencies/rules/resolve-import-path.mjs +6 -3
  3. package/dist/plugins/strict-dependencies/rules/resolve-import-path.mjs.map +1 -1
  4. package/dist/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.d.mts +6 -0
  5. package/dist/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.d.mts.map +1 -0
  6. package/dist/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.mjs +522 -0
  7. package/dist/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.mjs.map +1 -0
  8. package/dist/plugins/ts-data-forge/rules/rules.d.mts +1 -0
  9. package/dist/plugins/ts-data-forge/rules/rules.d.mts.map +1 -1
  10. package/dist/plugins/ts-data-forge/rules/rules.mjs +2 -0
  11. package/dist/plugins/ts-data-forge/rules/rules.mjs.map +1 -1
  12. package/dist/plugins/ts-restrictions/rules/array-type-utils.d.mts +24 -0
  13. package/dist/plugins/ts-restrictions/rules/array-type-utils.d.mts.map +1 -0
  14. package/dist/plugins/ts-restrictions/rules/array-type-utils.mjs +90 -0
  15. package/dist/plugins/ts-restrictions/rules/array-type-utils.mjs.map +1 -0
  16. package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.d.mts +6 -0
  17. package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.d.mts.map +1 -0
  18. package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.mjs +118 -0
  19. package/dist/plugins/ts-restrictions/rules/no-unnecessary-array-from.mjs.map +1 -0
  20. package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.d.mts +6 -0
  21. package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.d.mts.map +1 -0
  22. package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.mjs +165 -0
  23. package/dist/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.mjs.map +1 -0
  24. package/dist/plugins/ts-restrictions/rules/rules.d.mts +2 -0
  25. package/dist/plugins/ts-restrictions/rules/rules.d.mts.map +1 -1
  26. package/dist/plugins/ts-restrictions/rules/rules.mjs +4 -0
  27. package/dist/plugins/ts-restrictions/rules/rules.mjs.map +1 -1
  28. package/dist/rules/eslint-ts-data-forge-rules.d.mts +1 -0
  29. package/dist/rules/eslint-ts-data-forge-rules.d.mts.map +1 -1
  30. package/dist/rules/eslint-ts-data-forge-rules.mjs +1 -0
  31. package/dist/rules/eslint-ts-data-forge-rules.mjs.map +1 -1
  32. package/dist/rules/eslint-ts-restrictions-rules.d.mts +2 -0
  33. package/dist/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
  34. package/dist/rules/eslint-ts-restrictions-rules.mjs +2 -0
  35. package/dist/rules/eslint-ts-restrictions-rules.mjs.map +1 -1
  36. package/dist/types/rules/eslint-ts-data-forge-rules.d.mts +15 -0
  37. package/dist/types/rules/eslint-ts-data-forge-rules.d.mts.map +1 -1
  38. package/dist/types/rules/eslint-ts-restrictions-rules.d.mts +30 -0
  39. package/dist/types/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
  40. package/package.json +4 -4
  41. package/src/plugins/strict-dependencies/rules/resolve-import-path.mts +7 -3
  42. package/src/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.mts +793 -0
  43. package/src/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.test.mts +588 -0
  44. package/src/plugins/ts-data-forge/rules/rules.mts +2 -0
  45. package/src/plugins/ts-restrictions/rules/array-type-utils.mts +110 -0
  46. package/src/plugins/ts-restrictions/rules/no-unnecessary-array-from.mts +149 -0
  47. package/src/plugins/ts-restrictions/rules/no-unnecessary-array-from.test.mts +285 -0
  48. package/src/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.mts +231 -0
  49. package/src/plugins/ts-restrictions/rules/prefer-non-mutating-array-method.test.mts +224 -0
  50. package/src/plugins/ts-restrictions/rules/rules.mts +4 -0
  51. package/src/rules/eslint-ts-data-forge-rules.mts +1 -0
  52. package/src/rules/eslint-ts-restrictions-rules.mts +2 -0
  53. package/src/types/rules/eslint-ts-data-forge-rules.mts +16 -0
  54. package/src/types/rules/eslint-ts-restrictions-rules.mts +32 -0
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-import-path.d.mts","sourceRoot":"","sources":["../../../../src/plugins/strict-dependencies/rules/resolve-import-path.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,MAAM,EAClB,kBAAkB,MAAM,GAAG,SAAS,EACpC,cAAc,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3C,MAsDF,CAAC"}
1
+ {"version":3,"file":"resolve-import-path.d.mts","sourceRoot":"","sources":["../../../../src/plugins/strict-dependencies/rules/resolve-import-path.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,MAAM,EAClB,kBAAkB,MAAM,GAAG,SAAS,EACpC,cAAc,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3C,MA0DF,CAAC"}
@@ -21,10 +21,13 @@ const resolveImportPath = (importPath, relativeFilePath, pathIndexMap) => {
21
21
  const pathIndex = matchedKey !== undefined ? pathIndexMap[matchedKey] : 0;
22
22
  if (Arr.isNonEmpty(value)) {
23
23
  const pathValue = mapNullable(pathIndex, (i) => value[i]) ?? value[0];
24
+ // `baseUrl` is deprecated in TypeScript 6.0, but this rule still
25
+ // needs to read it (if present) to resolve legacy `baseUrl`-relative
26
+ // `paths` entries the same way `tsc` does.
27
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
28
+ const { baseUrl } = tsconfigOptions;
24
29
  mut_importAliasMap[key] =
25
- tsconfigOptions.baseUrl !== undefined
26
- ? path.join(tsconfigOptions.baseUrl, pathValue)
27
- : pathValue;
30
+ baseUrl !== undefined ? path.join(baseUrl, pathValue) : pathValue;
28
31
  }
29
32
  }
30
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-import-path.mjs","sources":["../../../../src/plugins/strict-dependencies/rules/resolve-import-path.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-import-path.mjs","sources":["../../../../src/plugins/strict-dependencies/rules/resolve-import-path.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type Options = readonly [];
3
+ type MessageIds = 'preferCanonicalArraySlicing';
4
+ export declare const preferCanonicalArraySlicing: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-canonical-array-slicing.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-canonical-array-slicing.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAUlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,6BAA6B,CAAC;AA6IhD,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,UAAU,CAC3D,UAAU,EACV,OAAO,CAsnBC,CAAC"}
@@ -0,0 +1,522 @@
1
+ import { ESLintUtils, AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import * as ts from 'typescript';
3
+ import { getTsDataForgeImport, getImportedLocalName, buildImportFixes } from './import-utils.mjs';
4
+
5
+ /** `skip 1` / `skipLast 1` have dedicated single-element names. */
6
+ const normalizeCountedOp = (fn, count) => count < 1
7
+ ? undefined
8
+ : fn === 'skip' && count === 1
9
+ ? { fn: 'tail' }
10
+ : fn === 'skipLast' && count === 1
11
+ ? { fn: 'butLast' }
12
+ : { fn, count };
13
+ const asNonNegativeIntegerLiteral = (node) => node.type === AST_NODE_TYPES.Literal &&
14
+ typeof node.value === 'number' &&
15
+ Number.isInteger(node.value) &&
16
+ node.value >= 0
17
+ ? node.value
18
+ : undefined;
19
+ /** Matches `-N` (unary minus of a positive integer literal) and returns `N`. */
20
+ const asNegatedPositiveIntegerLiteral = (node) => {
21
+ if (node.type !== AST_NODE_TYPES.UnaryExpression ||
22
+ node.operator !== '-' ||
23
+ node.argument.type !== AST_NODE_TYPES.Literal) {
24
+ return undefined;
25
+ }
26
+ const n = asNonNegativeIntegerLiteral(node.argument);
27
+ return n !== undefined && n >= 1 ? n : undefined;
28
+ };
29
+ /**
30
+ * Whether re-reading the expression is free of side effects (a plain variable
31
+ * or a non-computed property chain). Required for patterns that reference the
32
+ * receiver twice, such as `xs.filter((_, i) => i < xs.length - 1)`.
33
+ */
34
+ const isSimpleReference = (node) => node.type === AST_NODE_TYPES.Identifier ||
35
+ node.type === AST_NODE_TYPES.ThisExpression ||
36
+ (node.type === AST_NODE_TYPES.MemberExpression &&
37
+ !node.computed &&
38
+ node.property.type === AST_NODE_TYPES.Identifier &&
39
+ isSimpleReference(node.object));
40
+ const rootIdentifierName = (node) => node.type === AST_NODE_TYPES.Identifier
41
+ ? node.name
42
+ : node.type === AST_NODE_TYPES.MemberExpression
43
+ ? rootIdentifierName(node.object)
44
+ : undefined;
45
+ const COMPARISON_OPERATORS = new Set([
46
+ '!==',
47
+ '<',
48
+ '<=',
49
+ '>',
50
+ '>=',
51
+ ]);
52
+ /** Mirror of each comparison when its operands are swapped. */
53
+ const FLIPPED_OPERATORS = {
54
+ '!==': '!==',
55
+ '<': '>',
56
+ '<=': '>=',
57
+ '>': '<',
58
+ '>=': '<=',
59
+ };
60
+ /** Classifies `index OP N` (a comparison against an integer literal). */
61
+ const classifyLiteralComparison = (op, n) => {
62
+ switch (op) {
63
+ case '>=':
64
+ return normalizeCountedOp('skip', n);
65
+ case '>':
66
+ return normalizeCountedOp('skip', n + 1);
67
+ case '!==':
68
+ return n === 0 ? { fn: 'tail' } : undefined;
69
+ case '<':
70
+ return normalizeCountedOp('take', n);
71
+ case '<=':
72
+ return normalizeCountedOp('take', n + 1);
73
+ }
74
+ };
75
+ /** Classifies `index OP <xs>.length - M`. */
76
+ const classifyLengthComparison = (op, m) => {
77
+ switch (op) {
78
+ case '<':
79
+ return normalizeCountedOp('skipLast', m);
80
+ case '<=':
81
+ return normalizeCountedOp('skipLast', m - 1);
82
+ case '!==':
83
+ return m === 1 ? { fn: 'butLast' } : undefined;
84
+ case '>=':
85
+ return normalizeCountedOp('takeLast', m);
86
+ case '>':
87
+ return normalizeCountedOp('takeLast', m - 1);
88
+ }
89
+ };
90
+ const preferCanonicalArraySlicing = {
91
+ meta: {
92
+ type: 'suggestion',
93
+ docs: {
94
+ description: 'Unify non-mutating array element addition/removal patterns (`slice` / `toSpliced` / `filter` / `concat` / spread) into the corresponding ts-data-forge functions: `Arr.tail`, `Arr.skip`, `Arr.take`, `Arr.butLast`, `Arr.skipLast`, `Arr.takeLast`, `Arr.toUnshifted`, `Arr.toPushed`.',
95
+ },
96
+ fixable: 'code',
97
+ schema: [],
98
+ messages: {
99
+ preferCanonicalArraySlicing: 'Replace with `{{replacement}}` from ts-data-forge.',
100
+ },
101
+ },
102
+ create: (context) => {
103
+ const sourceCode = context.sourceCode;
104
+ const program = sourceCode.ast;
105
+ const tsDataForgeImport = getTsDataForgeImport(program);
106
+ const parserServices = ESLintUtils.getParserServices(context);
107
+ const checker = parserServices.program.getTypeChecker();
108
+ /**
109
+ * The in-scope way to reference the `Arr` namespace: a named import
110
+ * (possibly aliased), a namespace import member, or the canonical `Arr`
111
+ * (added by the import fix when nothing is imported yet).
112
+ */
113
+ const arrLocalName = getImportedLocalName(tsDataForgeImport, 'Arr');
114
+ const namespaceLocalName = tsDataForgeImport?.specifiers.find((specifier) => specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier)?.local.name;
115
+ const arrRef = arrLocalName ??
116
+ (namespaceLocalName === undefined ? 'Arr' : `${namespaceLocalName}.Arr`);
117
+ const needsArrImport = arrLocalName === undefined && namespaceLocalName === undefined;
118
+ /**
119
+ * Deferred (non-concrete) types are reduced to their base constraint
120
+ * before checking; `any` / `unknown` are conservatively not array-like.
121
+ */
122
+ const isArrayOrTupleType = (type) => {
123
+ if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) {
124
+ return false;
125
+ }
126
+ if (type.isUnion()) {
127
+ return type.types.every(isArrayOrTupleType);
128
+ }
129
+ if ((type.flags &
130
+ (ts.TypeFlags.TypeParameter |
131
+ ts.TypeFlags.IndexedAccess |
132
+ ts.TypeFlags.Conditional |
133
+ ts.TypeFlags.Substitution)) !==
134
+ 0) {
135
+ const constraint = checker.getBaseConstraintOfType(type);
136
+ return constraint !== undefined && isArrayOrTupleType(constraint);
137
+ }
138
+ return checker.isArrayType(type) || checker.isTupleType(type);
139
+ };
140
+ const getTypeOf = (node) => checker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node));
141
+ /**
142
+ * `true` only when the type can never be an array in any branch, so
143
+ * `xs.concat(v)` is guaranteed to append `v` as one element rather than
144
+ * flattening it.
145
+ */
146
+ const isDefinitelyNotArrayType = (type) => {
147
+ if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) {
148
+ return false;
149
+ }
150
+ if (type.isUnion()) {
151
+ return type.types.every(isDefinitelyNotArrayType);
152
+ }
153
+ if ((type.flags &
154
+ (ts.TypeFlags.TypeParameter |
155
+ ts.TypeFlags.IndexedAccess |
156
+ ts.TypeFlags.Conditional |
157
+ ts.TypeFlags.Substitution)) !==
158
+ 0) {
159
+ const constraint = checker.getBaseConstraintOfType(type);
160
+ return constraint !== undefined && isDefinitelyNotArrayType(constraint);
161
+ }
162
+ return !checker.isArrayType(type) && !checker.isTupleType(type);
163
+ };
164
+ /** Argument-position text; a comma (sequence) expression needs parens. */
165
+ const toArgText = (node) => {
166
+ const text = sourceCode.getText(node);
167
+ return node.type === AST_NODE_TYPES.SequenceExpression
168
+ ? `(${text})`
169
+ : text;
170
+ };
171
+ const toReplacementText = (op, xsText) => {
172
+ switch (op.fn) {
173
+ case 'tail':
174
+ case 'butLast':
175
+ return `${arrRef}.${op.fn}(${xsText})`;
176
+ case 'skip':
177
+ case 'take':
178
+ case 'skipLast':
179
+ case 'takeLast':
180
+ return `${arrRef}.${op.fn}(${xsText}, ${op.count})`;
181
+ case 'toUnshifted':
182
+ case 'toPushed':
183
+ return `${arrRef}.${op.fn}(${xsText}, ${op.itemText})`;
184
+ }
185
+ };
186
+ const mut_nodesToFix = [];
187
+ const report = (node, op, xsText) => {
188
+ mut_nodesToFix.push({
189
+ node,
190
+ replacement: toReplacementText(op, xsText),
191
+ });
192
+ };
193
+ /** Matches `<xsText>.length` (non-computed). */
194
+ const isReceiverLengthAccess = (node, receiverText) => node.type === AST_NODE_TYPES.MemberExpression &&
195
+ !node.computed &&
196
+ node.property.type === AST_NODE_TYPES.Identifier &&
197
+ node.property.name === 'length' &&
198
+ sourceCode.getText(node.object) === receiverText;
199
+ /** Matches `<xsText>.length - M` (M ≥ 1) and returns `M`. */
200
+ const matchLengthMinus = (node, receiverText) => {
201
+ if (node.type !== AST_NODE_TYPES.BinaryExpression ||
202
+ node.operator !== '-' ||
203
+ !isReceiverLengthAccess(node.left, receiverText)) {
204
+ return undefined;
205
+ }
206
+ const m = asNonNegativeIntegerLiteral(node.right);
207
+ return m !== undefined && m >= 1 ? m : undefined;
208
+ };
209
+ /**
210
+ * Matches an index-only filter callback (`(_, i) => <comparison>`) and
211
+ * classifies the comparison. Both a leading index (`i >= 1`) and a
212
+ * trailing index (`1 <= i`) operand order are accepted.
213
+ */
214
+ const classifyFilterCallback = (callback, receiver, receiverText) => {
215
+ if (callback.type !== AST_NODE_TYPES.ArrowFunctionExpression ||
216
+ callback.async ||
217
+ callback.body.type === AST_NODE_TYPES.BlockStatement ||
218
+ callback.params.length !== 2) {
219
+ return undefined;
220
+ }
221
+ const [elementParam, indexParam] = callback.params;
222
+ if (elementParam === undefined ||
223
+ indexParam === undefined ||
224
+ elementParam.type !== AST_NODE_TYPES.Identifier ||
225
+ indexParam.type !== AST_NODE_TYPES.Identifier) {
226
+ return undefined;
227
+ }
228
+ // A callback parameter shadowing the receiver's root binding (e.g.
229
+ // `xs.filter((xs, i) => i < xs.length - 1)`) would make the textual
230
+ // `xs.length` comparison refer to the element, not the receiver.
231
+ const receiverRoot = rootIdentifierName(receiver);
232
+ if (receiverRoot !== undefined &&
233
+ (elementParam.name === receiverRoot || indexParam.name === receiverRoot)) {
234
+ return undefined;
235
+ }
236
+ const body = callback.body;
237
+ if (body.type !== AST_NODE_TYPES.BinaryExpression ||
238
+ !COMPARISON_OPERATORS.has(body.operator)) {
239
+ return undefined;
240
+ }
241
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
242
+ const rawOperator = body.operator;
243
+ const isIndex = (side) => side.type === AST_NODE_TYPES.Identifier &&
244
+ side.name === indexParam.name;
245
+ const [op, other] = isIndex(body.left)
246
+ ? [rawOperator, body.right]
247
+ : isIndex(body.right)
248
+ ? [FLIPPED_OPERATORS[rawOperator], body.left]
249
+ : [undefined, undefined];
250
+ // `op` and `other` are set together (both from the same tuple), so
251
+ // checking `op` also guarantees `other` is defined.
252
+ if (op === undefined || isIndex(other)) {
253
+ return undefined;
254
+ }
255
+ // The element parameter must not participate in the comparison (only
256
+ // the index side and a receiver-independent bound are recognized, so
257
+ // reaching here with an element reference is impossible for literals,
258
+ // but `xs.length - N` needs a stable receiver).
259
+ const n = asNonNegativeIntegerLiteral(other);
260
+ if (n !== undefined) {
261
+ return classifyLiteralComparison(op, n);
262
+ }
263
+ if (!isSimpleReference(receiver))
264
+ return undefined;
265
+ const m = matchLengthMinus(other, receiverText);
266
+ return m === undefined ? undefined : classifyLengthComparison(op, m);
267
+ };
268
+ const classifySliceArgs = (args, receiver) => {
269
+ if (args.length === 1) {
270
+ const [start] = args;
271
+ if (start === undefined)
272
+ return undefined;
273
+ const n = asNonNegativeIntegerLiteral(start);
274
+ if (n !== undefined)
275
+ return normalizeCountedOp('skip', n);
276
+ const negated = asNegatedPositiveIntegerLiteral(start);
277
+ return negated === undefined
278
+ ? undefined
279
+ : normalizeCountedOp('takeLast', negated);
280
+ }
281
+ if (args.length === 2) {
282
+ const [start, end] = args;
283
+ if (start === undefined ||
284
+ end === undefined ||
285
+ asNonNegativeIntegerLiteral(start) !== 0) {
286
+ return undefined;
287
+ }
288
+ const n = asNonNegativeIntegerLiteral(end);
289
+ if (n !== undefined)
290
+ return normalizeCountedOp('take', n);
291
+ const negated = asNegatedPositiveIntegerLiteral(end);
292
+ if (negated !== undefined) {
293
+ return normalizeCountedOp('skipLast', negated);
294
+ }
295
+ if (!isSimpleReference(receiver))
296
+ return undefined;
297
+ const m = matchLengthMinus(end, sourceCode.getText(receiver));
298
+ return m === undefined ? undefined : normalizeCountedOp('skipLast', m);
299
+ }
300
+ return undefined;
301
+ };
302
+ const classifyToSplicedArgs = (args, receiver, receiverText) => {
303
+ if (args.length === 1) {
304
+ const [start] = args;
305
+ if (start === undefined)
306
+ return undefined;
307
+ const n = asNonNegativeIntegerLiteral(start);
308
+ // `xs.toSpliced(N)` removes everything from index N on → take N.
309
+ if (n !== undefined)
310
+ return normalizeCountedOp('take', n);
311
+ const negated = asNegatedPositiveIntegerLiteral(start);
312
+ // `xs.toSpliced(-N)` removes the last N elements → skipLast N.
313
+ return negated === undefined
314
+ ? undefined
315
+ : normalizeCountedOp('skipLast', negated);
316
+ }
317
+ if (args.length === 2) {
318
+ const [start, deleteCount] = args;
319
+ if (start === undefined ||
320
+ deleteCount === undefined ||
321
+ asNonNegativeIntegerLiteral(start) !== 0) {
322
+ return undefined;
323
+ }
324
+ // `xs.toSpliced(0, N)` removes the first N elements → skip N.
325
+ const n = asNonNegativeIntegerLiteral(deleteCount);
326
+ if (n !== undefined)
327
+ return normalizeCountedOp('skip', n);
328
+ // `xs.toSpliced(0, xs.length - N)` keeps the last N → takeLast N.
329
+ // (Note: `xs.toSpliced(0, -N)` clamps the delete count to 0 and is a
330
+ // plain copy, so it is deliberately NOT treated as takeLast.)
331
+ if (!isSimpleReference(receiver))
332
+ return undefined;
333
+ const m = matchLengthMinus(deleteCount, receiverText);
334
+ return m === undefined ? undefined : normalizeCountedOp('takeLast', m);
335
+ }
336
+ if (args.length === 3) {
337
+ const [start, deleteCount, item] = args;
338
+ if (start === undefined ||
339
+ deleteCount === undefined ||
340
+ item === undefined ||
341
+ item.type === AST_NODE_TYPES.SpreadElement ||
342
+ asNonNegativeIntegerLiteral(deleteCount) !== 0) {
343
+ return undefined;
344
+ }
345
+ // `xs.toSpliced(0, 0, item)` prepends → toUnshifted.
346
+ if (asNonNegativeIntegerLiteral(start) === 0) {
347
+ return { fn: 'toUnshifted', itemText: toArgText(item) };
348
+ }
349
+ // `xs.toSpliced(xs.length, 0, item)` appends → toPushed.
350
+ if (isSimpleReference(receiver) &&
351
+ isReceiverLengthAccess(start, receiverText)) {
352
+ return { fn: 'toPushed', itemText: toArgText(item) };
353
+ }
354
+ return undefined;
355
+ }
356
+ return undefined;
357
+ };
358
+ return {
359
+ CallExpression: (node) => {
360
+ const callee = node.callee;
361
+ if (callee.type !== AST_NODE_TYPES.MemberExpression ||
362
+ callee.computed ||
363
+ callee.property.type !== AST_NODE_TYPES.Identifier) {
364
+ return;
365
+ }
366
+ const methodName = callee.property.name;
367
+ const receiver = callee.object;
368
+ // `Arr.skip(xs, 1)` → `Arr.tail(xs)`, `Arr.skipLast(xs, 1)` →
369
+ // `Arr.butLast(xs)` (also via a namespace import or an alias).
370
+ if (methodName === 'skip' || methodName === 'skipLast') {
371
+ const isArrObject = (receiver.type === AST_NODE_TYPES.Identifier &&
372
+ receiver.name === arrLocalName) ||
373
+ (receiver.type === AST_NODE_TYPES.MemberExpression &&
374
+ !receiver.computed &&
375
+ receiver.object.type === AST_NODE_TYPES.Identifier &&
376
+ receiver.object.name === namespaceLocalName &&
377
+ receiver.property.type === AST_NODE_TYPES.Identifier &&
378
+ receiver.property.name === 'Arr');
379
+ const [arrayArg, countArg] = node.arguments;
380
+ if (isArrObject &&
381
+ node.arguments.length === 2 &&
382
+ arrayArg !== undefined &&
383
+ arrayArg.type !== AST_NODE_TYPES.SpreadElement &&
384
+ countArg !== undefined &&
385
+ asNonNegativeIntegerLiteral(countArg) === 1) {
386
+ report(node, { fn: methodName === 'skip' ? 'tail' : 'butLast' }, toArgText(arrayArg));
387
+ }
388
+ return;
389
+ }
390
+ // `[item].concat(xs)` → `Arr.toUnshifted(xs, item)`.
391
+ if (methodName === 'concat' &&
392
+ receiver.type === AST_NODE_TYPES.ArrayExpression) {
393
+ const [element] = receiver.elements;
394
+ const [arg] = node.arguments;
395
+ if (receiver.elements.length === 1 &&
396
+ element !== null &&
397
+ element !== undefined &&
398
+ element.type !== AST_NODE_TYPES.SpreadElement &&
399
+ node.arguments.length === 1 &&
400
+ arg !== undefined &&
401
+ arg.type !== AST_NODE_TYPES.SpreadElement &&
402
+ isArrayOrTupleType(getTypeOf(arg))) {
403
+ report(node, { fn: 'toUnshifted', itemText: toArgText(element) }, toArgText(arg));
404
+ }
405
+ return;
406
+ }
407
+ if (methodName !== 'slice' &&
408
+ methodName !== 'toSpliced' &&
409
+ methodName !== 'filter' &&
410
+ methodName !== 'concat') {
411
+ return;
412
+ }
413
+ // The receiver must be an array or tuple (not a string / typed array
414
+ // / other object that happens to share the method name).
415
+ if (!isArrayOrTupleType(getTypeOf(receiver)))
416
+ return;
417
+ const receiverText = sourceCode.getText(receiver);
418
+ switch (methodName) {
419
+ case 'slice': {
420
+ const op = classifySliceArgs(node.arguments, receiver);
421
+ if (op !== undefined)
422
+ report(node, op, toArgText(receiver));
423
+ return;
424
+ }
425
+ case 'toSpliced': {
426
+ const op = classifyToSplicedArgs(node.arguments, receiver, receiverText);
427
+ if (op !== undefined)
428
+ report(node, op, toArgText(receiver));
429
+ return;
430
+ }
431
+ case 'filter': {
432
+ const [callback] = node.arguments;
433
+ if (callback === undefined || node.arguments.length !== 1) {
434
+ return;
435
+ }
436
+ const op = classifyFilterCallback(callback, receiver, receiverText);
437
+ if (op !== undefined)
438
+ report(node, op, toArgText(receiver));
439
+ return;
440
+ }
441
+ case 'concat': {
442
+ const [arg] = node.arguments;
443
+ if (node.arguments.length !== 1 ||
444
+ arg === undefined ||
445
+ arg.type === AST_NODE_TYPES.SpreadElement) {
446
+ return;
447
+ }
448
+ // `xs.concat([item])` → `Arr.toPushed(xs, item)`.
449
+ if (arg.type === AST_NODE_TYPES.ArrayExpression) {
450
+ const [element] = arg.elements;
451
+ if (arg.elements.length === 1 &&
452
+ element !== null &&
453
+ element !== undefined &&
454
+ element.type !== AST_NODE_TYPES.SpreadElement) {
455
+ report(node, { fn: 'toPushed', itemText: toArgText(element) }, toArgText(receiver));
456
+ }
457
+ return;
458
+ }
459
+ // `xs.concat(item)` appends only when `item` can never be an
460
+ // array (otherwise `concat` would flatten it).
461
+ if (isDefinitelyNotArrayType(getTypeOf(arg))) {
462
+ report(node, { fn: 'toPushed', itemText: toArgText(arg) }, toArgText(receiver));
463
+ }
464
+ }
465
+ }
466
+ },
467
+ ArrayExpression: (node) => {
468
+ // `[item, ...xs]` → `Arr.toUnshifted(xs, item)`,
469
+ // `[...xs, item]` → `Arr.toPushed(xs, item)`.
470
+ if (node.elements.length !== 2)
471
+ return;
472
+ const [first, second] = node.elements;
473
+ if (first === null ||
474
+ first === undefined ||
475
+ second === null ||
476
+ second === undefined) {
477
+ return;
478
+ }
479
+ const [spread, item, fn] = first.type === AST_NODE_TYPES.SpreadElement &&
480
+ second.type !== AST_NODE_TYPES.SpreadElement
481
+ ? [first, second, 'toPushed']
482
+ : first.type !== AST_NODE_TYPES.SpreadElement &&
483
+ second.type === AST_NODE_TYPES.SpreadElement
484
+ ? [second, first, 'toUnshifted']
485
+ : [undefined, undefined, undefined];
486
+ // `spread`, `item`, and `fn` are set together (all from the same
487
+ // tuple), so checking `spread` also guarantees the others are
488
+ // defined.
489
+ if (spread === undefined)
490
+ return;
491
+ // Spreading a non-array iterable (`[v, ...someSet]`) is a genuine
492
+ // conversion, not an element addition to an array.
493
+ if (!isArrayOrTupleType(getTypeOf(spread.argument)))
494
+ return;
495
+ report(node, { fn, itemText: toArgText(item) }, toArgText(spread.argument));
496
+ },
497
+ 'Program:exit': () => {
498
+ for (const [index, nodeInfo] of mut_nodesToFix.entries()) {
499
+ context.report({
500
+ node: nodeInfo.node,
501
+ messageId: 'preferCanonicalArraySlicing',
502
+ data: { replacement: nodeInfo.replacement },
503
+ fix: (fixer) => {
504
+ const importFixes = index === 0 && needsArrImport
505
+ ? buildImportFixes(fixer, program, tsDataForgeImport, ['Arr'])
506
+ : [];
507
+ return [
508
+ ...importFixes,
509
+ fixer.replaceText(nodeInfo.node, nodeInfo.replacement),
510
+ ];
511
+ },
512
+ });
513
+ }
514
+ },
515
+ };
516
+ },
517
+ defaultOptions: [],
518
+ };
519
+ /* eslint-enable @typescript-eslint/prefer-readonly-parameter-types */
520
+
521
+ export { preferCanonicalArraySlicing };
522
+ //# sourceMappingURL=prefer-canonical-array-slicing.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-canonical-array-slicing.mjs","sources":["../../../../src/plugins/ts-data-forge/rules/prefer-canonical-array-slicing.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare const tsDataForgeRules: {
2
+ readonly 'prefer-canonical-array-slicing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferCanonicalArraySlicing", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
3
  readonly 'prefer-arr-is-array-at-least-length': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useIsArrayAtLeastLength", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
4
  readonly 'prefer-arr-is-array-of-length': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useIsArrayOfLength", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
4
5
  readonly 'prefer-arr-is-array': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useArrIsArray", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-data-forge/rules/rules.mts"],"names":[],"mappings":"AAeA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAca,CAAC"}
1
+ {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-data-forge/rules/rules.mts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAea,CAAC"}
@@ -5,6 +5,7 @@ import { preferArrIsArray } from './prefer-arr-is-array.mjs';
5
5
  import { preferArrIsNonEmpty } from './prefer-arr-is-non-empty.mjs';
6
6
  import { preferArrSum } from './prefer-arr-sum.mjs';
7
7
  import { preferAsInt } from './prefer-as-int.mjs';
8
+ import { preferCanonicalArraySlicing } from './prefer-canonical-array-slicing.mjs';
8
9
  import { preferComparisonOverNullishGuard } from './prefer-comparison-over-nullish-guard.mjs';
9
10
  import { preferIsNonNullObject } from './prefer-is-non-null-object.mjs';
10
11
  import { preferIsRecordAndHasKey } from './prefer-is-record-and-has-key.mjs';
@@ -13,6 +14,7 @@ import { preferNumSafeParseInt } from './prefer-num-safe-parse-int.mjs';
13
14
  import { preferRangeForLoop } from './prefer-range-for-loop.mjs';
14
15
 
15
16
  const tsDataForgeRules = {
17
+ 'prefer-canonical-array-slicing': preferCanonicalArraySlicing,
16
18
  'prefer-arr-is-array-at-least-length': preferArrIsArrayAtLeastLength,
17
19
  'prefer-arr-is-array-of-length': preferArrIsArrayOfLength,
18
20
  'prefer-arr-is-array': preferArrIsArray,
@@ -1 +1 @@
1
- {"version":3,"file":"rules.mjs","sources":["../../../../src/plugins/ts-data-forge/rules/rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;AAeO,MAAM,gBAAgB,GAAG;AAC9B,IAAA,qCAAqC,EAAE,6BAA6B;AACpE,IAAA,+BAA+B,EAAE,wBAAwB;AACzD,IAAA,qBAAqB,EAAE,gBAAgB;AACvC,IAAA,yBAAyB,EAAE,mBAAmB;AAC9C,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,2BAA2B,EAAE,qBAAqB;AAClD,IAAA,uBAAuB,EAAE,kBAAkB;AAC3C,IAAA,8BAA8B,EAAE,uBAAuB;AACvD,IAAA,2BAA2B,EAAE,qBAAqB;AAClD,IAAA,6BAA6B,EAAE,uBAAuB;AACtD,IAAA,2BAA2B,EAAE,sBAAsB;AACnD,IAAA,sCAAsC,EAAE,gCAAgC;;;;;"}
1
+ {"version":3,"file":"rules.mjs","sources":["../../../../src/plugins/ts-data-forge/rules/rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;AAgBO,MAAM,gBAAgB,GAAG;AAC9B,IAAA,gCAAgC,EAAE,2BAA2B;AAC7D,IAAA,qCAAqC,EAAE,6BAA6B;AACpE,IAAA,+BAA+B,EAAE,wBAAwB;AACzD,IAAA,qBAAqB,EAAE,gBAAgB;AACvC,IAAA,yBAAyB,EAAE,mBAAmB;AAC9C,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,2BAA2B,EAAE,qBAAqB;AAClD,IAAA,uBAAuB,EAAE,kBAAkB;AAC3C,IAAA,8BAA8B,EAAE,uBAAuB;AACvD,IAAA,2BAA2B,EAAE,qBAAqB;AAClD,IAAA,6BAA6B,EAAE,uBAAuB;AACtD,IAAA,2BAA2B,EAAE,sBAAsB;AACnD,IAAA,sCAAsC,EAAE,gCAAgC;;;;;"}