eslint-plugin-ts-data-forge 0.7.4 → 0.8.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.
- package/README.md +1 -0
- package/dist/plugin.d.mts +2 -0
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +1 -0
- package/dist/plugin.mjs.map +1 -1
- package/dist/rule-types.d.mts +15 -0
- package/dist/rule-types.d.mts.map +1 -1
- package/dist/rule-types.mjs.map +1 -1
- package/dist/rules/prefer-arr-uniq.d.mts +15 -0
- package/dist/rules/prefer-arr-uniq.d.mts.map +1 -0
- package/dist/rules/prefer-arr-uniq.mjs +350 -0
- package/dist/rules/prefer-arr-uniq.mjs.map +1 -0
- package/dist/rules/rules.d.mts +1 -0
- package/dist/rules/rules.d.mts.map +1 -1
- package/dist/rules/rules.mjs +2 -0
- package/dist/rules/rules.mjs.map +1 -1
- package/package.json +11 -10
- package/src/plugin.mts +1 -0
- package/src/rule-types.mts +16 -0
- package/src/rules/prefer-arr-uniq.mts +475 -0
- package/src/rules/prefer-arr-uniq.test.mts +455 -0
- package/src/rules/rules.mts +2 -0
package/README.md
CHANGED
|
@@ -74,6 +74,7 @@ export default [
|
|
|
74
74
|
| `prefer-arr-is-array` | Replace `Array.isArray` with `Arr.isArray`. |
|
|
75
75
|
| `prefer-arr-scan` | Report an accumulated value rebuilt for every element (`xs.map((_, i) => f(...xs.slice(0, i + 1)))`, or a `reduce` that appends to its accumulator) and point at `Arr.scan`. Fixes the `reduce` form. |
|
|
76
76
|
| `prefer-arr-sum` | Replace `xs.reduce((a, b) => a + b, 0)` with `Arr.sum(xs)` / `Arr.sumBy(xs, fn)`. |
|
|
77
|
+
| `prefer-arr-uniq` | Replace `Array.from(new Set(xs))` / `[...new Set(xs)]` with `Arr.uniq(xs)` when `xs` is an array of primitives (type-aware). Suggests instead of fixing when the result is used as a mutable array. |
|
|
77
78
|
| `prefer-as-int` | Replace branded-number assertions (`x as Int`) with `asInt(x)`-style casts. |
|
|
78
79
|
| `prefer-is-non-null-object` | Replace `typeof u === 'object' && u !== null` with `isNonNullObject(u)`. |
|
|
79
80
|
| `prefer-range-for-loop` | Replace C-style `for` loops with `for (const i of range(begin, end))`. |
|
package/dist/plugin.d.mts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const eslintPluginTsDataForge: {
|
|
|
10
10
|
readonly 'prefer-arr-is-array': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useArrIsArray", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
11
|
readonly 'prefer-arr-scan': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferArrScanAccumulate" | "preferArrScanPrefix", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
12
12
|
readonly 'prefer-arr-sum': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useArrSum" | "useArrSumBy", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
13
|
+
readonly 'prefer-arr-uniq': import("@typescript-eslint/utils/ts-eslint").RuleModule<"suggestArrUniq" | "useArrUniq", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
13
14
|
readonly 'prefer-as-int': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useBrandedNumberCastFunction", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
14
15
|
readonly 'prefer-is-non-null-object': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useIsNonNullObject", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
15
16
|
readonly 'prefer-range-for-loop': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useRangeForLoop", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
@@ -37,6 +38,7 @@ export declare const eslintPluginTsDataForge: {
|
|
|
37
38
|
readonly 'ts-data-forge/prefer-arr-is-array': 'error';
|
|
38
39
|
readonly 'ts-data-forge/prefer-arr-scan': 'error';
|
|
39
40
|
readonly 'ts-data-forge/prefer-arr-sum': 'error';
|
|
41
|
+
readonly 'ts-data-forge/prefer-arr-uniq': 'error';
|
|
40
42
|
readonly 'ts-data-forge/prefer-as-int': 'error';
|
|
41
43
|
readonly 'ts-data-forge/prefer-is-non-null-object': 'error';
|
|
42
44
|
readonly 'ts-data-forge/prefer-range-for-loop': 'error';
|
package/dist/plugin.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.mts","sourceRoot":"","sources":["../src/plugin.mts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.mts","sourceRoot":"","sources":["../src/plugin.mts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AA+CvE,eAAO,MAAM,uBAAuB;;iBAEhC,IAAI,EAAE,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;QAInC,oDAAoD;iBACpD,WAAW;2BAtBP,2BAA2B;;yBAQ3B,eAAe,EAAI,YAAY;;;yEA/BW,OAAO;uEACT,OAAO;wEACN,OAAO;8DACjB,OAAO;0DACX,OAAO;yDACR,OAAO;0DACN,OAAO;wDACT,OAAO;oEACK,OAAO;gEACX,OAAO;uEACA,OAAO;oEACV,OAAO;sEACL,OAAO;gEACb,OAAO;oEACH,OAAO;+EACI,OAAO;6EACT,OAAO;;;;CA+B5B,CAAC"}
|
package/dist/plugin.mjs
CHANGED
|
@@ -12,6 +12,7 @@ const recommendedRules = {
|
|
|
12
12
|
'ts-data-forge/prefer-arr-is-array': 'error',
|
|
13
13
|
'ts-data-forge/prefer-arr-scan': 'error',
|
|
14
14
|
'ts-data-forge/prefer-arr-sum': 'error',
|
|
15
|
+
'ts-data-forge/prefer-arr-uniq': 'error',
|
|
15
16
|
'ts-data-forge/prefer-as-int': 'error',
|
|
16
17
|
'ts-data-forge/prefer-is-non-null-object': 'error',
|
|
17
18
|
'ts-data-forge/prefer-range-for-loop': 'error',
|
package/dist/plugin.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.mjs","sourceRoot":"","sources":["../src/plugin.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;IACvB,8CAA8C,EAAE,OAAO;IACvD,4CAA4C,EAAE,OAAO;IACrD,6CAA6C,EAAE,OAAO;IACtD,mCAAmC,EAAE,OAAO;IAC5C,+BAA+B,EAAE,OAAO;IACxC,8BAA8B,EAAE,OAAO;IACvC,6BAA6B,EAAE,OAAO;IACtC,yCAAyC,EAAE,OAAO;IAClD,qCAAqC,EAAE,OAAO;IAC9C,4CAA4C,EAAE,OAAO;IACrD,yCAAyC,EAAE,OAAO;IAClD,2CAA2C,EAAE,OAAO;IACpD,qCAAqC,EAAE,OAAO;IAC9C,yCAAyC,EAAE,OAAO;IAClD,oDAAoD,EAAE,OAAO;IAC7D,kDAAkD,EAAE,OAAO;CAI5D,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE;QACP,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,mDAAmD;QACnD,0EAA0E;QAC1E,wDAAwD;QACxD,IAAI,eAAe;YACjB,OAAO,uBAAuB,CAAC;QACjC,CAAC;KACF;IACD,KAAK,EAAE,gBAAgB;CACY,CAAC;AAEtC,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,6BAA6B;KACpC;IACD,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE;QACP,oDAAoD;QACpD,WAAW,EAAE,iBAAiB;KAC/B;CAC8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"plugin.mjs","sourceRoot":"","sources":["../src/plugin.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;IACvB,8CAA8C,EAAE,OAAO;IACvD,4CAA4C,EAAE,OAAO;IACrD,6CAA6C,EAAE,OAAO;IACtD,mCAAmC,EAAE,OAAO;IAC5C,+BAA+B,EAAE,OAAO;IACxC,8BAA8B,EAAE,OAAO;IACvC,+BAA+B,EAAE,OAAO;IACxC,6BAA6B,EAAE,OAAO;IACtC,yCAAyC,EAAE,OAAO;IAClD,qCAAqC,EAAE,OAAO;IAC9C,4CAA4C,EAAE,OAAO;IACrD,yCAAyC,EAAE,OAAO;IAClD,2CAA2C,EAAE,OAAO;IACpD,qCAAqC,EAAE,OAAO;IAC9C,yCAAyC,EAAE,OAAO;IAClD,oDAAoD,EAAE,OAAO;IAC7D,kDAAkD,EAAE,OAAO;CAI5D,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE;QACP,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,mDAAmD;QACnD,0EAA0E;QAC1E,wDAAwD;QACxD,IAAI,eAAe;YACjB,OAAO,uBAAuB,CAAC;QACjC,CAAC;KACF;IACD,KAAK,EAAE,gBAAgB;CACY,CAAC;AAEtC,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,6BAA6B;KACpC;IACD,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE;QACP,oDAAoD;QACpD,WAAW,EAAE,iBAAiB;KAC/B;CAC8B,CAAC"}
|
package/dist/rule-types.d.mts
CHANGED
|
@@ -92,6 +92,20 @@ declare namespace PreferArrScan {
|
|
|
92
92
|
declare namespace PreferArrSum {
|
|
93
93
|
type RuleEntry = Linter.StringSeverity;
|
|
94
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* @description Replace `Array.from(new Set(xs))` / `[...new Set(xs)]` with `Arr.uniq(xs)` from ts-data-forge.
|
|
97
|
+
*
|
|
98
|
+
* ```md
|
|
99
|
+
* | key | value |
|
|
100
|
+
* | :--------- | :--------- |
|
|
101
|
+
* | type | suggestion |
|
|
102
|
+
* | deprecated | false |
|
|
103
|
+
* | fixable | code |
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
declare namespace PreferArrUniq {
|
|
107
|
+
type RuleEntry = Linter.StringSeverity;
|
|
108
|
+
}
|
|
95
109
|
/**
|
|
96
110
|
* @description Replace branded number type assertions (e.g., `as Int`) with corresponding functions (e.g., `asInt()`) from ts-data-forge.
|
|
97
111
|
*
|
|
@@ -261,6 +275,7 @@ export type EslintTsDataForgeRules = Readonly<{
|
|
|
261
275
|
'ts-data-forge/prefer-arr-is-array': PreferArrIsArray.RuleEntry;
|
|
262
276
|
'ts-data-forge/prefer-arr-scan': PreferArrScan.RuleEntry;
|
|
263
277
|
'ts-data-forge/prefer-arr-sum': PreferArrSum.RuleEntry;
|
|
278
|
+
'ts-data-forge/prefer-arr-uniq': PreferArrUniq.RuleEntry;
|
|
264
279
|
'ts-data-forge/prefer-as-int': PreferAsInt.RuleEntry;
|
|
265
280
|
'ts-data-forge/prefer-is-non-null-object': PreferIsNonNullObject.RuleEntry;
|
|
266
281
|
'ts-data-forge/prefer-range-for-loop': PreferRangeForLoop.RuleEntry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-types.d.mts","sourceRoot":"","sources":["../src/rule-types.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rule-types.d.mts","sourceRoot":"","sources":["../src/rule-types.mts"],"names":[],"mappings":"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"}
|
package/dist/rule-types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-types.mjs","sourceRoot":"","sources":["../src/rule-types.mts"],"names":[],"mappings":"AAAA,oBAAoB;AAOpB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-types.mjs","sourceRoot":"","sources":["../src/rule-types.mts"],"names":[],"mappings":"AAAA,oBAAoB;AAOpB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAyU3C,8EAA8E;AAC9E,8DAA8D;AAC9D,UAAU,CAGR,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TSESLint } from '@typescript-eslint/utils';
|
|
2
|
+
type Options = readonly [];
|
|
3
|
+
type MessageIds = 'useArrUniq' | 'suggestArrUniq';
|
|
4
|
+
/**
|
|
5
|
+
* `Arr.uniq(xs)` is implemented as `Array.from(new Set(xs))`, so the rewrite
|
|
6
|
+
* does not change behavior. What it does change is the static type: `Arr.uniq`
|
|
7
|
+
* only accepts `readonly Primitive[]` and returns a readonly array. The rule
|
|
8
|
+
* therefore reports only when the argument is an array or tuple of primitives,
|
|
9
|
+
* and it applies the fix automatically only when nothing in sight needs the
|
|
10
|
+
* result to be a mutable array; otherwise the rewrite is offered as a
|
|
11
|
+
* suggestion.
|
|
12
|
+
*/
|
|
13
|
+
export declare const preferArrUniq: TSESLint.RuleModule<MessageIds, Options>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=prefer-arr-uniq.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefer-arr-uniq.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-uniq.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AASlC,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,CAkKzD,CAAC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
|
|
2
|
+
import { Arr } from 'ts-data-forge';
|
|
3
|
+
import * as ts from 'typescript';
|
|
4
|
+
import { buildImportFixes, getImportedLocalName, getTsDataForgeImport, } from './import-utils.mjs';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
export const preferArrUniq = {
|
|
15
|
+
meta: {
|
|
16
|
+
type: 'suggestion',
|
|
17
|
+
docs: {
|
|
18
|
+
description: 'Replace `Array.from(new Set(xs))` / `[...new Set(xs)]` with `Arr.uniq(xs)` from ts-data-forge.',
|
|
19
|
+
},
|
|
20
|
+
fixable: 'code',
|
|
21
|
+
hasSuggestions: true,
|
|
22
|
+
schema: [],
|
|
23
|
+
messages: {
|
|
24
|
+
useArrUniq: 'Replace with `Arr.uniq({{arrayName}})` from ts-data-forge.',
|
|
25
|
+
suggestArrUniq: 'Replace with `Arr.uniq({{arrayName}})` from ts-data-forge (the result becomes a readonly array).',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
create: (context) => {
|
|
29
|
+
const sourceCode = context.sourceCode;
|
|
30
|
+
const program = sourceCode.ast;
|
|
31
|
+
const tsDataForgeImport = getTsDataForgeImport(program);
|
|
32
|
+
const services = sourceCode.parserServices;
|
|
33
|
+
const checker = services?.program?.getTypeChecker();
|
|
34
|
+
const esTreeNodeToTSNodeMap = services?.esTreeNodeToTSNodeMap;
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if (checker === undefined || esTreeNodeToTSNodeMap === undefined) {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
const getTsNode = (
|
|
41
|
+
|
|
42
|
+
node) => esTreeNodeToTSNodeMap.get(node);
|
|
43
|
+
const mut_matches = [];
|
|
44
|
+
const check = (
|
|
45
|
+
|
|
46
|
+
node,
|
|
47
|
+
|
|
48
|
+
setNode) => {
|
|
49
|
+
const arrayExpression = getSetSourceArray(setNode);
|
|
50
|
+
if (arrayExpression === undefined)
|
|
51
|
+
return;
|
|
52
|
+
if (!isGlobal(sourceCode, node, 'Set'))
|
|
53
|
+
return;
|
|
54
|
+
const arrayTsNode = getTsNode(arrayExpression);
|
|
55
|
+
if (arrayTsNode === undefined)
|
|
56
|
+
return;
|
|
57
|
+
if (!isPrimitiveArrayType(checker, checker.getTypeAtLocation(arrayTsNode)))
|
|
58
|
+
return;
|
|
59
|
+
mut_matches.push({
|
|
60
|
+
node,
|
|
61
|
+
arrayExpression,
|
|
62
|
+
autofixable: !needsMutableResult(sourceCode, checker, getTsNode, node),
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
CallExpression: (node) => {
|
|
67
|
+
|
|
68
|
+
if (node.optional ||
|
|
69
|
+
node.callee.type !== AST_NODE_TYPES.MemberExpression ||
|
|
70
|
+
node.callee.computed ||
|
|
71
|
+
node.callee.optional ||
|
|
72
|
+
node.callee.object.type !== AST_NODE_TYPES.Identifier ||
|
|
73
|
+
node.callee.object.name !== 'Array' ||
|
|
74
|
+
node.callee.property.type !== AST_NODE_TYPES.Identifier ||
|
|
75
|
+
node.callee.property.name !== 'from' ||
|
|
76
|
+
|
|
77
|
+
!Arr.isFixedLengthTuple(1, node.arguments)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!isGlobal(sourceCode, node, 'Array'))
|
|
81
|
+
return;
|
|
82
|
+
check(node, node.arguments[0]);
|
|
83
|
+
},
|
|
84
|
+
ArrayExpression: (node) => {
|
|
85
|
+
|
|
86
|
+
if (!Arr.isFixedLengthTuple(1, node.elements))
|
|
87
|
+
return;
|
|
88
|
+
const element = node.elements[0];
|
|
89
|
+
if (element?.type !== AST_NODE_TYPES.SpreadElement)
|
|
90
|
+
return;
|
|
91
|
+
check(node, element.argument);
|
|
92
|
+
},
|
|
93
|
+
'Program:exit': () => {
|
|
94
|
+
const arrLocalName = getImportedLocalName(tsDataForgeImport, 'Arr');
|
|
95
|
+
const arrName = arrLocalName ?? 'Arr';
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
const firstAutofixable = mut_matches.find((m) => m.autofixable);
|
|
100
|
+
for (const match of mut_matches) {
|
|
101
|
+
const arrayText = sourceCode.getText(match.arrayExpression);
|
|
102
|
+
const argumentText = match.arrayExpression.type === AST_NODE_TYPES.SequenceExpression
|
|
103
|
+
? `(${arrayText})`
|
|
104
|
+
: arrayText;
|
|
105
|
+
const buildFix = (withImport) => (fixer) => [
|
|
106
|
+
...(withImport && arrLocalName === undefined
|
|
107
|
+
? buildImportFixes(fixer, program, tsDataForgeImport, ['Arr'])
|
|
108
|
+
: []),
|
|
109
|
+
fixer.replaceText(match.node, `${arrName}.uniq(${argumentText})`),
|
|
110
|
+
];
|
|
111
|
+
const data = { arrayName: arrayText };
|
|
112
|
+
if (match.autofixable) {
|
|
113
|
+
context.report({
|
|
114
|
+
node: match.node,
|
|
115
|
+
messageId: 'useArrUniq',
|
|
116
|
+
data,
|
|
117
|
+
fix: buildFix(match === firstAutofixable),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
context.report({
|
|
122
|
+
node: match.node,
|
|
123
|
+
messageId: 'useArrUniq',
|
|
124
|
+
data,
|
|
125
|
+
suggest: [
|
|
126
|
+
{
|
|
127
|
+
messageId: 'suggestArrUniq',
|
|
128
|
+
data,
|
|
129
|
+
fix: buildFix(true),
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
defaultOptions: [],
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const mutatingMethods = new Set([
|
|
142
|
+
'copyWithin',
|
|
143
|
+
'fill',
|
|
144
|
+
'pop',
|
|
145
|
+
'push',
|
|
146
|
+
'reverse',
|
|
147
|
+
'shift',
|
|
148
|
+
'sort',
|
|
149
|
+
'splice',
|
|
150
|
+
'unshift',
|
|
151
|
+
]);
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
const getSetSourceArray = (
|
|
158
|
+
|
|
159
|
+
node) => {
|
|
160
|
+
if (node.type !== AST_NODE_TYPES.NewExpression ||
|
|
161
|
+
node.callee.type !== AST_NODE_TYPES.Identifier ||
|
|
162
|
+
node.callee.name !== 'Set' ||
|
|
163
|
+
node.typeArguments !== undefined ||
|
|
164
|
+
!Arr.isFixedLengthTuple(1, node.arguments)) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
const argument = node.arguments[0];
|
|
168
|
+
return argument.type === AST_NODE_TYPES.SpreadElement ? undefined : argument;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const isGlobal = (
|
|
172
|
+
|
|
173
|
+
sourceCode,
|
|
174
|
+
|
|
175
|
+
node, name) => {
|
|
176
|
+
const variable = findVariable(sourceCode.getScope(node), name);
|
|
177
|
+
|
|
178
|
+
return variable === undefined || variable.defs.length === 0;
|
|
179
|
+
};
|
|
180
|
+
const findVariable = (
|
|
181
|
+
|
|
182
|
+
scope, name) => {
|
|
183
|
+
const variable = scope.set.get(name);
|
|
184
|
+
if (variable !== undefined)
|
|
185
|
+
return variable;
|
|
186
|
+
if (scope.upper === null)
|
|
187
|
+
return undefined;
|
|
188
|
+
return findVariable(scope.upper, name);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
const isPrimitiveArrayType = (
|
|
195
|
+
|
|
196
|
+
checker,
|
|
197
|
+
|
|
198
|
+
type) => {
|
|
199
|
+
const resolved = resolveConstraint(checker, type);
|
|
200
|
+
if (resolved.isUnion()) {
|
|
201
|
+
return resolved.types.every((t) => isPrimitiveArrayType(checker, t));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
if (resolved.isIntersection()) {
|
|
206
|
+
return resolved.types.some((t) => isPrimitiveArrayType(checker, t));
|
|
207
|
+
}
|
|
208
|
+
if (!checker.isArrayType(resolved) && !checker.isTupleType(resolved)) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
const typeArguments = checker.getTypeArguments(
|
|
212
|
+
|
|
213
|
+
resolved);
|
|
214
|
+
|
|
215
|
+
return typeArguments.every((t) => isPrimitiveType(checker, t));
|
|
216
|
+
};
|
|
217
|
+
const isPrimitiveType = (
|
|
218
|
+
|
|
219
|
+
checker,
|
|
220
|
+
|
|
221
|
+
type) => {
|
|
222
|
+
const resolved = resolveConstraint(checker, type);
|
|
223
|
+
if (resolved.isUnion()) {
|
|
224
|
+
return resolved.types.every((t) => isPrimitiveType(checker, t));
|
|
225
|
+
}
|
|
226
|
+
return (resolved.flags & primitiveTypeFlags) !== 0;
|
|
227
|
+
};
|
|
228
|
+
const primitiveTypeFlags = ts.TypeFlags.StringLike |
|
|
229
|
+
ts.TypeFlags.NumberLike |
|
|
230
|
+
ts.TypeFlags.BigIntLike |
|
|
231
|
+
ts.TypeFlags.BooleanLike |
|
|
232
|
+
ts.TypeFlags.ESSymbolLike |
|
|
233
|
+
ts.TypeFlags.Null |
|
|
234
|
+
ts.TypeFlags.Undefined;
|
|
235
|
+
const resolveConstraint = (
|
|
236
|
+
|
|
237
|
+
checker,
|
|
238
|
+
|
|
239
|
+
type) => (type.flags & ts.TypeFlags.TypeParameter) !== 0
|
|
240
|
+
? (checker.getBaseConstraintOfType(type) ?? type)
|
|
241
|
+
: type;
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
const needsMutableResult = (
|
|
249
|
+
|
|
250
|
+
sourceCode,
|
|
251
|
+
|
|
252
|
+
checker,
|
|
253
|
+
|
|
254
|
+
getTsNode,
|
|
255
|
+
|
|
256
|
+
node) => {
|
|
257
|
+
if (isUsedAsMutable(checker, getTsNode, node))
|
|
258
|
+
return true;
|
|
259
|
+
const parent = node.parent;
|
|
260
|
+
if (parent?.type !== AST_NODE_TYPES.VariableDeclarator ||
|
|
261
|
+
parent.init !== node ||
|
|
262
|
+
parent.id.type !== AST_NODE_TYPES.Identifier ||
|
|
263
|
+
parent.id.typeAnnotation !== undefined) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
const [variable] = sourceCode.getDeclaredVariables(parent);
|
|
267
|
+
return (variable?.references.some((reference) => reference.init !== true &&
|
|
268
|
+
isUsedAsMutable(checker, getTsNode, reference.identifier)) ?? false);
|
|
269
|
+
};
|
|
270
|
+
const isUsedAsMutable = (
|
|
271
|
+
|
|
272
|
+
checker,
|
|
273
|
+
|
|
274
|
+
getTsNode,
|
|
275
|
+
|
|
276
|
+
node) => {
|
|
277
|
+
const parent = node.parent;
|
|
278
|
+
if (parent?.type === AST_NODE_TYPES.MemberExpression &&
|
|
279
|
+
parent.object === node) {
|
|
280
|
+
|
|
281
|
+
if (!parent.computed &&
|
|
282
|
+
parent.property.type === AST_NODE_TYPES.Identifier &&
|
|
283
|
+
mutatingMethods.has(parent.property.name)) {
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const grandParent = parent.parent;
|
|
288
|
+
return ((grandParent.type === AST_NODE_TYPES.AssignmentExpression &&
|
|
289
|
+
grandParent.left === parent) ||
|
|
290
|
+
grandParent.type === AST_NODE_TYPES.UpdateExpression ||
|
|
291
|
+
(grandParent.type === AST_NODE_TYPES.UnaryExpression &&
|
|
292
|
+
grandParent.operator === 'delete'));
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
const tsNode = getTsNode(node);
|
|
297
|
+
if (tsNode === undefined)
|
|
298
|
+
return false;
|
|
299
|
+
if (!ts.isExpression(tsNode))
|
|
300
|
+
return false;
|
|
301
|
+
const expectedType = getDeclaredParameterType(checker, tsNode) ??
|
|
302
|
+
checker.getContextualType(tsNode);
|
|
303
|
+
return (expectedType !== undefined && isMutableArrayOnly(checker, expectedType));
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
const getDeclaredParameterType = (
|
|
314
|
+
|
|
315
|
+
checker,
|
|
316
|
+
|
|
317
|
+
argument) => {
|
|
318
|
+
const call = argument.parent;
|
|
319
|
+
if (!ts.isCallExpression(call) && !ts.isNewExpression(call)) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
322
|
+
const index = call.arguments?.indexOf(argument) ?? -1;
|
|
323
|
+
if (index === -1)
|
|
324
|
+
return undefined;
|
|
325
|
+
const declaration = checker.getResolvedSignature(call)?.getDeclaration();
|
|
326
|
+
const parameter = declaration?.parameters[index];
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
if (parameter === undefined || parameter.dotDotDotToken !== undefined) {
|
|
330
|
+
return undefined;
|
|
331
|
+
}
|
|
332
|
+
return checker.getTypeAtLocation(parameter);
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
const isMutableArrayOnly = (
|
|
340
|
+
|
|
341
|
+
checker,
|
|
342
|
+
|
|
343
|
+
type) => {
|
|
344
|
+
const members = type.isUnion() ? type.types : [type];
|
|
345
|
+
return (members.every((t) =>
|
|
346
|
+
|
|
347
|
+
(t.flags & primitiveTypeFlags) !== 0 ||
|
|
348
|
+
(checker.isArrayType(t) && t.getSymbol()?.getName() === 'Array')) && members.some((t) => (t.flags & primitiveTypeFlags) === 0));
|
|
349
|
+
};
|
|
350
|
+
//# sourceMappingURL=prefer-arr-uniq.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefer-arr-uniq.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-uniq.mts"],"names":[],"mappings":"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"}
|
package/dist/rules/rules.d.mts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const tsDataForgeRules: {
|
|
|
5
5
|
readonly 'prefer-arr-is-array': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useArrIsArray", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
6
6
|
readonly 'prefer-arr-scan': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferArrScanAccumulate" | "preferArrScanPrefix", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
7
7
|
readonly 'prefer-arr-sum': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useArrSum" | "useArrSumBy", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
8
|
+
readonly 'prefer-arr-uniq': import("@typescript-eslint/utils/ts-eslint").RuleModule<"suggestArrUniq" | "useArrUniq", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
8
9
|
readonly 'prefer-as-int': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useBrandedNumberCastFunction", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
10
|
readonly 'prefer-is-non-null-object': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useIsNonNullObject", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
10
11
|
readonly 'prefer-range-for-loop': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useRangeForLoop", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../src/rules/rules.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../src/rules/rules.mts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;CAkBa,CAAC"}
|
package/dist/rules/rules.mjs
CHANGED
|
@@ -3,6 +3,7 @@ import { noUnnecessaryTypeGuard } from './no-unnecessary-type-guard.mjs';
|
|
|
3
3
|
import { preferArrIsArray } from './prefer-arr-is-array.mjs';
|
|
4
4
|
import { preferArrScan } from './prefer-arr-scan.mjs';
|
|
5
5
|
import { preferArrSum } from './prefer-arr-sum.mjs';
|
|
6
|
+
import { preferArrUniq } from './prefer-arr-uniq.mjs';
|
|
6
7
|
import { preferAsInt } from './prefer-as-int.mjs';
|
|
7
8
|
import { preferCanonicalArraySlicing } from './prefer-canonical-array-slicing.mjs';
|
|
8
9
|
import { preferCanonicalLengthCast } from './prefer-canonical-length-cast.mjs';
|
|
@@ -21,6 +22,7 @@ export const tsDataForgeRules = {
|
|
|
21
22
|
'prefer-arr-is-array': preferArrIsArray,
|
|
22
23
|
'prefer-arr-scan': preferArrScan,
|
|
23
24
|
'prefer-arr-sum': preferArrSum,
|
|
25
|
+
'prefer-arr-uniq': preferArrUniq,
|
|
24
26
|
'prefer-as-int': preferAsInt,
|
|
25
27
|
'prefer-is-non-null-object': preferIsNonNullObject,
|
|
26
28
|
'prefer-range-for-loop': preferRangeForLoop,
|
package/dist/rules/rules.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.mjs","sourceRoot":"","sources":["../../src/rules/rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gCAAgC,EAAE,2BAA2B;IAC7D,+BAA+B,EAAE,0BAA0B;IAC3D,8BAA8B,EAAE,yBAAyB;IACzD,qBAAqB,EAAE,gBAAgB;IACvC,iBAAiB,EAAE,aAAa;IAChC,gBAAgB,EAAE,YAAY;IAC9B,eAAe,EAAE,WAAW;IAC5B,2BAA2B,EAAE,qBAAqB;IAClD,uBAAuB,EAAE,kBAAkB;IAC3C,8BAA8B,EAAE,uBAAuB;IACvD,2BAA2B,EAAE,qBAAqB;IAClD,6BAA6B,EAAE,uBAAuB;IACtD,uBAAuB,EAAE,kBAAkB;IAC3C,2BAA2B,EAAE,sBAAsB;IACnD,sCAAsC,EAAE,gCAAgC;IACxE,oCAAoC,EAAE,6BAA6B;CAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"rules.mjs","sourceRoot":"","sources":["../../src/rules/rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gCAAgC,EAAE,2BAA2B;IAC7D,+BAA+B,EAAE,0BAA0B;IAC3D,8BAA8B,EAAE,yBAAyB;IACzD,qBAAqB,EAAE,gBAAgB;IACvC,iBAAiB,EAAE,aAAa;IAChC,gBAAgB,EAAE,YAAY;IAC9B,iBAAiB,EAAE,aAAa;IAChC,eAAe,EAAE,WAAW;IAC5B,2BAA2B,EAAE,qBAAqB;IAClD,uBAAuB,EAAE,kBAAkB;IAC3C,8BAA8B,EAAE,uBAAuB;IACvD,2BAA2B,EAAE,qBAAqB;IAClD,6BAA6B,EAAE,uBAAuB;IACtD,uBAAuB,EAAE,kBAAkB;IAC3C,2BAA2B,EAAE,sBAAsB;IACnD,sCAAsC,EAAE,gCAAgC;IACxE,oCAAoC,EAAE,6BAA6B;CAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-ts-data-forge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "ESLint rules that steer code toward ts-data-forge idioms.",
|
|
6
6
|
"keywords": [
|
|
@@ -34,17 +34,17 @@
|
|
|
34
34
|
"LICENSE"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@typescript-eslint/utils": "^8.
|
|
37
|
+
"@typescript-eslint/utils": "^8.70.0",
|
|
38
38
|
"ts-data-forge": "14.7.1",
|
|
39
39
|
"ts-type-forge": "~9.2.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@typescript-eslint/parser": "8.
|
|
43
|
-
"@typescript-eslint/rule-tester": "8.
|
|
42
|
+
"@typescript-eslint/parser": "8.70.0",
|
|
43
|
+
"@typescript-eslint/rule-tester": "8.70.0",
|
|
44
44
|
"dedent": "1.7.2",
|
|
45
|
-
"eslint-config-typed": "5.11.
|
|
46
|
-
"eslint-plugin-ts-fortress": "1.2.
|
|
47
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
45
|
+
"eslint-config-typed": "5.11.9",
|
|
46
|
+
"eslint-plugin-ts-fortress": "1.2.3",
|
|
47
|
+
"eslint-plugin-ts-type-forge": "0.8.4",
|
|
48
48
|
"prettier": "3.9.6",
|
|
49
49
|
"prettier-plugin-organize-imports": "4.3.0",
|
|
50
50
|
"prettier-plugin-packagejson": "3.0.2",
|
|
@@ -64,19 +64,20 @@
|
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|
|
66
66
|
"build": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts",
|
|
67
|
-
"
|
|
68
|
-
"check:branded-number-types": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-branded-number-types.mts",
|
|
67
|
+
"check": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-branded-number-types.mts",
|
|
69
68
|
"check:ext": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-ext.mts",
|
|
69
|
+
"doc": "pnpm run doc:embed",
|
|
70
|
+
"doc:embed": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples.mts",
|
|
70
71
|
"fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
|
|
71
72
|
"fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
|
|
72
73
|
"fmt:full": "pnpm run z:prettier .",
|
|
73
74
|
"gen:rule-types": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/gen-rule-types.mts",
|
|
75
|
+
"gen:src": "pnpm run gen:rule-types",
|
|
74
76
|
"lint": "eslint .",
|
|
75
77
|
"lint:fix": "eslint . --fix",
|
|
76
78
|
"test": "pnpm run z:vitest run",
|
|
77
79
|
"test:cov": "pnpm run z:vitest run --coverage",
|
|
78
80
|
"testw": "pnpm run z:vitest",
|
|
79
|
-
"tsc": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
|
|
80
81
|
"tscw": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch -p ./tsconfig.json",
|
|
81
82
|
"type-check": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
|
|
82
83
|
"z:prettier": "prettier --config ../../.prettierrc --ignore-path ../../.prettierignore --ignore-path ../../.gitignore --ignore-unknown --no-error-on-unmatched-pattern --write",
|
package/src/plugin.mts
CHANGED
|
@@ -15,6 +15,7 @@ const recommendedRules = {
|
|
|
15
15
|
'ts-data-forge/prefer-arr-is-array': 'error',
|
|
16
16
|
'ts-data-forge/prefer-arr-scan': 'error',
|
|
17
17
|
'ts-data-forge/prefer-arr-sum': 'error',
|
|
18
|
+
'ts-data-forge/prefer-arr-uniq': 'error',
|
|
18
19
|
'ts-data-forge/prefer-as-int': 'error',
|
|
19
20
|
'ts-data-forge/prefer-is-non-null-object': 'error',
|
|
20
21
|
'ts-data-forge/prefer-range-for-loop': 'error',
|
package/src/rule-types.mts
CHANGED
|
@@ -117,6 +117,21 @@ namespace PreferArrSum {
|
|
|
117
117
|
export type RuleEntry = Linter.StringSeverity;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
/**
|
|
121
|
+
* @description Replace `Array.from(new Set(xs))` / `[...new Set(xs)]` with `Arr.uniq(xs)` from ts-data-forge.
|
|
122
|
+
*
|
|
123
|
+
* ```md
|
|
124
|
+
* | key | value |
|
|
125
|
+
* | :--------- | :--------- |
|
|
126
|
+
* | type | suggestion |
|
|
127
|
+
* | deprecated | false |
|
|
128
|
+
* | fixable | code |
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
namespace PreferArrUniq {
|
|
132
|
+
export type RuleEntry = Linter.StringSeverity;
|
|
133
|
+
}
|
|
134
|
+
|
|
120
135
|
/**
|
|
121
136
|
* @description Replace branded number type assertions (e.g., `as Int`) with corresponding functions (e.g., `asInt()`) from ts-data-forge.
|
|
122
137
|
*
|
|
@@ -302,6 +317,7 @@ export type EslintTsDataForgeRules = Readonly<{
|
|
|
302
317
|
'ts-data-forge/prefer-arr-is-array': PreferArrIsArray.RuleEntry;
|
|
303
318
|
'ts-data-forge/prefer-arr-scan': PreferArrScan.RuleEntry;
|
|
304
319
|
'ts-data-forge/prefer-arr-sum': PreferArrSum.RuleEntry;
|
|
320
|
+
'ts-data-forge/prefer-arr-uniq': PreferArrUniq.RuleEntry;
|
|
305
321
|
'ts-data-forge/prefer-as-int': PreferAsInt.RuleEntry;
|
|
306
322
|
'ts-data-forge/prefer-is-non-null-object': PreferIsNonNullObject.RuleEntry;
|
|
307
323
|
'ts-data-forge/prefer-range-for-loop': PreferRangeForLoop.RuleEntry;
|