eslint-plugin-ts-data-forge 0.8.1 → 0.8.3
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/plugin.d.mts +1 -1
- 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 +3 -3
- package/dist/rule-types.d.mts.map +1 -1
- package/dist/rules/ast-utils.d.mts +59 -3
- package/dist/rules/ast-utils.d.mts.map +1 -1
- package/dist/rules/ast-utils.mjs +142 -31
- package/dist/rules/ast-utils.mjs.map +1 -1
- package/dist/rules/branded-number-types.mjs.map +1 -1
- package/dist/rules/import-utils.d.mts +1 -1
- package/dist/rules/import-utils.d.mts.map +1 -1
- package/dist/rules/import-utils.mjs +26 -13
- package/dist/rules/import-utils.mjs.map +1 -1
- package/dist/rules/no-side-effect-import.d.mts +1 -1
- package/dist/rules/no-side-effect-import.d.mts.map +1 -1
- package/dist/rules/no-unnecessary-type-guard.d.mts.map +1 -1
- package/dist/rules/no-unnecessary-type-guard.mjs +161 -101
- package/dist/rules/no-unnecessary-type-guard.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-array.d.mts.map +1 -1
- package/dist/rules/prefer-arr-is-array.mjs +25 -11
- package/dist/rules/prefer-arr-is-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-bounded-length-array.d.mts +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 +11 -21
- package/dist/rules/prefer-arr-is-bounded-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-fixed-length-array.d.mts +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 +16 -28
- package/dist/rules/prefer-arr-is-fixed-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-max-length-array.d.mts +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 +16 -24
- package/dist/rules/prefer-arr-is-max-length-array.mjs.map +1 -1
- package/dist/rules/prefer-arr-is-min-length-array.d.mts +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 +16 -24
- 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 +9 -22
- package/dist/rules/prefer-arr-is-non-empty.mjs.map +1 -1
- package/dist/rules/prefer-arr-scan.d.mts +6 -5
- package/dist/rules/prefer-arr-scan.d.mts.map +1 -1
- package/dist/rules/prefer-arr-scan.mjs +68 -31
- 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 +57 -40
- 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 +59 -30
- 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 +27 -24
- 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 +59 -28
- package/dist/rules/prefer-canonical-array-slicing.mjs.map +1 -1
- package/dist/rules/prefer-canonical-length-cast.d.mts.map +1 -1
- package/dist/rules/prefer-canonical-length-cast.mjs +41 -16
- package/dist/rules/prefer-canonical-length-cast.mjs.map +1 -1
- package/dist/rules/prefer-canonical-length-guard.d.mts.map +1 -1
- package/dist/rules/prefer-canonical-length-guard.mjs +18 -8
- package/dist/rules/prefer-canonical-length-guard.mjs.map +1 -1
- package/dist/rules/prefer-comparison-over-nullish-guard.d.mts.map +1 -1
- package/dist/rules/prefer-comparison-over-nullish-guard.mjs +31 -6
- package/dist/rules/prefer-comparison-over-nullish-guard.mjs.map +1 -1
- package/dist/rules/prefer-is-non-null-object.d.mts.map +1 -1
- package/dist/rules/prefer-is-non-null-object.mjs +56 -40
- package/dist/rules/prefer-is-non-null-object.mjs.map +1 -1
- package/dist/rules/prefer-is-record-and-has-key.d.mts.map +1 -1
- package/dist/rules/prefer-is-record-and-has-key.mjs +18 -8
- package/dist/rules/prefer-is-record-and-has-key.mjs.map +1 -1
- package/dist/rules/prefer-num-safe-parse-float.d.mts +3 -1
- package/dist/rules/prefer-num-safe-parse-float.d.mts.map +1 -1
- package/dist/rules/prefer-num-safe-parse-float.mjs +27 -10
- package/dist/rules/prefer-num-safe-parse-float.mjs.map +1 -1
- package/dist/rules/prefer-num-safe-parse-int.d.mts.map +1 -1
- package/dist/rules/prefer-num-safe-parse-int.mjs +24 -11
- package/dist/rules/prefer-num-safe-parse-int.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 +22 -11
- package/dist/rules/prefer-obj-over-entries-round-trip.mjs.map +1 -1
- package/dist/rules/prefer-range-for-loop.d.mts.map +1 -1
- package/dist/rules/prefer-range-for-loop.mjs +15 -8
- package/dist/rules/prefer-range-for-loop.mjs.map +1 -1
- package/dist/types.d.mts +2 -2
- package/dist/types.d.mts.map +1 -1
- package/package.json +25 -23
- package/src/plugin.mts +5 -4
- package/src/plugin.test.mts +0 -13
- package/src/rule-types.mts +3 -3
- package/src/rules/ast-utils.mts +192 -37
- package/src/rules/branded-number-types.mts +1 -1
- package/src/rules/import-utils.mts +41 -17
- package/src/rules/no-side-effect-import.mts +1 -1
- package/src/rules/no-unnecessary-type-guard.mts +249 -148
- package/src/rules/no-unnecessary-type-guard.test.mts +100 -0
- package/src/rules/prefer-arr-is-array.mts +32 -13
- package/src/rules/prefer-arr-is-array.test.mts +40 -0
- package/src/rules/prefer-arr-is-bounded-length-array.mts +22 -26
- package/src/rules/prefer-arr-is-bounded-length-array.test.mts +68 -0
- package/src/rules/prefer-arr-is-fixed-length-array.mts +26 -38
- package/src/rules/prefer-arr-is-fixed-length-array.test.mts +63 -0
- package/src/rules/prefer-arr-is-max-length-array.mts +26 -27
- package/src/rules/prefer-arr-is-max-length-array.test.mts +67 -0
- package/src/rules/prefer-arr-is-min-length-array.mts +26 -27
- package/src/rules/prefer-arr-is-min-length-array.test.mts +70 -0
- package/src/rules/prefer-arr-is-non-empty.mts +19 -24
- package/src/rules/prefer-arr-is-non-empty.test.mts +79 -0
- package/src/rules/prefer-arr-scan.mts +107 -37
- package/src/rules/prefer-arr-scan.test.mts +149 -0
- package/src/rules/prefer-arr-sum.mts +87 -50
- package/src/rules/prefer-arr-sum.test.mts +97 -0
- package/src/rules/prefer-arr-uniq.mts +83 -33
- package/src/rules/prefer-arr-uniq.test.mts +71 -0
- package/src/rules/prefer-as-int.mts +38 -38
- package/src/rules/prefer-as-int.test.mts +51 -0
- package/src/rules/prefer-canonical-array-slicing.mts +84 -29
- package/src/rules/prefer-canonical-array-slicing.test.mts +92 -0
- package/src/rules/prefer-canonical-length-cast.mts +56 -18
- package/src/rules/prefer-canonical-length-cast.test.mts +111 -0
- package/src/rules/prefer-canonical-length-guard.mts +25 -11
- package/src/rules/prefer-canonical-length-guard.test.mts +99 -0
- package/src/rules/prefer-comparison-over-nullish-guard.mts +42 -9
- package/src/rules/prefer-comparison-over-nullish-guard.test.mts +136 -0
- package/src/rules/prefer-is-non-null-object.mts +57 -33
- package/src/rules/prefer-is-non-null-object.test.mts +42 -0
- package/src/rules/prefer-is-record-and-has-key.mts +27 -12
- package/src/rules/prefer-is-record-and-has-key.test.mts +34 -0
- package/src/rules/prefer-num-safe-parse-float.mts +37 -13
- package/src/rules/prefer-num-safe-parse-float.test.mts +79 -0
- package/src/rules/prefer-num-safe-parse-int.mts +41 -15
- package/src/rules/prefer-num-safe-parse-int.test.mts +64 -0
- package/src/rules/prefer-obj-over-entries-round-trip.mts +34 -12
- package/src/rules/prefer-range-for-loop.mts +21 -9
- package/src/rules/prefer-range-for-loop.test.mts +75 -0
- package/src/rules/rules.mts +1 -1
- package/src/types.mts +2 -2
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isIntegerLiteralOrConstant } from './ast-utils.mjs';
|
|
1
|
+
import { asLengthAccess, isArrayOrTupleExpression, isIntegerLiteralOrConstant, skipTypeWrappers, toArgumentText, } from './ast-utils.mjs';
|
|
3
2
|
import { buildImportFixes, getNamedImports, getTsDataForgeImport, } from './import-utils.mjs';
|
|
4
3
|
export const preferArrIsFixedLengthArray = {
|
|
5
4
|
meta: {
|
|
@@ -22,41 +21,33 @@ export const preferArrIsFixedLengthArray = {
|
|
|
22
21
|
return {
|
|
23
22
|
BinaryExpression: (node) => {
|
|
24
23
|
|
|
25
|
-
if (node.operator !== '===' && node.operator !== '!==')
|
|
24
|
+
if (node.operator !== '===' && node.operator !== '!==') {
|
|
26
25
|
return;
|
|
26
|
+
}
|
|
27
27
|
const isNegated = node.operator === '!==';
|
|
28
|
-
|
|
29
|
-
const
|
|
28
|
+
|
|
29
|
+
const leftLength = asLengthAccess(node.left);
|
|
30
|
+
const isLengthOnLeft = leftLength !== undefined;
|
|
31
|
+
const lengthSide = leftLength ?? asLengthAccess(node.right);
|
|
30
32
|
const valueSide = node[isLengthOnLeft ? 'right' : 'left'];
|
|
31
|
-
if (
|
|
33
|
+
if (lengthSide === undefined) {
|
|
32
34
|
return;
|
|
35
|
+
}
|
|
33
36
|
|
|
34
|
-
if (!isIntegerLiteralOrConstant(valueSide, sourceCode))
|
|
37
|
+
if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) {
|
|
35
38
|
return;
|
|
36
|
-
|
|
39
|
+
}
|
|
37
40
|
const arrayExpression = lengthSide.object;
|
|
38
41
|
|
|
39
|
-
if (services
|
|
40
|
-
const checker = services.program.getTypeChecker();
|
|
41
|
-
const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);
|
|
42
|
-
if (tsNode !== undefined) {
|
|
43
|
-
const type = checker.getTypeAtLocation(tsNode);
|
|
44
|
-
|
|
45
|
-
const isArrayType = checker.isArrayType(type) || checker.isTupleType(type);
|
|
46
|
-
if (!isArrayType)
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
42
|
+
if (!isArrayOrTupleExpression(services, arrayExpression)) {
|
|
54
43
|
return;
|
|
55
44
|
}
|
|
56
45
|
mut_nodesToFix.push({
|
|
57
46
|
node,
|
|
58
47
|
arrayExpression,
|
|
59
|
-
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
lengthExpression: skipTypeWrappers(valueSide),
|
|
60
51
|
isNegated,
|
|
61
52
|
});
|
|
62
53
|
},
|
|
@@ -64,7 +55,7 @@ export const preferArrIsFixedLengthArray = {
|
|
|
64
55
|
const namedImports = getNamedImports(tsDataForgeImport);
|
|
65
56
|
const hasArrImport = namedImports.includes('Arr');
|
|
66
57
|
for (const [index, { node, arrayExpression, lengthExpression, isNegated },] of mut_nodesToFix.entries()) {
|
|
67
|
-
const arrayText =
|
|
58
|
+
const arrayText = toArgumentText(arrayExpression, sourceCode);
|
|
68
59
|
const lengthText = sourceCode.getText(lengthExpression);
|
|
69
60
|
const originalText = sourceCode.getText(node);
|
|
70
61
|
context.report({
|
|
@@ -90,7 +81,4 @@ export const preferArrIsFixedLengthArray = {
|
|
|
90
81
|
},
|
|
91
82
|
defaultOptions: [],
|
|
92
83
|
};
|
|
93
|
-
const isLengthAccess = (node) => node.type === AST_NODE_TYPES.MemberExpression &&
|
|
94
|
-
node.property.type === AST_NODE_TYPES.Identifier &&
|
|
95
|
-
node.property.name === 'length';
|
|
96
84
|
//# sourceMappingURL=prefer-arr-is-fixed-length-array.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-fixed-length-array.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-fixed-length-array.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-fixed-length-array.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-fixed-length-array.mts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { TSESLint } from '@typescript-eslint/utils';
|
|
2
2
|
type Options = readonly [];
|
|
3
3
|
type MessageIds = 'useIsMaxLengthArray';
|
|
4
4
|
export declare const preferArrIsMaxLengthArray: TSESLint.RuleModule<MessageIds, Options>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-max-length-array.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-max-length-array.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-max-length-array.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-max-length-array.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AAenE,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,qBAAqB,CAAC;AAExC,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CACzD,UAAU,EACV,OAAO,CAsHC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { asLengthAccess, isArrayOrTupleExpression, isIntegerLiteralOrConstant, isPartOfBoundedLengthCheck, skipTypeWrappers, toArgumentText, } from './ast-utils.mjs';
|
|
2
2
|
import { buildImportFixes, getNamedImports, getTsDataForgeImport, } from './import-utils.mjs';
|
|
3
3
|
export const preferArrIsMaxLengthArray = {
|
|
4
4
|
meta: {
|
|
@@ -21,53 +21,45 @@ export const preferArrIsMaxLengthArray = {
|
|
|
21
21
|
return {
|
|
22
22
|
BinaryExpression: (node) => {
|
|
23
23
|
|
|
24
|
-
if (node.operator !== '>=' && node.operator !== '<=')
|
|
24
|
+
if (node.operator !== '>=' && node.operator !== '<=') {
|
|
25
25
|
return;
|
|
26
|
+
}
|
|
26
27
|
|
|
27
28
|
|
|
28
|
-
if (isPartOfBoundedLengthCheck(node, sourceCode))
|
|
29
|
+
if (isPartOfBoundedLengthCheck(node, sourceCode)) {
|
|
29
30
|
return;
|
|
31
|
+
}
|
|
30
32
|
|
|
31
33
|
const isLengthOnLeft = node.operator === '<=';
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
const lengthSide = asLengthAccess(node[isLengthOnLeft ? 'left' : 'right']);
|
|
33
36
|
const valueSide = node[isLengthOnLeft ? 'right' : 'left'];
|
|
34
37
|
|
|
35
|
-
if (
|
|
38
|
+
if (lengthSide === undefined) {
|
|
36
39
|
return;
|
|
40
|
+
}
|
|
37
41
|
|
|
38
|
-
if (!isIntegerLiteralOrConstant(valueSide, sourceCode))
|
|
42
|
+
if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) {
|
|
39
43
|
return;
|
|
40
|
-
|
|
44
|
+
}
|
|
41
45
|
const arrayExpression = lengthSide.object;
|
|
42
46
|
|
|
43
|
-
if (services
|
|
44
|
-
const checker = services.program.getTypeChecker();
|
|
45
|
-
const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);
|
|
46
|
-
if (tsNode !== undefined) {
|
|
47
|
-
const type = checker.getTypeAtLocation(tsNode);
|
|
48
|
-
|
|
49
|
-
const isArrayType = checker.isArrayType(type) || checker.isTupleType(type);
|
|
50
|
-
if (!isArrayType)
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
47
|
+
if (!isArrayOrTupleExpression(services, arrayExpression)) {
|
|
58
48
|
return;
|
|
59
49
|
}
|
|
60
50
|
mut_nodesToFix.push({
|
|
61
51
|
node,
|
|
62
52
|
arrayExpression,
|
|
63
|
-
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
lengthExpression: skipTypeWrappers(valueSide),
|
|
64
56
|
});
|
|
65
57
|
},
|
|
66
58
|
'Program:exit': () => {
|
|
67
59
|
const namedImports = getNamedImports(tsDataForgeImport);
|
|
68
60
|
const hasArrImport = namedImports.includes('Arr');
|
|
69
61
|
for (const [index, { node, arrayExpression, lengthExpression },] of mut_nodesToFix.entries()) {
|
|
70
|
-
const arrayText =
|
|
62
|
+
const arrayText = toArgumentText(arrayExpression, sourceCode);
|
|
71
63
|
const lengthText = sourceCode.getText(lengthExpression);
|
|
72
64
|
const originalText = sourceCode.getText(node);
|
|
73
65
|
context.report({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-max-length-array.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-max-length-array.mts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-max-length-array.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-max-length-array.mts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { TSESLint } from '@typescript-eslint/utils';
|
|
2
2
|
type Options = readonly [];
|
|
3
3
|
type MessageIds = 'useIsMinLengthArray';
|
|
4
4
|
export declare const preferArrIsMinLengthArray: TSESLint.RuleModule<MessageIds, Options>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-min-length-array.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-min-length-array.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-min-length-array.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-min-length-array.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AAenE,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,qBAAqB,CAAC;AAExC,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CACzD,UAAU,EACV,OAAO,CAsHC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { asLengthAccess, isArrayOrTupleExpression, isIntegerLiteralOrConstant, isPartOfBoundedLengthCheck, skipTypeWrappers, toArgumentText, } from './ast-utils.mjs';
|
|
2
2
|
import { buildImportFixes, getNamedImports, getTsDataForgeImport, } from './import-utils.mjs';
|
|
3
3
|
export const preferArrIsMinLengthArray = {
|
|
4
4
|
meta: {
|
|
@@ -21,53 +21,45 @@ export const preferArrIsMinLengthArray = {
|
|
|
21
21
|
return {
|
|
22
22
|
BinaryExpression: (node) => {
|
|
23
23
|
|
|
24
|
-
if (node.operator !== '>=' && node.operator !== '<=')
|
|
24
|
+
if (node.operator !== '>=' && node.operator !== '<=') {
|
|
25
25
|
return;
|
|
26
|
+
}
|
|
26
27
|
|
|
27
28
|
|
|
28
|
-
if (isPartOfBoundedLengthCheck(node, sourceCode))
|
|
29
|
+
if (isPartOfBoundedLengthCheck(node, sourceCode)) {
|
|
29
30
|
return;
|
|
31
|
+
}
|
|
30
32
|
|
|
31
33
|
const isLengthOnLeft = node.operator === '>=';
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
const lengthSide = asLengthAccess(node[isLengthOnLeft ? 'left' : 'right']);
|
|
33
36
|
const valueSide = node[isLengthOnLeft ? 'right' : 'left'];
|
|
34
37
|
|
|
35
|
-
if (
|
|
38
|
+
if (lengthSide === undefined) {
|
|
36
39
|
return;
|
|
40
|
+
}
|
|
37
41
|
|
|
38
|
-
if (!isIntegerLiteralOrConstant(valueSide, sourceCode))
|
|
42
|
+
if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) {
|
|
39
43
|
return;
|
|
40
|
-
|
|
44
|
+
}
|
|
41
45
|
const arrayExpression = lengthSide.object;
|
|
42
46
|
|
|
43
|
-
if (services
|
|
44
|
-
const checker = services.program.getTypeChecker();
|
|
45
|
-
const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);
|
|
46
|
-
if (tsNode !== undefined) {
|
|
47
|
-
const type = checker.getTypeAtLocation(tsNode);
|
|
48
|
-
|
|
49
|
-
const isArrayType = checker.isArrayType(type) || checker.isTupleType(type);
|
|
50
|
-
if (!isArrayType)
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
47
|
+
if (!isArrayOrTupleExpression(services, arrayExpression)) {
|
|
58
48
|
return;
|
|
59
49
|
}
|
|
60
50
|
mut_nodesToFix.push({
|
|
61
51
|
node,
|
|
62
52
|
arrayExpression,
|
|
63
|
-
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
lengthExpression: skipTypeWrappers(valueSide),
|
|
64
56
|
});
|
|
65
57
|
},
|
|
66
58
|
'Program:exit': () => {
|
|
67
59
|
const namedImports = getNamedImports(tsDataForgeImport);
|
|
68
60
|
const hasArrImport = namedImports.includes('Arr');
|
|
69
61
|
for (const [index, { node, arrayExpression, lengthExpression },] of mut_nodesToFix.entries()) {
|
|
70
|
-
const arrayText =
|
|
62
|
+
const arrayText = toArgumentText(arrayExpression, sourceCode);
|
|
71
63
|
const lengthText = sourceCode.getText(lengthExpression);
|
|
72
64
|
const originalText = sourceCode.getText(node);
|
|
73
65
|
context.report({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-min-length-array.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-min-length-array.mts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-min-length-array.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-min-length-array.mts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,CAAC,MAAM,yBAAyB,GAGlC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,iFAAiF;SACpF;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,mBAAmB,EACjB,mGAAmG;SACtG;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;QAE/B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;QAEnD,MAAM,cAAc,GAId,EAAE,CAAC;QAET,OAAO;YACL,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,iDAAiD;gBACjD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACrD,OAAO;gBACT,CAAC;gBAED,wEAAwE;gBACxE,4DAA4D;gBAC5D,IAAI,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;oBACjD,OAAO;gBACT,CAAC;gBAED,qCAAqC;gBACrC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;gBAE9C,6CAA6C;gBAC7C,MAAM,UAAU,GAAG,cAAc,CAC/B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CACxC,CAAC;gBAEF,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAE1D,2CAA2C;gBAC3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBAED,mFAAmF;gBACnF,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;oBACvD,OAAO;gBACT,CAAC;gBAED,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;gBAE1C,qDAAqD;gBACrD,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;oBACzD,OAAO;gBACT,CAAC;gBAED,cAAc,CAAC,IAAI,CAAC;oBAClB,IAAI;oBACJ,eAAe;oBACf,gEAAgE;oBAChE,oDAAoD;oBACpD,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC;iBAC9C,CAAC,CAAC;YACL,CAAC;YACD,cAAc,EAAE,GAAG,EAAE;gBACnB,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBAExD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAElD,KAAK,MAAM,CACT,KAAK,EACL,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAC5C,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;oBAE9D,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBAExD,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAE9C,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;wBACJ,SAAS,EAAE,qBAAqB;wBAChC,IAAI,EAAE;4BACJ,QAAQ,EAAE,YAAY;4BACtB,SAAS,EAAE,SAAS;4BACpB,MAAM,EAAE,UAAU;yBACnB;wBACD,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;4BACb,MAAM,WAAW,GAAG,wBAAwB,UAAU,KAAK,SAAS,GAAG,CAAC;4BAExE,MAAM,WAAW,GACf,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY;gCAC1B,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC;gCAC9D,CAAC,CAAC,EAAE,CAAC;4BAET,OAAO,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;wBAChE,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,EAAE;CACV,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-non-empty.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-non-empty.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-non-empty.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-non-empty.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAalC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,eAAe,CAAC;AAElC,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAwG/D,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
|
|
2
|
+
import { asLengthAccess, isArrayOrTupleExpression, skipTypeWrappers, toArgumentText, } from './ast-utils.mjs';
|
|
2
3
|
import { buildImportFixes, getNamedImports, getTsDataForgeImport, } from './import-utils.mjs';
|
|
3
4
|
export const preferArrIsNonEmpty = {
|
|
4
5
|
meta: {
|
|
@@ -21,36 +22,22 @@ export const preferArrIsNonEmpty = {
|
|
|
21
22
|
return {
|
|
22
23
|
BinaryExpression: (node) => {
|
|
23
24
|
|
|
24
|
-
if (node.operator !== '>' && node.operator !== '<')
|
|
25
|
+
if (node.operator !== '>' && node.operator !== '<') {
|
|
25
26
|
return;
|
|
27
|
+
}
|
|
26
28
|
const isLengthOnLeft = node.operator === '>';
|
|
27
|
-
const lengthSide = node[isLengthOnLeft ? 'left' : 'right'];
|
|
28
|
-
const numberSide = node[isLengthOnLeft ? 'right' : 'left'];
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const lengthSide = asLengthAccess(node[isLengthOnLeft ? 'left' : 'right']);
|
|
31
|
+
const numberSide = skipTypeWrappers(node[isLengthOnLeft ? 'right' : 'left']);
|
|
32
|
+
|
|
33
|
+
if (lengthSide === undefined ||
|
|
33
34
|
numberSide.type !== AST_NODE_TYPES.Literal ||
|
|
34
35
|
numberSide.value !== 0) {
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
37
38
|
const arrayExpression = lengthSide.object;
|
|
38
39
|
|
|
39
|
-
if (services
|
|
40
|
-
const checker = services.program.getTypeChecker();
|
|
41
|
-
const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);
|
|
42
|
-
if (tsNode !== undefined) {
|
|
43
|
-
const type = checker.getTypeAtLocation(tsNode);
|
|
44
|
-
|
|
45
|
-
const isArrayType = checker.isArrayType(type) || checker.isTupleType(type);
|
|
46
|
-
if (!isArrayType)
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
40
|
+
if (!isArrayOrTupleExpression(services, arrayExpression)) {
|
|
54
41
|
return;
|
|
55
42
|
}
|
|
56
43
|
mut_nodesToFix.push({
|
|
@@ -62,7 +49,7 @@ export const preferArrIsNonEmpty = {
|
|
|
62
49
|
const namedImports = getNamedImports(tsDataForgeImport);
|
|
63
50
|
const hasArrImport = namedImports.includes('Arr');
|
|
64
51
|
for (const [index, { node, arrayExpression },] of mut_nodesToFix.entries()) {
|
|
65
|
-
const arrayText =
|
|
52
|
+
const arrayText = toArgumentText(arrayExpression, sourceCode);
|
|
66
53
|
const originalText = sourceCode.getText(node);
|
|
67
54
|
context.report({
|
|
68
55
|
node,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-is-non-empty.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-non-empty.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,CAAC,MAAM,mBAAmB,GAA6C;IAC3E,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EACT,uEAAuE;SAC1E;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,aAAa,EACX,iFAAiF;SACpF;KACF;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;QAE/B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;QAEnD,MAAM,cAAc,GAGd,EAAE,CAAC;QAET,OAAO;YACL,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,+CAA+C;gBAC/C,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"prefer-arr-is-non-empty.mjs","sourceRoot":"","sources":["../../src/rules/prefer-arr-is-non-empty.mts"],"names":[],"mappings":"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"}
|
|
@@ -75,10 +75,10 @@ type MessageIds = 'preferArrScanPrefix' | 'preferArrScanAccumulate';
|
|
|
75
75
|
* fourth parameter (the whole array) having no counterpart in `scan`.
|
|
76
76
|
*
|
|
77
77
|
* `acc.at(-1)` is typed `T | undefined` while `scan`'s accumulator is `S`, so a
|
|
78
|
-
* `?? fallback` guarding it becomes redundant after the fix. It is
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
78
|
+
* `?? fallback` guarding it becomes redundant after the fix. It is removed only
|
|
79
|
+
* when type information shows that neither the seed nor the appended value can
|
|
80
|
+
* be nullish — asked of each both as written and under any `as` / `!`, since
|
|
81
|
+
* `[init!]` may still hold `undefined` — and kept otherwise.
|
|
82
82
|
*
|
|
83
83
|
* ## What is not reported
|
|
84
84
|
*
|
|
@@ -87,7 +87,8 @@ type MessageIds = 'preferArrScanPrefix' | 'preferArrScanAccumulate';
|
|
|
87
87
|
* `scan` hands its callback the accumulated value and the element, never the
|
|
88
88
|
* prefix, so such a callback is not one it can express.
|
|
89
89
|
*
|
|
90
|
-
* The array has to be spelled the same way in the `map` and in the `slice
|
|
90
|
+
* The array has to be spelled the same way in the `map` and in the `slice`,
|
|
91
|
+
* type wrappers aside (`(xs as readonly T[]).slice(…)` slices `xs`).
|
|
91
92
|
* Deciding that two differently written expressions denote one array needs type
|
|
92
93
|
* information and would still be a guess about aliasing.
|
|
93
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-arr-scan.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-scan.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"prefer-arr-scan.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-arr-scan.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAelC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,qBAAqB,GAAG,yBAAyB,CAAC;AA+CpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAwYzD,CAAC"}
|