eslint-plugin-ts-data-forge 0.10.4 → 0.10.6
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/dist/rules/ast-utils.d.mts +5 -5
- package/dist/rules/ast-utils.d.mts.map +1 -1
- package/dist/rules/ast-utils.mjs +3 -3
- package/dist/rules/ast-utils.mjs.map +1 -1
- package/dist/rules/import-binding.d.mts +38 -0
- package/dist/rules/import-binding.d.mts.map +1 -0
- package/dist/rules/import-binding.mjs +53 -0
- package/dist/rules/import-binding.mjs.map +1 -0
- package/dist/rules/mutable-result.mjs +37 -37
- package/dist/rules/mutable-result.mjs.map +1 -1
- package/dist/rules/no-unnecessary-type-guard.d.mts.map +1 -1
- package/dist/rules/no-unnecessary-type-guard.mjs +146 -143
- package/dist/rules/no-unnecessary-type-guard.mjs.map +1 -1
- package/dist/rules/prefer-arr-generate.d.mts.map +1 -1
- package/dist/rules/prefer-arr-generate.mjs +129 -131
- package/dist/rules/prefer-arr-generate.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-bounded-length-array.d.mts.map +1 -1
- package/dist/rules/prefer-arr-is-bounded-length-array.mjs +14 -16
- package/dist/rules/prefer-arr-is-bounded-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-fixed-length-array.d.mts.map +1 -1
- package/dist/rules/prefer-arr-is-fixed-length-array.mjs +15 -17
- package/dist/rules/prefer-arr-is-fixed-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-max-length-array.d.mts.map +1 -1
- package/dist/rules/prefer-arr-is-max-length-array.mjs +14 -16
- package/dist/rules/prefer-arr-is-max-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-min-length-array.d.mts.map +1 -1
- package/dist/rules/prefer-arr-is-min-length-array.mjs +14 -16
- package/dist/rules/prefer-arr-is-min-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-non-empty.d.mts.map +1 -1
- package/dist/rules/prefer-arr-is-non-empty.mjs +14 -16
- package/dist/rules/prefer-arr-is-non-empty.mjs.map +1 -1
- package/dist/rules/prefer-arr-scan.d.mts.map +1 -1
- package/dist/rules/prefer-arr-scan.mjs +9 -18
- package/dist/rules/prefer-arr-scan.mjs.map +1 -1
- package/dist/rules/prefer-arr-sum.d.mts.map +1 -1
- package/dist/rules/prefer-arr-sum.mjs +16 -21
- package/dist/rules/prefer-arr-sum.mjs.map +1 -1
- package/dist/rules/prefer-arr-uniq.d.mts.map +1 -1
- package/dist/rules/prefer-arr-uniq.mjs +38 -43
- package/dist/rules/prefer-arr-uniq.mjs.map +1 -1
- package/dist/rules/prefer-as-int.d.mts.map +1 -1
- package/dist/rules/prefer-as-int.mjs +19 -26
- package/dist/rules/prefer-as-int.mjs.map +1 -1
- package/dist/rules/prefer-canonical-array-slicing.d.mts.map +1 -1
- package/dist/rules/prefer-canonical-array-slicing.mjs +49 -15
- package/dist/rules/prefer-canonical-array-slicing.mjs.map +1 -1
- package/dist/rules/prefer-canonical-length-cast.mjs +15 -15
- package/dist/rules/prefer-canonical-length-cast.mjs.map +1 -1
- package/dist/rules/prefer-obj-over-entries-round-trip.d.mts.map +1 -1
- package/dist/rules/prefer-obj-over-entries-round-trip.mjs +100 -99
- package/dist/rules/prefer-obj-over-entries-round-trip.mjs.map +1 -1
- package/dist/rules/prefer-pipe-map-nullable.d.mts.map +1 -1
- package/dist/rules/prefer-pipe-map-nullable.mjs +2 -4
- package/dist/rules/prefer-pipe-map-nullable.mjs.map +1 -1
- package/dist/rules/prefer-range-for-loop.d.mts.map +1 -1
- package/dist/rules/prefer-range-for-loop.mjs +18 -24
- package/dist/rules/prefer-range-for-loop.mjs.map +1 -1
- package/package.json +5 -5
- package/src/rules/ast-utils.mts +11 -11
- package/src/rules/import-binding.mts +94 -0
- package/src/rules/mutable-result.mts +56 -56
- package/src/rules/no-unnecessary-type-guard.mts +199 -203
- package/src/rules/no-unnecessary-type-guard.test.mts +62 -2
- package/src/rules/prefer-arr-generate.mts +184 -194
- package/src/rules/prefer-arr-generate.test.mts +262 -134
- package/src/rules/prefer-arr-is-array.test.mts +87 -5
- package/src/rules/prefer-arr-is-bounded-length-array.mts +22 -33
- package/src/rules/prefer-arr-is-fixed-length-array.mts +24 -36
- package/src/rules/prefer-arr-is-fixed-length-array.test.mts +16 -7
- package/src/rules/prefer-arr-is-max-length-array.mts +21 -34
- package/src/rules/prefer-arr-is-max-length-array.test.mts +16 -7
- package/src/rules/prefer-arr-is-min-length-array.mts +21 -34
- package/src/rules/prefer-arr-is-min-length-array.test.mts +16 -7
- package/src/rules/prefer-arr-is-non-empty.mts +17 -34
- package/src/rules/prefer-arr-is-non-empty.test.mts +110 -0
- package/src/rules/prefer-arr-scan.mts +11 -36
- package/src/rules/prefer-arr-scan.test.mts +55 -0
- package/src/rules/prefer-arr-sum.mts +19 -33
- package/src/rules/prefer-arr-uniq.mts +49 -60
- package/src/rules/prefer-arr-uniq.test.mts +46 -20
- package/src/rules/prefer-as-int.mts +27 -52
- package/src/rules/prefer-as-int.test.mts +79 -29
- package/src/rules/prefer-canonical-array-slicing.mts +86 -24
- package/src/rules/prefer-canonical-array-slicing.test.mts +133 -34
- package/src/rules/prefer-canonical-length-cast.mts +18 -18
- package/src/rules/prefer-is-non-null-object.test.mts +62 -37
- package/src/rules/prefer-is-record-and-has-key.test.mts +32 -17
- package/src/rules/prefer-num-safe-parse-float.test.mts +45 -21
- package/src/rules/prefer-num-safe-parse-int.test.mts +29 -14
- package/src/rules/prefer-obj-over-entries-round-trip.mts +152 -170
- package/src/rules/prefer-obj-over-entries-round-trip.test.mts +48 -6
- package/src/rules/prefer-pipe-map-nullable.mts +6 -8
- package/src/rules/prefer-range-for-loop.mts +31 -55
|
@@ -4,15 +4,9 @@ import {
|
|
|
4
4
|
type TSESLint,
|
|
5
5
|
type TSESTree,
|
|
6
6
|
} from '@typescript-eslint/utils';
|
|
7
|
-
import {
|
|
8
|
-
buildNamedImportFix,
|
|
9
|
-
getArgumentText,
|
|
10
|
-
getImportDeclarations,
|
|
11
|
-
getNamedImports,
|
|
12
|
-
skipTypeWrappers,
|
|
13
|
-
} from 'eslint-rule-forge';
|
|
7
|
+
import { getArgumentText, skipTypeWrappers } from 'eslint-rule-forge';
|
|
14
8
|
import { Arr } from 'ts-data-forge';
|
|
15
|
-
import {
|
|
9
|
+
import { tsDataForgeValueAt } from './import-binding.mjs';
|
|
16
10
|
|
|
17
11
|
type Options = readonly [];
|
|
18
12
|
|
|
@@ -37,13 +31,6 @@ export const preferRangeForLoop: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
37
31
|
create: (context) => {
|
|
38
32
|
const sourceCode = context.sourceCode;
|
|
39
33
|
|
|
40
|
-
const program = sourceCode.ast;
|
|
41
|
-
|
|
42
|
-
const tsDataForgeImports = getImportDeclarations(
|
|
43
|
-
program,
|
|
44
|
-
TS_DATA_FORGE_MODULE,
|
|
45
|
-
);
|
|
46
|
-
|
|
47
34
|
/**
|
|
48
35
|
* Whether `node` is the same value on every iteration: a literal, or a
|
|
49
36
|
* variable that is never reassigned anywhere (not only in the loop, since
|
|
@@ -214,15 +201,13 @@ export const preferRangeForLoop: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
214
201
|
});
|
|
215
202
|
},
|
|
216
203
|
'Program:exit': () => {
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
const hasRangeImport = namedImports.includes('range');
|
|
220
|
-
|
|
221
|
-
const importCarrier = mut_nodesToFix.find(({ fixable }) => fixable);
|
|
204
|
+
const rangeAt = tsDataForgeValueAt(sourceCode, 'range');
|
|
222
205
|
|
|
223
206
|
for (const entry of mut_nodesToFix) {
|
|
224
207
|
const { node, varName, begin, end, step } = entry;
|
|
225
208
|
|
|
209
|
+
const range = entry.fixable ? rangeAt(node) : undefined;
|
|
210
|
+
|
|
226
211
|
context.report({
|
|
227
212
|
node: node.init ?? node,
|
|
228
213
|
messageId: 'useRangeForLoop',
|
|
@@ -231,33 +216,24 @@ export const preferRangeForLoop: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
231
216
|
begin,
|
|
232
217
|
end,
|
|
233
218
|
},
|
|
234
|
-
fix:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
program,
|
|
253
|
-
TS_DATA_FORGE_MODULE,
|
|
254
|
-
['range'],
|
|
255
|
-
)
|
|
256
|
-
: [];
|
|
257
|
-
|
|
258
|
-
return [...importFixes, fixer.replaceText(node, replacement)];
|
|
259
|
-
}
|
|
260
|
-
: undefined,
|
|
219
|
+
fix:
|
|
220
|
+
range === undefined
|
|
221
|
+
? undefined
|
|
222
|
+
: (fixer) => {
|
|
223
|
+
const bodyText = sourceCode.getText(node.body);
|
|
224
|
+
|
|
225
|
+
const rangeArgs =
|
|
226
|
+
step === undefined
|
|
227
|
+
? `${begin}, ${end}`
|
|
228
|
+
: `${begin}, ${end}, ${step}`;
|
|
229
|
+
|
|
230
|
+
const replacement = `for (const ${varName} of ${range.localName}(${rangeArgs})) ${bodyText}`;
|
|
231
|
+
|
|
232
|
+
return [
|
|
233
|
+
...range.edits(fixer),
|
|
234
|
+
fixer.replaceText(node, replacement),
|
|
235
|
+
];
|
|
236
|
+
},
|
|
261
237
|
});
|
|
262
238
|
}
|
|
263
239
|
},
|
|
@@ -286,6 +262,14 @@ const isNonIntegerNumberLiteral = (
|
|
|
286
262
|
);
|
|
287
263
|
};
|
|
288
264
|
|
|
265
|
+
const isWithin = (
|
|
266
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
267
|
+
node: TSESTree.Node,
|
|
268
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
269
|
+
container: TSESTree.Node,
|
|
270
|
+
): boolean =>
|
|
271
|
+
container.range[0] <= node.range[0] && node.range[1] <= container.range[1];
|
|
272
|
+
|
|
289
273
|
/**
|
|
290
274
|
* Whether the loop variable declared by `declaration` is written anywhere but
|
|
291
275
|
* its initializer and the loop's `update`.
|
|
@@ -307,11 +291,3 @@ const isAssignedOutsideUpdate = (
|
|
|
307
291
|
reference.init !== true &&
|
|
308
292
|
!isWithin(reference.identifier, update),
|
|
309
293
|
);
|
|
310
|
-
|
|
311
|
-
const isWithin = (
|
|
312
|
-
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
313
|
-
node: TSESTree.Node,
|
|
314
|
-
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
315
|
-
container: TSESTree.Node,
|
|
316
|
-
): boolean =>
|
|
317
|
-
container.range[0] <= node.range[0] && node.range[1] <= container.range[1];
|