eslint-plugin-ts-data-forge 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +1 -0
  2. package/dist/index.mjs +2 -2
  3. package/dist/index.mjs.map +1 -1
  4. package/dist/plugin.d.mts +2 -0
  5. package/dist/plugin.d.mts.map +1 -1
  6. package/dist/plugin.mjs +45 -41
  7. package/dist/plugin.mjs.map +1 -1
  8. package/dist/rule-types.d.mts +15 -0
  9. package/dist/rule-types.d.mts.map +1 -1
  10. package/dist/rule-types.mjs +6 -2
  11. package/dist/rule-types.mjs.map +1 -1
  12. package/dist/rules/ast-utils.mjs +107 -50
  13. package/dist/rules/ast-utils.mjs.map +1 -1
  14. package/dist/rules/branded-number-types.mjs +41 -37
  15. package/dist/rules/branded-number-types.mjs.map +1 -1
  16. package/dist/rules/constants.mjs +2 -4
  17. package/dist/rules/constants.mjs.map +1 -1
  18. package/dist/rules/import-utils.mjs +80 -56
  19. package/dist/rules/import-utils.mjs.map +1 -1
  20. package/dist/rules/index.mjs +2 -2
  21. package/dist/rules/index.mjs.map +1 -1
  22. package/dist/rules/no-side-effect-import.mjs +46 -34
  23. package/dist/rules/no-side-effect-import.mjs.map +1 -1
  24. package/dist/rules/no-unnecessary-type-guard.mjs +376 -265
  25. package/dist/rules/no-unnecessary-type-guard.mjs.map +1 -1
  26. package/dist/rules/prefer-arr-is-array.mjs +64 -52
  27. package/dist/rules/prefer-arr-is-array.mjs.map +1 -1
  28. package/dist/rules/prefer-arr-is-bounded-length-array.mjs +91 -85
  29. package/dist/rules/prefer-arr-is-bounded-length-array.mjs.map +1 -1
  30. package/dist/rules/prefer-arr-is-fixed-length-array.mjs +92 -83
  31. package/dist/rules/prefer-arr-is-fixed-length-array.mjs.map +1 -1
  32. package/dist/rules/prefer-arr-is-max-length-array.mjs +92 -80
  33. package/dist/rules/prefer-arr-is-max-length-array.mjs.map +1 -1
  34. package/dist/rules/prefer-arr-is-min-length-array.mjs +92 -80
  35. package/dist/rules/prefer-arr-is-min-length-array.mjs.map +1 -1
  36. package/dist/rules/prefer-arr-is-non-empty.mjs +85 -77
  37. package/dist/rules/prefer-arr-is-non-empty.mjs.map +1 -1
  38. package/dist/rules/prefer-arr-scan.d.mts +96 -0
  39. package/dist/rules/prefer-arr-scan.d.mts.map +1 -0
  40. package/dist/rules/prefer-arr-scan.mjs +482 -0
  41. package/dist/rules/prefer-arr-scan.mjs.map +1 -0
  42. package/dist/rules/prefer-arr-sum.mjs +176 -132
  43. package/dist/rules/prefer-arr-sum.mjs.map +1 -1
  44. package/dist/rules/prefer-as-int.mjs +77 -71
  45. package/dist/rules/prefer-as-int.mjs.map +1 -1
  46. package/dist/rules/prefer-canonical-array-slicing.mjs +503 -343
  47. package/dist/rules/prefer-canonical-array-slicing.mjs.map +1 -1
  48. package/dist/rules/prefer-canonical-length-cast.mjs +217 -144
  49. package/dist/rules/prefer-canonical-length-cast.mjs.map +1 -1
  50. package/dist/rules/prefer-canonical-length-guard.mjs +160 -109
  51. package/dist/rules/prefer-canonical-length-guard.mjs.map +1 -1
  52. package/dist/rules/prefer-comparison-over-nullish-guard.mjs +89 -71
  53. package/dist/rules/prefer-comparison-over-nullish-guard.mjs.map +1 -1
  54. package/dist/rules/prefer-is-non-null-object.mjs +91 -72
  55. package/dist/rules/prefer-is-non-null-object.mjs.map +1 -1
  56. package/dist/rules/prefer-is-record-and-has-key.mjs +148 -105
  57. package/dist/rules/prefer-is-record-and-has-key.mjs.map +1 -1
  58. package/dist/rules/prefer-num-safe-parse-float.mjs +101 -77
  59. package/dist/rules/prefer-num-safe-parse-float.mjs.map +1 -1
  60. package/dist/rules/prefer-num-safe-parse-int.mjs +103 -81
  61. package/dist/rules/prefer-num-safe-parse-int.mjs.map +1 -1
  62. package/dist/rules/prefer-obj-over-entries-round-trip.mjs +299 -194
  63. package/dist/rules/prefer-obj-over-entries-round-trip.mjs.map +1 -1
  64. package/dist/rules/prefer-range-for-loop.mjs +121 -99
  65. package/dist/rules/prefer-range-for-loop.mjs.map +1 -1
  66. package/dist/rules/rules.d.mts +1 -0
  67. package/dist/rules/rules.d.mts.map +1 -1
  68. package/dist/rules/rules.mjs +19 -20
  69. package/dist/rules/rules.mjs.map +1 -1
  70. package/dist/types.mjs +2 -2
  71. package/dist/types.mjs.map +1 -1
  72. package/package.json +6 -7
  73. package/src/plugin.mts +1 -0
  74. package/src/rule-types.mts +16 -0
  75. package/src/rules/prefer-arr-scan.mts +693 -0
  76. package/src/rules/prefer-arr-scan.test.mts +295 -0
  77. package/src/rules/rules.mts +2 -0
@@ -1,87 +1,96 @@
1
- import { AST_NODE_TYPES } from '@typescript-eslint/utils';
1
+ import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
2
2
  import { isIntegerLiteralOrConstant } from './ast-utils.mjs';
3
- import { getTsDataForgeImport, getNamedImports, buildImportFixes } from './import-utils.mjs';
4
-
5
- const preferArrIsFixedLengthArray = {
6
- meta: {
7
- type: "suggestion",
8
- docs: {
9
- description: "Replace `xs.length === n` with `Arr.isFixedLengthArray(xs, n)` from ts-data-forge."
3
+ import { buildImportFixes, getNamedImports, getTsDataForgeImport, } from './import-utils.mjs';
4
+ export const preferArrIsFixedLengthArray = {
5
+ meta: {
6
+ type: 'suggestion',
7
+ docs: {
8
+ description: 'Replace `xs.length === n` with `Arr.isFixedLengthArray(xs, n)` from ts-data-forge.',
9
+ },
10
+ fixable: 'code',
11
+ schema: [],
12
+ messages: {
13
+ useIsFixedLengthArray: 'Replace `{{original}}` with `Arr.isFixedLengthArray({{arrayName}}, {{length}})` from ts-data-forge.',
14
+ },
10
15
  },
11
- fixable: "code",
12
- schema: [],
13
- messages: {
14
- useIsFixedLengthArray: "Replace `{{original}}` with `Arr.isFixedLengthArray({{arrayName}}, {{length}})` from ts-data-forge."
15
- }
16
- },
17
- create: (context) => {
18
- const sourceCode = context.sourceCode;
19
- const program = sourceCode.ast;
20
- const tsDataForgeImport = getTsDataForgeImport(program);
21
- const services = context.sourceCode.parserServices;
22
- const mut_nodesToFix = [];
23
- return {
24
- BinaryExpression: (node) => {
25
- if (node.operator !== "===" && node.operator !== "!==") return;
26
- const isNegated = node.operator === "!==";
27
- const isLengthOnLeft = isLengthAccess(node.left);
28
- const lengthSide = node[isLengthOnLeft ? "left" : "right"];
29
- const valueSide = node[isLengthOnLeft ? "right" : "left"];
30
- if (!isLengthAccess(lengthSide)) return;
31
- if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) return;
32
- const arrayExpression = lengthSide.object;
33
- if (services?.program !== void 0 && services.program !== null) {
34
- const checker = services.program.getTypeChecker();
35
- const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);
36
- if (tsNode !== void 0) {
37
- const type = checker.getTypeAtLocation(tsNode);
38
- const isArrayType = checker.isArrayType(type) || checker.isTupleType(type);
39
- if (!isArrayType) return;
40
- } else {
41
- return;
42
- }
43
- } else {
44
- return;
45
- }
46
- mut_nodesToFix.push({
47
- node,
48
- arrayExpression,
49
- lengthExpression: valueSide,
50
- isNegated
51
- });
52
- },
53
- "Program:exit": () => {
54
- const namedImports = getNamedImports(tsDataForgeImport);
55
- const hasArrImport = namedImports.includes("Arr");
56
- for (const [
57
- index,
58
- { node, arrayExpression, lengthExpression, isNegated }
59
- ] of mut_nodesToFix.entries()) {
60
- const arrayText = sourceCode.getText(arrayExpression);
61
- const lengthText = sourceCode.getText(lengthExpression);
62
- const originalText = sourceCode.getText(node);
63
- context.report({
64
- node,
65
- messageId: "useIsFixedLengthArray",
66
- data: {
67
- original: originalText,
68
- arrayName: arrayText,
69
- length: lengthText
16
+ create: (context) => {
17
+ const sourceCode = context.sourceCode;
18
+ const program = sourceCode.ast;
19
+ const tsDataForgeImport = getTsDataForgeImport(program);
20
+ const services = context.sourceCode.parserServices;
21
+ const mut_nodesToFix = [];
22
+ return {
23
+ BinaryExpression: (node) => {
24
+
25
+ if (node.operator !== '===' && node.operator !== '!==')
26
+ return;
27
+ const isNegated = node.operator === '!==';
28
+ const isLengthOnLeft = isLengthAccess(node.left);
29
+ const lengthSide = node[isLengthOnLeft ? 'left' : 'right'];
30
+ const valueSide = node[isLengthOnLeft ? 'right' : 'left'];
31
+ if (!isLengthAccess(lengthSide))
32
+ return;
33
+
34
+ if (!isIntegerLiteralOrConstant(valueSide, sourceCode))
35
+ return;
36
+
37
+ const arrayExpression = lengthSide.object;
38
+
39
+ if (services?.program !== undefined && services.program !== null) {
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 {
54
+ return;
55
+ }
56
+ mut_nodesToFix.push({
57
+ node,
58
+ arrayExpression,
59
+ lengthExpression: valueSide,
60
+ isNegated,
61
+ });
62
+ },
63
+ 'Program:exit': () => {
64
+ const namedImports = getNamedImports(tsDataForgeImport);
65
+ const hasArrImport = namedImports.includes('Arr');
66
+ for (const [index, { node, arrayExpression, lengthExpression, isNegated },] of mut_nodesToFix.entries()) {
67
+ const arrayText = sourceCode.getText(arrayExpression);
68
+ const lengthText = sourceCode.getText(lengthExpression);
69
+ const originalText = sourceCode.getText(node);
70
+ context.report({
71
+ node,
72
+ messageId: 'useIsFixedLengthArray',
73
+ data: {
74
+ original: originalText,
75
+ arrayName: arrayText,
76
+ length: lengthText,
77
+ },
78
+ fix: (fixer) => {
79
+ const baseCall = `Arr.isFixedLengthArray(${lengthText}, ${arrayText})`;
80
+ const replacement = isNegated ? `!${baseCall}` : baseCall;
81
+ const importFixes = index === 0 && !hasArrImport
82
+ ? buildImportFixes(fixer, program, tsDataForgeImport, ['Arr'])
83
+ : [];
84
+ return [...importFixes, fixer.replaceText(node, replacement)];
85
+ },
86
+ });
87
+ }
70
88
  },
71
- fix: (fixer) => {
72
- const baseCall = `Arr.isFixedLengthArray(${lengthText}, ${arrayText})`;
73
- const replacement = isNegated ? `!${baseCall}` : baseCall;
74
- const importFixes = index === 0 && !hasArrImport ? buildImportFixes(fixer, program, tsDataForgeImport, ["Arr"]) : [];
75
- return [...importFixes, fixer.replaceText(node, replacement)];
76
- }
77
- });
78
- }
79
- }
80
- };
81
- },
82
- defaultOptions: []
89
+ };
90
+ },
91
+ defaultOptions: [],
83
92
  };
84
- const isLengthAccess = (node) => node.type === AST_NODE_TYPES.MemberExpression && node.property.type === AST_NODE_TYPES.Identifier && node.property.name === "length";
85
-
86
- export { preferArrIsFixedLengthArray };
87
- //# sourceMappingURL=prefer-arr-is-fixed-length-array.mjs.map
93
+ const isLengthAccess = (node) => node.type === AST_NODE_TYPES.MemberExpression &&
94
+ node.property.type === AST_NODE_TYPES.Identifier &&
95
+ node.property.name === 'length';
96
+ //# sourceMappingURL=prefer-arr-is-fixed-length-array.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-arr-is-fixed-length-array.mjs","sources":["../../src/rules/prefer-arr-is-fixed-length-array.mts"],"sourcesContent":["import {\n AST_NODE_TYPES,\n type TSESLint,\n type TSESTree,\n} from '@typescript-eslint/utils';\nimport { type DeepReadonly } from 'ts-type-forge';\nimport { isIntegerLiteralOrConstant } from './ast-utils.mjs';\nimport {\n buildImportFixes,\n getNamedImports,\n getTsDataForgeImport,\n} from './import-utils.mjs';\n\ntype Options = readonly [];\n\ntype MessageIds = 'useIsFixedLengthArray';\n\nexport const preferArrIsFixedLengthArray: TSESLint.RuleModule<\n MessageIds,\n Options\n> = {\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Replace `xs.length === n` with `Arr.isFixedLengthArray(xs, n)` from ts-data-forge.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n useIsFixedLengthArray:\n 'Replace `{{original}}` with `Arr.isFixedLengthArray({{arrayName}}, {{length}})` from ts-data-forge.',\n },\n },\n\n create: (context) => {\n const sourceCode = context.sourceCode;\n\n const program = sourceCode.ast;\n\n const tsDataForgeImport = getTsDataForgeImport(program);\n\n const services = context.sourceCode.parserServices;\n\n const mut_nodesToFix: {\n node: TSESTree.BinaryExpression;\n arrayExpression: TSESTree.Expression;\n lengthExpression: TSESTree.Expression;\n isNegated: boolean;\n }[] = [];\n\n return {\n BinaryExpression: (node) => {\n // Check for `xs.length === n` or `n === xs.length` or `xs.length !== n`\n if (node.operator !== '===' && node.operator !== '!==') return;\n\n const isNegated = node.operator === '!==';\n\n const isLengthOnLeft = isLengthAccess(node.left);\n\n const lengthSide = node[isLengthOnLeft ? 'left' : 'right'];\n\n const valueSide = node[isLengthOnLeft ? 'right' : 'left'];\n\n if (!isLengthAccess(lengthSide)) return;\n\n // Only match integer literals or const variables initialized with integer literals\n if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) return;\n\n // lengthSide is MemberExpression accessing .length\n const arrayExpression = lengthSide.object;\n\n // Check if arrayExpression is actually an array type\n if (services?.program !== undefined && services.program !== null) {\n const checker = services.program.getTypeChecker();\n\n const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);\n\n if (tsNode !== undefined) {\n const type = checker.getTypeAtLocation(tsNode);\n\n // Check if it's an array type or tuple type\n const isArrayType =\n checker.isArrayType(type) || checker.isTupleType(type);\n\n if (!isArrayType) return;\n } else {\n return;\n }\n } else {\n return;\n }\n\n mut_nodesToFix.push({\n node,\n arrayExpression,\n lengthExpression: valueSide,\n isNegated,\n });\n },\n 'Program:exit': () => {\n const namedImports = getNamedImports(tsDataForgeImport);\n\n const hasArrImport = namedImports.includes('Arr');\n\n for (const [\n index,\n { node, arrayExpression, lengthExpression, isNegated },\n ] of mut_nodesToFix.entries()) {\n const arrayText = sourceCode.getText(arrayExpression);\n\n const lengthText = sourceCode.getText(lengthExpression);\n\n const originalText = sourceCode.getText(node);\n\n context.report({\n node,\n messageId: 'useIsFixedLengthArray',\n data: {\n original: originalText,\n arrayName: arrayText,\n length: lengthText,\n },\n fix: (fixer) => {\n const baseCall = `Arr.isFixedLengthArray(${lengthText}, ${arrayText})`;\n\n const replacement = isNegated ? `!${baseCall}` : baseCall;\n\n const importFixes =\n index === 0 && !hasArrImport\n ? buildImportFixes(fixer, program, tsDataForgeImport, ['Arr'])\n : [];\n\n return [...importFixes, fixer.replaceText(node, replacement)];\n },\n });\n }\n },\n };\n },\n defaultOptions: [],\n} as const;\n\nconst isLengthAccess = (\n node: DeepReadonly<TSESTree.Expression>,\n): node is TSESTree.MemberExpression =>\n node.type === AST_NODE_TYPES.MemberExpression &&\n node.property.type === AST_NODE_TYPES.Identifier &&\n node.property.name === 'length';\n"],"names":[],"mappings":"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"}
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,83 +1,95 @@
1
- import { isPartOfBoundedLengthCheck, isLengthAccess, isIntegerLiteralOrConstant } from './ast-utils.mjs';
2
- import { getTsDataForgeImport, getNamedImports, buildImportFixes } from './import-utils.mjs';
3
-
4
- const preferArrIsMaxLengthArray = {
5
- meta: {
6
- type: "suggestion",
7
- docs: {
8
- description: "Replace `xs.length <= n` with `Arr.isMaxLengthArray(xs, n)` from ts-data-forge."
1
+ import { isIntegerLiteralOrConstant, isLengthAccess, isPartOfBoundedLengthCheck, } from './ast-utils.mjs';
2
+ import { buildImportFixes, getNamedImports, getTsDataForgeImport, } from './import-utils.mjs';
3
+ export const preferArrIsMaxLengthArray = {
4
+ meta: {
5
+ type: 'suggestion',
6
+ docs: {
7
+ description: 'Replace `xs.length <= n` with `Arr.isMaxLengthArray(xs, n)` from ts-data-forge.',
8
+ },
9
+ fixable: 'code',
10
+ schema: [],
11
+ messages: {
12
+ useIsMaxLengthArray: 'Replace `{{original}}` with `Arr.isMaxLengthArray({{arrayName}}, {{length}})` from ts-data-forge.',
13
+ },
9
14
  },
10
- fixable: "code",
11
- schema: [],
12
- messages: {
13
- useIsMaxLengthArray: "Replace `{{original}}` with `Arr.isMaxLengthArray({{arrayName}}, {{length}})` from ts-data-forge."
14
- }
15
- },
16
- create: (context) => {
17
- const sourceCode = context.sourceCode;
18
- const program = sourceCode.ast;
19
- const tsDataForgeImport = getTsDataForgeImport(program);
20
- const services = context.sourceCode.parserServices;
21
- const mut_nodesToFix = [];
22
- return {
23
- BinaryExpression: (node) => {
24
- if (node.operator !== ">=" && node.operator !== "<=") return;
25
- if (isPartOfBoundedLengthCheck(node, sourceCode)) return;
26
- const isLengthOnLeft = node.operator === "<=";
27
- const lengthSide = node[isLengthOnLeft ? "left" : "right"];
28
- const valueSide = node[isLengthOnLeft ? "right" : "left"];
29
- if (!isLengthAccess(lengthSide)) return;
30
- if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) return;
31
- const arrayExpression = lengthSide.object;
32
- if (services?.program !== void 0 && services.program !== null) {
33
- const checker = services.program.getTypeChecker();
34
- const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);
35
- if (tsNode !== void 0) {
36
- const type = checker.getTypeAtLocation(tsNode);
37
- const isArrayType = checker.isArrayType(type) || checker.isTupleType(type);
38
- if (!isArrayType) return;
39
- } else {
40
- return;
41
- }
42
- } else {
43
- return;
44
- }
45
- mut_nodesToFix.push({
46
- node,
47
- arrayExpression,
48
- lengthExpression: valueSide
49
- });
50
- },
51
- "Program:exit": () => {
52
- const namedImports = getNamedImports(tsDataForgeImport);
53
- const hasArrImport = namedImports.includes("Arr");
54
- for (const [
55
- index,
56
- { node, arrayExpression, lengthExpression }
57
- ] of mut_nodesToFix.entries()) {
58
- const arrayText = sourceCode.getText(arrayExpression);
59
- const lengthText = sourceCode.getText(lengthExpression);
60
- const originalText = sourceCode.getText(node);
61
- context.report({
62
- node,
63
- messageId: "useIsMaxLengthArray",
64
- data: {
65
- original: originalText,
66
- arrayName: arrayText,
67
- length: lengthText
15
+ create: (context) => {
16
+ const sourceCode = context.sourceCode;
17
+ const program = sourceCode.ast;
18
+ const tsDataForgeImport = getTsDataForgeImport(program);
19
+ const services = context.sourceCode.parserServices;
20
+ const mut_nodesToFix = [];
21
+ return {
22
+ BinaryExpression: (node) => {
23
+
24
+ if (node.operator !== '>=' && node.operator !== '<=')
25
+ return;
26
+
27
+
28
+ if (isPartOfBoundedLengthCheck(node, sourceCode))
29
+ return;
30
+
31
+ const isLengthOnLeft = node.operator === '<=';
32
+ const lengthSide = node[isLengthOnLeft ? 'left' : 'right'];
33
+ const valueSide = node[isLengthOnLeft ? 'right' : 'left'];
34
+
35
+ if (!isLengthAccess(lengthSide))
36
+ return;
37
+
38
+ if (!isIntegerLiteralOrConstant(valueSide, sourceCode))
39
+ return;
40
+
41
+ const arrayExpression = lengthSide.object;
42
+
43
+ if (services?.program !== undefined && services.program !== null) {
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 {
58
+ return;
59
+ }
60
+ mut_nodesToFix.push({
61
+ node,
62
+ arrayExpression,
63
+ lengthExpression: valueSide,
64
+ });
68
65
  },
69
- fix: (fixer) => {
70
- const replacement = `Arr.isMaxLengthArray(${lengthText}, ${arrayText})`;
71
- const importFixes = index === 0 && !hasArrImport ? buildImportFixes(fixer, program, tsDataForgeImport, ["Arr"]) : [];
72
- return [...importFixes, fixer.replaceText(node, replacement)];
73
- }
74
- });
75
- }
76
- }
77
- };
78
- },
79
- defaultOptions: []
66
+ 'Program:exit': () => {
67
+ const namedImports = getNamedImports(tsDataForgeImport);
68
+ const hasArrImport = namedImports.includes('Arr');
69
+ for (const [index, { node, arrayExpression, lengthExpression },] of mut_nodesToFix.entries()) {
70
+ const arrayText = sourceCode.getText(arrayExpression);
71
+ const lengthText = sourceCode.getText(lengthExpression);
72
+ const originalText = sourceCode.getText(node);
73
+ context.report({
74
+ node,
75
+ messageId: 'useIsMaxLengthArray',
76
+ data: {
77
+ original: originalText,
78
+ arrayName: arrayText,
79
+ length: lengthText,
80
+ },
81
+ fix: (fixer) => {
82
+ const replacement = `Arr.isMaxLengthArray(${lengthText}, ${arrayText})`;
83
+ const importFixes = index === 0 && !hasArrImport
84
+ ? buildImportFixes(fixer, program, tsDataForgeImport, ['Arr'])
85
+ : [];
86
+ return [...importFixes, fixer.replaceText(node, replacement)];
87
+ },
88
+ });
89
+ }
90
+ },
91
+ };
92
+ },
93
+ defaultOptions: [],
80
94
  };
81
-
82
- export { preferArrIsMaxLengthArray };
83
- //# sourceMappingURL=prefer-arr-is-max-length-array.mjs.map
95
+ //# sourceMappingURL=prefer-arr-is-max-length-array.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-arr-is-max-length-array.mjs","sources":["../../src/rules/prefer-arr-is-max-length-array.mts"],"sourcesContent":["import { type TSESLint, type TSESTree } from '@typescript-eslint/utils';\nimport {\n isIntegerLiteralOrConstant,\n isLengthAccess,\n isPartOfBoundedLengthCheck,\n} from './ast-utils.mjs';\nimport {\n buildImportFixes,\n getNamedImports,\n getTsDataForgeImport,\n} from './import-utils.mjs';\n\ntype Options = readonly [];\n\ntype MessageIds = 'useIsMaxLengthArray';\n\nexport const preferArrIsMaxLengthArray: TSESLint.RuleModule<\n MessageIds,\n Options\n> = {\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Replace `xs.length <= n` with `Arr.isMaxLengthArray(xs, n)` from ts-data-forge.',\n },\n fixable: 'code',\n schema: [],\n messages: {\n useIsMaxLengthArray:\n 'Replace `{{original}}` with `Arr.isMaxLengthArray({{arrayName}}, {{length}})` from ts-data-forge.',\n },\n },\n\n create: (context) => {\n const sourceCode = context.sourceCode;\n\n const program = sourceCode.ast;\n\n const tsDataForgeImport = getTsDataForgeImport(program);\n\n const services = context.sourceCode.parserServices;\n\n const mut_nodesToFix: {\n node: TSESTree.BinaryExpression;\n arrayExpression: TSESTree.Expression;\n lengthExpression: TSESTree.Expression;\n }[] = [];\n\n return {\n BinaryExpression: (node) => {\n // Check for `xs.length <= n` or `n >= xs.length`\n if (node.operator !== '>=' && node.operator !== '<=') return;\n\n // Defer to `prefer-arr-is-bounded-length-array` when this comparison is\n // the upper bound of a `min && max` pair on the same array.\n if (isPartOfBoundedLengthCheck(node, sourceCode)) return;\n\n // xs.length <= n or n >= xs.length\n const isLengthOnLeft = node.operator === '<=';\n\n const lengthSide = node[isLengthOnLeft ? 'left' : 'right'];\n\n const valueSide = node[isLengthOnLeft ? 'right' : 'left'];\n\n // Check if lengthSide is accessing .length\n if (!isLengthAccess(lengthSide)) return;\n\n // Only match integer literals or const variables initialized with integer literals\n if (!isIntegerLiteralOrConstant(valueSide, sourceCode)) return;\n\n // lengthSide is MemberExpression accessing .length\n const arrayExpression = lengthSide.object;\n\n // Check if arrayExpression is actually an array type\n if (services?.program !== undefined && services.program !== null) {\n const checker = services.program.getTypeChecker();\n\n const tsNode = services.esTreeNodeToTSNodeMap?.get(arrayExpression);\n\n if (tsNode !== undefined) {\n const type = checker.getTypeAtLocation(tsNode);\n\n // Check if it's an array type or tuple type\n const isArrayType =\n checker.isArrayType(type) || checker.isTupleType(type);\n\n if (!isArrayType) return;\n } else {\n return;\n }\n } else {\n return;\n }\n\n mut_nodesToFix.push({\n node,\n arrayExpression,\n lengthExpression: valueSide,\n });\n },\n 'Program:exit': () => {\n const namedImports = getNamedImports(tsDataForgeImport);\n\n const hasArrImport = namedImports.includes('Arr');\n\n for (const [\n index,\n { node, arrayExpression, lengthExpression },\n ] of mut_nodesToFix.entries()) {\n const arrayText = sourceCode.getText(arrayExpression);\n\n const lengthText = sourceCode.getText(lengthExpression);\n\n const originalText = sourceCode.getText(node);\n\n context.report({\n node,\n messageId: 'useIsMaxLengthArray',\n data: {\n original: originalText,\n arrayName: arrayText,\n length: lengthText,\n },\n fix: (fixer) => {\n const replacement = `Arr.isMaxLengthArray(${lengthText}, ${arrayText})`;\n\n const importFixes =\n index === 0 && !hasArrImport\n ? buildImportFixes(fixer, program, tsDataForgeImport, ['Arr'])\n : [];\n\n return [...importFixes, fixer.replaceText(node, replacement)];\n },\n });\n }\n },\n };\n },\n defaultOptions: [],\n} as const;\n"],"names":[],"mappings":"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"}
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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"}