eslint-plugin-ts-data-forge 0.10.9 → 0.10.10
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/import-binding.d.mts +7 -8
- package/dist/rules/import-binding.d.mts.map +1 -1
- package/dist/rules/import-binding.mjs +3 -13
- package/dist/rules/import-binding.mjs.map +1 -1
- package/dist/rules/no-unnecessary-type-guard.d.mts.map +1 -1
- package/dist/rules/no-unnecessary-type-guard.mjs +2 -0
- 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 +5 -5
- package/dist/rules/prefer-arr-generate.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 -78
- package/dist/rules/prefer-canonical-array-slicing.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 +13 -8
- package/dist/rules/prefer-obj-over-entries-round-trip.mjs.map +1 -1
- package/package.json +6 -6
- package/src/rules/import-binding.mts +10 -31
- package/src/rules/no-unnecessary-type-guard.mts +5 -3
- package/src/rules/prefer-arr-generate.mts +11 -7
- package/src/rules/prefer-arr-generate.test.mts +20 -0
- package/src/rules/prefer-canonical-array-slicing.mts +83 -118
- package/src/rules/prefer-canonical-array-slicing.test.mts +115 -1
- package/src/rules/prefer-obj-over-entries-round-trip.mts +17 -9
- package/src/rules/prefer-obj-over-entries-round-trip.test.mts +62 -0
|
@@ -30,7 +30,7 @@ export const preferObjOverEntriesRoundTrip = {
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
const
|
|
33
|
+
const rebuiltParamNames = (roundTrip) => {
|
|
34
34
|
const scope = sourceCode.getScope(roundTrip.callback);
|
|
35
35
|
const dropped = new Set(roundTrip.dropped);
|
|
36
36
|
const keyName = roundTrip.keyParam !== undefined &&
|
|
@@ -41,12 +41,12 @@ export const preferObjOverEntriesRoundTrip = {
|
|
|
41
41
|
if (keyName !== undefined) {
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
return
|
|
44
|
+
return [valueName ?? unusedValueParamName(scope), keyName];
|
|
45
45
|
}
|
|
46
46
|
return valueName !== undefined &&
|
|
47
47
|
isReferencedOutside(scope, valueName, dropped)
|
|
48
|
-
?
|
|
49
|
-
:
|
|
48
|
+
? [valueName]
|
|
49
|
+
: [];
|
|
50
50
|
};
|
|
51
51
|
const buildCallbackBody = (roundTrip, optionalName) => {
|
|
52
52
|
const { body } = roundTrip;
|
|
@@ -69,24 +69,29 @@ export const preferObjOverEntriesRoundTrip = {
|
|
|
69
69
|
mut_roundTrips.push({ node, roundTrip });
|
|
70
70
|
},
|
|
71
71
|
'Program:exit': () => {
|
|
72
|
-
const objAt = tsDataForgeValuesAt(sourceCode, ['Obj'])
|
|
72
|
+
const objAt = tsDataForgeValuesAt(sourceCode, ['Obj']);
|
|
73
73
|
const objOptionalAt = tsDataForgeValuesAt(sourceCode, [
|
|
74
74
|
'Obj',
|
|
75
75
|
'Optional',
|
|
76
|
-
])
|
|
76
|
+
]);
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
for (const { node, roundTrip } of mut_roundTrips) {
|
|
80
80
|
const binding = (roundTrip.body.kind === 'optional' ? objOptionalAt : objAt)(node);
|
|
81
81
|
const [objName, optionalName = 'Optional'] = binding?.localNames ?? [];
|
|
82
|
+
const paramNames = rebuiltParamNames(roundTrip);
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
const isCaptured = roundTrip.body.kind === 'optional' &&
|
|
86
|
+
paramNames.includes(optionalName.split('.', 1)[0] ?? optionalName);
|
|
82
87
|
context.report({
|
|
83
88
|
node,
|
|
84
89
|
messageId: MESSAGE_ID_OF[roundTrip.method],
|
|
85
|
-
fix: binding === undefined || objName === undefined
|
|
90
|
+
fix: binding === undefined || objName === undefined || isCaptured
|
|
86
91
|
? null
|
|
87
92
|
: (fixer) => {
|
|
88
93
|
const recordText = getArgumentText(sourceCode, roundTrip.record);
|
|
89
|
-
const replacement = `${objName}.${roundTrip.method}(${recordText}, ${
|
|
94
|
+
const replacement = `${objName}.${roundTrip.method}(${recordText}, (${paramNames.join(', ')}) => ${buildCallbackBody(roundTrip, optionalName)})`;
|
|
90
95
|
return [
|
|
91
96
|
...binding.edits(fixer),
|
|
92
97
|
fixer.replaceText(node, replacement),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-obj-over-entries-round-trip.mjs","sourceRoot":"","sources":["../../src/rules/prefer-obj-over-entries-round-trip.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prefer-obj-over-entries-round-trip.mjs","sourceRoot":"","sources":["../../src/rules/prefer-obj-over-entries-round-trip.mts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-ts-data-forge",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "ESLint rules that steer code toward ts-data-forge idioms.",
|
|
6
6
|
"keywords": [
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@typescript-eslint/utils": "^8.72.0",
|
|
38
|
-
"eslint-rule-forge": "^0.
|
|
38
|
+
"eslint-rule-forge": "^0.6.0",
|
|
39
39
|
"ts-data-forge": "14.11.0",
|
|
40
40
|
"ts-type-forge": "~9.2.2"
|
|
41
41
|
},
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"@typescript-eslint/parser": "8.72.0",
|
|
44
44
|
"@typescript-eslint/rule-tester": "8.72.0",
|
|
45
45
|
"dedent": "1.7.2",
|
|
46
|
-
"eslint-config-typed": "7.
|
|
47
|
-
"eslint-plugin-ts-fortress": "1.3.
|
|
48
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
46
|
+
"eslint-config-typed": "7.5.0",
|
|
47
|
+
"eslint-plugin-ts-fortress": "1.3.14",
|
|
48
|
+
"eslint-plugin-ts-type-forge": "0.8.19",
|
|
49
49
|
"prettier": "3.9.10",
|
|
50
50
|
"prettier-plugin-organize-imports": "4.3.0",
|
|
51
51
|
"prettier-plugin-packagejson": "3.0.2",
|
|
52
|
-
"ts-repo-utils": "10.7.
|
|
52
|
+
"ts-repo-utils": "10.7.3"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"eslint": ">=9.0.0",
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import type { TSESLint, TSESTree } from '@typescript-eslint/utils';
|
|
2
|
-
import {
|
|
3
|
-
bindValueImports,
|
|
4
|
-
hasForeignBinding,
|
|
5
|
-
type ValueImportBinding,
|
|
6
|
-
} from 'eslint-rule-forge';
|
|
2
|
+
import { bindValueImportsAt, type ValueImportBinding } from 'eslint-rule-forge';
|
|
7
3
|
import { memoizeFunction } from 'ts-data-forge';
|
|
8
4
|
import { TS_DATA_FORGE_MODULE } from './constants.mjs';
|
|
9
5
|
|
|
10
6
|
/**
|
|
11
7
|
* Binds ts-data-forge's `exportName` as a value once per file (see
|
|
12
|
-
* `
|
|
8
|
+
* `bindValueImportsAt`), and gives, for the code at a node, the name a fix writes
|
|
13
9
|
* and the edits that bring it into scope, or `undefined` when no fix can: an
|
|
14
10
|
* import already binds the name to something else, or something other than the
|
|
15
11
|
* import takes it where the code is.
|
|
@@ -24,7 +20,7 @@ export const tsDataForgeValueAt = (
|
|
|
24
20
|
exportName: string,
|
|
25
21
|
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
26
22
|
): ((node: TSESTree.Node) => TsDataForgeValue | undefined) => {
|
|
27
|
-
const
|
|
23
|
+
const at = tsDataForgeValuesAt(sourceCode, [exportName]);
|
|
28
24
|
|
|
29
25
|
return (node) => {
|
|
30
26
|
const binding = at(node);
|
|
@@ -54,39 +50,22 @@ export const tsDataForgeValueAtByName = (
|
|
|
54
50
|
/**
|
|
55
51
|
* {@link tsDataForgeValueAt} for several names one fix writes together: their
|
|
56
52
|
* edits are made as one, so that two names the file does not import go into a
|
|
57
|
-
* single new declaration.
|
|
58
|
-
* node is: the export names themselves when they cannot be bound.
|
|
53
|
+
* single new declaration.
|
|
59
54
|
*/
|
|
60
55
|
export const tsDataForgeValuesAt = (
|
|
61
56
|
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
62
57
|
sourceCode: TSESLint.SourceCode,
|
|
63
58
|
exportNames: readonly string[],
|
|
64
|
-
): Readonly<{
|
|
65
|
-
localNames: readonly string[];
|
|
66
59
|
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const binding = bindValueImports(
|
|
70
|
-
sourceCode,
|
|
71
|
-
TS_DATA_FORGE_MODULE,
|
|
72
|
-
exportNames,
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
localNames: binding?.localNames ?? exportNames,
|
|
77
|
-
at: (node) =>
|
|
78
|
-
binding === undefined ||
|
|
79
|
-
binding.localNames.some((localName) =>
|
|
80
|
-
hasForeignBinding(sourceCode, node, localName, TS_DATA_FORGE_MODULE),
|
|
81
|
-
)
|
|
82
|
-
? undefined
|
|
83
|
-
: binding,
|
|
84
|
-
};
|
|
85
|
-
};
|
|
60
|
+
): ((node: TSESTree.Node) => ValueImportBinding | undefined) =>
|
|
61
|
+
bindValueImportsAt(sourceCode, TS_DATA_FORGE_MODULE, exportNames);
|
|
86
62
|
|
|
87
63
|
/** What {@link tsDataForgeValueAt} gives for one node. */
|
|
88
64
|
export type TsDataForgeValue = Readonly<{
|
|
89
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* What to write: a local name, or `ns.x` through a namespace import, which
|
|
67
|
+
* needs no edit.
|
|
68
|
+
*/
|
|
90
69
|
localName: string;
|
|
91
70
|
|
|
92
71
|
/** The edits that bind it. */
|
|
@@ -192,8 +192,9 @@ export const noUnnecessaryTypeGuard: TSESLint.RuleModule<MessageIds, Options> =
|
|
|
192
192
|
return (fixer) => [fixer.replaceText(propertyNode, replacement)];
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
// The replacement guard's local name,
|
|
196
|
-
//
|
|
195
|
+
// The replacement guard's local name, or the guard through a namespace
|
|
196
|
+
// import, added to the imports when the file has neither; no fix when
|
|
197
|
+
// it cannot be bound there.
|
|
197
198
|
const guard = guardAt(replacement)(propertyNode);
|
|
198
199
|
|
|
199
200
|
return guard === undefined
|
|
@@ -242,7 +243,8 @@ export const noUnnecessaryTypeGuard: TSESLint.RuleModule<MessageIds, Options> =
|
|
|
242
243
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
243
244
|
node: node as TSESTree.Node,
|
|
244
245
|
messageId: 'replaceTypeGuard',
|
|
245
|
-
// The name the fix writes: an aliased import's local name
|
|
246
|
+
// The name the fix writes: an aliased import's local name, or the
|
|
247
|
+
// guard through a namespace import.
|
|
246
248
|
data: {
|
|
247
249
|
from,
|
|
248
250
|
to: isNamespace ? to : (guardAt(to)(propertyNode)?.localName ?? to),
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
prefixedNegationOf,
|
|
13
13
|
skipTypeWrappers,
|
|
14
14
|
type NegationContext,
|
|
15
|
+
type ValueImportBinding,
|
|
15
16
|
} from 'eslint-rule-forge';
|
|
16
17
|
import { Arr, hasKey, isRecord } from 'ts-data-forge';
|
|
17
18
|
import type { FixedLengthTuple } from 'ts-type-forge';
|
|
@@ -28,6 +29,9 @@ type Match = Readonly<{
|
|
|
28
29
|
node: TSESTree.CallExpression;
|
|
29
30
|
replacement: string;
|
|
30
31
|
autofixable: boolean;
|
|
32
|
+
|
|
33
|
+
/** What binds the `Arr` that `replacement` writes, if anything can. */
|
|
34
|
+
binding: ValueImportBinding | undefined;
|
|
31
35
|
}>;
|
|
32
36
|
|
|
33
37
|
/**
|
|
@@ -136,10 +140,8 @@ export const preferArrGenerate: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
136
140
|
node: TSESTree.Node,
|
|
137
141
|
): ts.Node | undefined => esTreeNodeToTSNodeMap.get(node);
|
|
138
142
|
|
|
139
|
-
//
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
const arrName = arr.localNames[0] ?? 'Arr';
|
|
143
|
+
// At a node, the name the rewrite writes and the edits that bind it.
|
|
144
|
+
const arrAt = tsDataForgeValuesAt(sourceCode, ['Arr']);
|
|
143
145
|
|
|
144
146
|
const mut_matches: Match[] = [];
|
|
145
147
|
|
|
@@ -243,11 +245,13 @@ export const preferArrGenerate: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
243
245
|
return;
|
|
244
246
|
}
|
|
245
247
|
|
|
248
|
+
const binding = arrAt(node);
|
|
249
|
+
|
|
246
250
|
const replacement = buildReplacement({
|
|
247
251
|
sourceCode,
|
|
248
252
|
negationContext,
|
|
249
253
|
node,
|
|
250
|
-
arrName,
|
|
254
|
+
arrName: binding?.localNames[0] ?? 'Arr',
|
|
251
255
|
typeArgumentsText:
|
|
252
256
|
typeArguments === undefined
|
|
253
257
|
? ''
|
|
@@ -294,13 +298,13 @@ export const preferArrGenerate: TSESLint.RuleModule<MessageIds, Options> = {
|
|
|
294
298
|
) &&
|
|
295
299
|
!needsMutableResult(sourceCode, checker, getTsNode, node);
|
|
296
300
|
|
|
297
|
-
mut_matches.push({ node, replacement, autofixable });
|
|
301
|
+
mut_matches.push({ node, replacement, autofixable, binding });
|
|
298
302
|
},
|
|
299
303
|
'Program:exit': () => {
|
|
300
304
|
// Every fix brings `Arr` into scope itself, so that one applied alone
|
|
301
305
|
// (an editor's quick fix) is complete.
|
|
302
306
|
for (const match of mut_matches) {
|
|
303
|
-
const binding =
|
|
307
|
+
const { binding } = match;
|
|
304
308
|
|
|
305
309
|
const fix: TSESLint.ReportFixFunction | null =
|
|
306
310
|
binding === undefined
|
|
@@ -311,6 +311,26 @@ describe('prefer-arr-generate', () => {
|
|
|
311
311
|
{ messageId: 'useArrGenerate' },
|
|
312
312
|
],
|
|
313
313
|
},
|
|
314
|
+
{
|
|
315
|
+
name: 'writes Arr through a namespace import',
|
|
316
|
+
code: dedent`
|
|
317
|
+
import * as tdf from 'ts-data-forge';
|
|
318
|
+
declare const xs: readonly number[];
|
|
319
|
+
const ys = xs.flatMap((x) => (x > 0 ? [x * 2] : []));
|
|
320
|
+
`,
|
|
321
|
+
output: dedent`
|
|
322
|
+
import * as tdf from 'ts-data-forge';
|
|
323
|
+
declare const xs: readonly number[];
|
|
324
|
+
const ys = tdf.Arr.generate(function* () {
|
|
325
|
+
for (const x of xs) {
|
|
326
|
+
if (x > 0) {
|
|
327
|
+
yield x * 2;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
`,
|
|
332
|
+
errors: [{ messageId: 'useArrGenerate' }],
|
|
333
|
+
},
|
|
314
334
|
{
|
|
315
335
|
name: 'moves the statements of a block body into the loop',
|
|
316
336
|
code: dedent`
|
|
@@ -5,18 +5,16 @@ import {
|
|
|
5
5
|
type TSESTree,
|
|
6
6
|
} from '@typescript-eslint/utils';
|
|
7
7
|
import {
|
|
8
|
-
bindValueImports,
|
|
9
8
|
getImportDeclarations,
|
|
10
9
|
getImportedLocalName,
|
|
11
10
|
hasForeignBinding,
|
|
12
|
-
importedNameOf,
|
|
13
11
|
skipTypeWrappers,
|
|
14
12
|
typeWrapperLayers,
|
|
15
|
-
type ValueImportBinding,
|
|
16
13
|
} from 'eslint-rule-forge';
|
|
17
14
|
import type { ReadonlyRecord } from 'ts-type-forge';
|
|
18
15
|
import * as ts from 'typescript';
|
|
19
16
|
import { TS_DATA_FORGE_MODULE } from './constants.mjs';
|
|
17
|
+
import { tsDataForgeValueAt } from './import-binding.mjs';
|
|
20
18
|
|
|
21
19
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
22
20
|
|
|
@@ -203,25 +201,16 @@ export const preferCanonicalArraySlicing: TSESLint.RuleModule<
|
|
|
203
201
|
|
|
204
202
|
const program = sourceCode.ast;
|
|
205
203
|
|
|
204
|
+
// `import type` binds no value a call could go through.
|
|
206
205
|
const tsDataForgeImports = getImportDeclarations(
|
|
207
206
|
program,
|
|
208
207
|
TS_DATA_FORGE_MODULE,
|
|
209
|
-
);
|
|
208
|
+
).filter((declaration) => declaration.importKind !== 'type');
|
|
210
209
|
|
|
211
210
|
const parserServices = ESLintUtils.getParserServices(context);
|
|
212
211
|
|
|
213
212
|
const checker = parserServices.program.getTypeChecker();
|
|
214
213
|
|
|
215
|
-
/**
|
|
216
|
-
* The in-scope way to reference the `Arr` namespace, the name the reference
|
|
217
|
-
* starts with, and the edits that bring it into scope: a value
|
|
218
|
-
* import of `Arr` (possibly aliased), a namespace import member, or `Arr`
|
|
219
|
-
* bound by {@link bindValueImports}, which adds it to an existing import or
|
|
220
|
-
* drops `type` from one. `undefined` when none can: `import type { Arr }`
|
|
221
|
-
* with no namespace import.
|
|
222
|
-
*/
|
|
223
|
-
const arrTarget = resolveArrTarget(sourceCode, tsDataForgeImports);
|
|
224
|
-
|
|
225
214
|
/** How a call already in the file names `Arr`, to recognize it. */
|
|
226
215
|
const arrLocalName = getImportedLocalName(tsDataForgeImports, 'Arr');
|
|
227
216
|
|
|
@@ -232,7 +221,23 @@ export const preferCanonicalArraySlicing: TSESLint.RuleModule<
|
|
|
232
221
|
specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier,
|
|
233
222
|
)?.local.name;
|
|
234
223
|
|
|
235
|
-
|
|
224
|
+
/**
|
|
225
|
+
* Whether `identifier` is `localName`, bound by the import from
|
|
226
|
+
* ts-data-forge where it is rather than by a local binding.
|
|
227
|
+
*/
|
|
228
|
+
const isImportedAs = (
|
|
229
|
+
identifier: TSESTree.Node,
|
|
230
|
+
localName: string | undefined,
|
|
231
|
+
): boolean =>
|
|
232
|
+
localName !== undefined &&
|
|
233
|
+
identifier.type === AST_NODE_TYPES.Identifier &&
|
|
234
|
+
identifier.name === localName &&
|
|
235
|
+
!hasForeignBinding(
|
|
236
|
+
sourceCode,
|
|
237
|
+
identifier,
|
|
238
|
+
localName,
|
|
239
|
+
TS_DATA_FORGE_MODULE,
|
|
240
|
+
);
|
|
236
241
|
|
|
237
242
|
/**
|
|
238
243
|
* Deferred (non-concrete) types are reduced to their base constraint before
|
|
@@ -317,39 +322,14 @@ export const preferCanonicalArraySlicing: TSESLint.RuleModule<
|
|
|
317
322
|
: text;
|
|
318
323
|
};
|
|
319
324
|
|
|
320
|
-
const toReplacementText = (op: CopyOp, xsText: string): string => {
|
|
321
|
-
switch (op.fn) {
|
|
322
|
-
case 'tail':
|
|
323
|
-
case 'butLast':
|
|
324
|
-
return `${arrRef}.${op.fn}(${xsText})`;
|
|
325
|
-
|
|
326
|
-
case 'skip':
|
|
327
|
-
case 'take':
|
|
328
|
-
case 'skipLast':
|
|
329
|
-
case 'takeLast':
|
|
330
|
-
return `${arrRef}.${op.fn}(${xsText}, ${op.count})`;
|
|
331
|
-
|
|
332
|
-
// Emit the curried form for `toUnshifted` so the new element stays in
|
|
333
|
-
// the same textual position as in the `[item, ...xs]` source, keeping
|
|
334
|
-
// the rewrite easy to read.
|
|
335
|
-
case 'toUnshifted':
|
|
336
|
-
return `${arrRef}.toUnshifted(${op.itemText})(${xsText})`;
|
|
337
|
-
|
|
338
|
-
case 'toPushed':
|
|
339
|
-
return `${arrRef}.toPushed(${xsText}, ${op.itemText})`;
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
|
|
343
325
|
const mut_nodesToFix: {
|
|
344
326
|
node: TSESTree.Node;
|
|
345
|
-
|
|
327
|
+
op: CopyOp;
|
|
328
|
+
xsText: string;
|
|
346
329
|
}[] = [];
|
|
347
330
|
|
|
348
331
|
const report = (node: TSESTree.Node, op: CopyOp, xsText: string): void => {
|
|
349
|
-
mut_nodesToFix.push({
|
|
350
|
-
node,
|
|
351
|
-
replacement: toReplacementText(op, xsText),
|
|
352
|
-
});
|
|
332
|
+
mut_nodesToFix.push({ node, op, xsText });
|
|
353
333
|
};
|
|
354
334
|
|
|
355
335
|
/**
|
|
@@ -654,17 +634,22 @@ export const preferCanonicalArraySlicing: TSESLint.RuleModule<
|
|
|
654
634
|
const receiver = callee.object;
|
|
655
635
|
|
|
656
636
|
// `Arr.skip(xs, 1)` → `Arr.tail(xs)`, `Arr.skipLast(xs, 1)` →
|
|
657
|
-
// `Arr.butLast(xs)` (also via a namespace import or an alias
|
|
637
|
+
// `Arr.butLast(xs)` (also via a namespace import or an alias, and
|
|
638
|
+
// through type wrappers), unless a local binding shadows the import
|
|
639
|
+
// where the call is.
|
|
658
640
|
if (methodName === 'skip' || methodName === 'skipLast') {
|
|
641
|
+
const arrObject = skipTypeWrappers(receiver);
|
|
642
|
+
|
|
659
643
|
const isArrObject =
|
|
660
|
-
(
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
644
|
+
isImportedAs(arrObject, arrLocalName) ||
|
|
645
|
+
(arrObject.type === AST_NODE_TYPES.MemberExpression &&
|
|
646
|
+
!arrObject.computed &&
|
|
647
|
+
isImportedAs(
|
|
648
|
+
skipTypeWrappers(arrObject.object),
|
|
649
|
+
namespaceLocalName,
|
|
650
|
+
) &&
|
|
651
|
+
arrObject.property.type === AST_NODE_TYPES.Identifier &&
|
|
652
|
+
arrObject.property.name === 'Arr');
|
|
668
653
|
|
|
669
654
|
const [arrayArg, countArg] = node.arguments;
|
|
670
655
|
|
|
@@ -858,28 +843,34 @@ export const preferCanonicalArraySlicing: TSESLint.RuleModule<
|
|
|
858
843
|
},
|
|
859
844
|
|
|
860
845
|
'Program:exit': () => {
|
|
846
|
+
if (mut_nodesToFix.length === 0) {
|
|
847
|
+
return;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
const arrAt = tsDataForgeValueAt(sourceCode, 'Arr');
|
|
851
|
+
|
|
861
852
|
// Every fix brings `Arr` into scope itself, so that one applied alone
|
|
862
853
|
// (an editor's quick fix) is complete.
|
|
863
854
|
for (const nodeInfo of mut_nodesToFix) {
|
|
864
|
-
const
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
);
|
|
855
|
+
const arr = arrAt(nodeInfo.node);
|
|
856
|
+
|
|
857
|
+
const replacement = toReplacementText(
|
|
858
|
+
arr?.localName ?? 'Arr',
|
|
859
|
+
nodeInfo.op,
|
|
860
|
+
nodeInfo.xsText,
|
|
861
|
+
);
|
|
872
862
|
|
|
873
863
|
context.report({
|
|
874
864
|
node: nodeInfo.node,
|
|
875
865
|
messageId: 'preferCanonicalArraySlicing',
|
|
876
|
-
data: { replacement
|
|
877
|
-
fix:
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
866
|
+
data: { replacement },
|
|
867
|
+
fix:
|
|
868
|
+
arr === undefined
|
|
869
|
+
? null
|
|
870
|
+
: (fixer) => [
|
|
871
|
+
...arr.edits(fixer),
|
|
872
|
+
fixer.replaceText(nodeInfo.node, replacement),
|
|
873
|
+
],
|
|
883
874
|
});
|
|
884
875
|
}
|
|
885
876
|
},
|
|
@@ -887,56 +878,30 @@ export const preferCanonicalArraySlicing: TSESLint.RuleModule<
|
|
|
887
878
|
},
|
|
888
879
|
} as const;
|
|
889
880
|
|
|
890
|
-
/**
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
if (arrImport !== undefined) {
|
|
916
|
-
return {
|
|
917
|
-
ref: arrImport.local.name,
|
|
918
|
-
boundName: arrImport.local.name,
|
|
919
|
-
edits: () => [],
|
|
920
|
-
};
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
const namespace = valueSpecifiers.find(
|
|
924
|
-
(specifier) => specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier,
|
|
925
|
-
);
|
|
926
|
-
|
|
927
|
-
if (namespace !== undefined) {
|
|
928
|
-
return {
|
|
929
|
-
ref: `${namespace.local.name}.Arr`,
|
|
930
|
-
boundName: namespace.local.name,
|
|
931
|
-
edits: () => [],
|
|
932
|
-
};
|
|
881
|
+
/** The call `op` is rewritten to, writing `Arr` as `arrRef`. */
|
|
882
|
+
const toReplacementText = (
|
|
883
|
+
arrRef: string,
|
|
884
|
+
op: CopyOp,
|
|
885
|
+
xsText: string,
|
|
886
|
+
): string => {
|
|
887
|
+
switch (op.fn) {
|
|
888
|
+
case 'tail':
|
|
889
|
+
case 'butLast':
|
|
890
|
+
return `${arrRef}.${op.fn}(${xsText})`;
|
|
891
|
+
|
|
892
|
+
case 'skip':
|
|
893
|
+
case 'take':
|
|
894
|
+
case 'skipLast':
|
|
895
|
+
case 'takeLast':
|
|
896
|
+
return `${arrRef}.${op.fn}(${xsText}, ${op.count})`;
|
|
897
|
+
|
|
898
|
+
// Emit the curried form for `toUnshifted` so the new element stays in the
|
|
899
|
+
// same textual position as in the `[item, ...xs]` source, keeping the
|
|
900
|
+
// rewrite easy to read.
|
|
901
|
+
case 'toUnshifted':
|
|
902
|
+
return `${arrRef}.toUnshifted(${op.itemText})(${xsText})`;
|
|
903
|
+
|
|
904
|
+
case 'toPushed':
|
|
905
|
+
return `${arrRef}.toPushed(${xsText}, ${op.itemText})`;
|
|
933
906
|
}
|
|
934
|
-
|
|
935
|
-
const binding = bindValueImports(sourceCode, TS_DATA_FORGE_MODULE, ['Arr']);
|
|
936
|
-
|
|
937
|
-
const localName = binding?.localNames[0];
|
|
938
|
-
|
|
939
|
-
return binding === undefined || localName === undefined
|
|
940
|
-
? undefined
|
|
941
|
-
: { ref: localName, boundName: localName, edits: binding.edits };
|
|
942
907
|
};
|