eslint-plugin-ts-data-forge 0.8.0 → 0.8.2

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 (95) hide show
  1. package/dist/rules/ast-utils.d.mts.map +1 -1
  2. package/dist/rules/ast-utils.mjs +24 -24
  3. package/dist/rules/ast-utils.mjs.map +1 -1
  4. package/dist/rules/branded-number-types.mjs.map +1 -1
  5. package/dist/rules/import-utils.d.mts.map +1 -1
  6. package/dist/rules/import-utils.mjs +4 -2
  7. package/dist/rules/import-utils.mjs.map +1 -1
  8. package/dist/rules/no-unnecessary-type-guard.d.mts.map +1 -1
  9. package/dist/rules/no-unnecessary-type-guard.mjs +37 -23
  10. package/dist/rules/no-unnecessary-type-guard.mjs.map +1 -1
  11. package/dist/rules/prefer-arr-is-array.d.mts.map +1 -1
  12. package/dist/rules/prefer-arr-is-array.mjs +14 -7
  13. package/dist/rules/prefer-arr-is-array.mjs.map +1 -1
  14. package/dist/rules/prefer-arr-is-bounded-length-array.d.mts.map +1 -1
  15. package/dist/rules/prefer-arr-is-bounded-length-array.mjs +8 -4
  16. package/dist/rules/prefer-arr-is-bounded-length-array.mjs.map +1 -1
  17. package/dist/rules/prefer-arr-is-fixed-length-array.d.mts.map +1 -1
  18. package/dist/rules/prefer-arr-is-fixed-length-array.mjs +8 -4
  19. package/dist/rules/prefer-arr-is-fixed-length-array.mjs.map +1 -1
  20. package/dist/rules/prefer-arr-is-max-length-array.d.mts.map +1 -1
  21. package/dist/rules/prefer-arr-is-max-length-array.mjs +10 -5
  22. package/dist/rules/prefer-arr-is-max-length-array.mjs.map +1 -1
  23. package/dist/rules/prefer-arr-is-min-length-array.d.mts.map +1 -1
  24. package/dist/rules/prefer-arr-is-min-length-array.mjs +10 -5
  25. package/dist/rules/prefer-arr-is-min-length-array.mjs.map +1 -1
  26. package/dist/rules/prefer-arr-is-non-empty.d.mts.map +1 -1
  27. package/dist/rules/prefer-arr-is-non-empty.mjs +4 -2
  28. package/dist/rules/prefer-arr-is-non-empty.mjs.map +1 -1
  29. package/dist/rules/prefer-arr-scan.d.mts.map +1 -1
  30. package/dist/rules/prefer-arr-scan.mjs +35 -18
  31. package/dist/rules/prefer-arr-scan.mjs.map +1 -1
  32. package/dist/rules/prefer-arr-sum.d.mts.map +1 -1
  33. package/dist/rules/prefer-arr-sum.mjs +6 -3
  34. package/dist/rules/prefer-arr-sum.mjs.map +1 -1
  35. package/dist/rules/prefer-arr-uniq.d.mts.map +1 -1
  36. package/dist/rules/prefer-arr-uniq.mjs +30 -24
  37. package/dist/rules/prefer-arr-uniq.mjs.map +1 -1
  38. package/dist/rules/prefer-as-int.d.mts.map +1 -1
  39. package/dist/rules/prefer-as-int.mjs +11 -14
  40. package/dist/rules/prefer-as-int.mjs.map +1 -1
  41. package/dist/rules/prefer-canonical-array-slicing.d.mts.map +1 -1
  42. package/dist/rules/prefer-canonical-array-slicing.mjs +32 -16
  43. package/dist/rules/prefer-canonical-array-slicing.mjs.map +1 -1
  44. package/dist/rules/prefer-canonical-length-cast.d.mts.map +1 -1
  45. package/dist/rules/prefer-canonical-length-cast.mjs +11 -7
  46. package/dist/rules/prefer-canonical-length-cast.mjs.map +1 -1
  47. package/dist/rules/prefer-canonical-length-guard.d.mts.map +1 -1
  48. package/dist/rules/prefer-canonical-length-guard.mjs +8 -4
  49. package/dist/rules/prefer-canonical-length-guard.mjs.map +1 -1
  50. package/dist/rules/prefer-comparison-over-nullish-guard.d.mts.map +1 -1
  51. package/dist/rules/prefer-comparison-over-nullish-guard.mjs +6 -3
  52. package/dist/rules/prefer-comparison-over-nullish-guard.mjs.map +1 -1
  53. package/dist/rules/prefer-is-non-null-object.d.mts.map +1 -1
  54. package/dist/rules/prefer-is-non-null-object.mjs +29 -31
  55. package/dist/rules/prefer-is-non-null-object.mjs.map +1 -1
  56. package/dist/rules/prefer-is-record-and-has-key.d.mts.map +1 -1
  57. package/dist/rules/prefer-is-record-and-has-key.mjs +10 -5
  58. package/dist/rules/prefer-is-record-and-has-key.mjs.map +1 -1
  59. package/dist/rules/prefer-num-safe-parse-float.d.mts.map +1 -1
  60. package/dist/rules/prefer-num-safe-parse-float.mjs +12 -6
  61. package/dist/rules/prefer-num-safe-parse-float.mjs.map +1 -1
  62. package/dist/rules/prefer-num-safe-parse-int.d.mts.map +1 -1
  63. package/dist/rules/prefer-num-safe-parse-int.mjs +12 -6
  64. package/dist/rules/prefer-num-safe-parse-int.mjs.map +1 -1
  65. package/dist/rules/prefer-obj-over-entries-round-trip.d.mts.map +1 -1
  66. package/dist/rules/prefer-obj-over-entries-round-trip.mjs +22 -11
  67. package/dist/rules/prefer-obj-over-entries-round-trip.mjs.map +1 -1
  68. package/dist/rules/prefer-range-for-loop.d.mts.map +1 -1
  69. package/dist/rules/prefer-range-for-loop.mjs +2 -1
  70. package/dist/rules/prefer-range-for-loop.mjs.map +1 -1
  71. package/package.json +25 -24
  72. package/src/rules/ast-utils.mts +38 -26
  73. package/src/rules/branded-number-types.mts +1 -1
  74. package/src/rules/import-utils.mts +6 -2
  75. package/src/rules/no-unnecessary-type-guard.mts +56 -23
  76. package/src/rules/prefer-arr-is-array.mts +21 -7
  77. package/src/rules/prefer-arr-is-bounded-length-array.mts +12 -4
  78. package/src/rules/prefer-arr-is-fixed-length-array.mts +12 -4
  79. package/src/rules/prefer-arr-is-max-length-array.mts +15 -5
  80. package/src/rules/prefer-arr-is-min-length-array.mts +15 -5
  81. package/src/rules/prefer-arr-is-non-empty.mts +6 -2
  82. package/src/rules/prefer-arr-scan.mts +52 -18
  83. package/src/rules/prefer-arr-sum.mts +9 -3
  84. package/src/rules/prefer-arr-uniq.mts +42 -26
  85. package/src/rules/prefer-as-int.mts +17 -25
  86. package/src/rules/prefer-canonical-array-slicing.mts +48 -16
  87. package/src/rules/prefer-canonical-length-cast.mts +15 -7
  88. package/src/rules/prefer-canonical-length-guard.mts +12 -4
  89. package/src/rules/prefer-comparison-over-nullish-guard.mts +9 -3
  90. package/src/rules/prefer-is-non-null-object.mts +35 -31
  91. package/src/rules/prefer-is-record-and-has-key.mts +15 -5
  92. package/src/rules/prefer-num-safe-parse-float.mts +17 -6
  93. package/src/rules/prefer-num-safe-parse-int.mts +18 -6
  94. package/src/rules/prefer-obj-over-entries-round-trip.mts +33 -11
  95. package/src/rules/prefer-range-for-loop.mts +3 -1
@@ -91,32 +91,43 @@ export const preferNumSafeParseFloat: TSESLint.RuleModule<MessageIds, Options> =
91
91
  callee.type === AST_NODE_TYPES.Identifier &&
92
92
  callee.name === 'Number';
93
93
 
94
- if (!isGlobalParseFloat && !isNumberParseFloat && !isNumberCall)
94
+ if (!isGlobalParseFloat && !isNumberParseFloat && !isNumberCall) {
95
95
  return;
96
+ }
96
97
 
97
98
  const args = node.arguments;
98
99
 
99
100
  const firstArg = args[0];
100
101
 
101
- if (firstArg === undefined) return;
102
+ if (firstArg === undefined) {
103
+ return;
104
+ }
102
105
 
103
106
  // Spread argument (`parseFloat(...rest)`) cannot be rewritten safely.
104
- if (firstArg.type === AST_NODE_TYPES.SpreadElement) return;
107
+ if (firstArg.type === AST_NODE_TYPES.SpreadElement) {
108
+ return;
109
+ }
105
110
 
106
111
  // The argument must be purely `string` so the autofix is type-safe
107
112
  // against `Num.safeParseFloat(s: string)`. Without type information,
108
113
  // skip.
109
- if (services?.program == null) return;
114
+ if (services?.program == null) {
115
+ return;
116
+ }
110
117
 
111
118
  const checker = services.program.getTypeChecker();
112
119
 
113
120
  const tsNode = services.esTreeNodeToTSNodeMap?.get(firstArg);
114
121
 
115
- if (tsNode === undefined) return;
122
+ if (tsNode === undefined) {
123
+ return;
124
+ }
116
125
 
117
126
  const argType = checker.getTypeAtLocation(tsNode);
118
127
 
119
- if (!isStringType(argType)) return;
128
+ if (!isStringType(argType)) {
129
+ return;
130
+ }
120
131
 
121
132
  mut_nodesToFix.push({ node, argExpression: firstArg });
122
133
  },
@@ -84,16 +84,22 @@ export const preferNumSafeParseInt: TSESLint.RuleModule<MessageIds, Options> = {
84
84
  callee.property.type === AST_NODE_TYPES.Identifier &&
85
85
  callee.property.name === 'parseInt';
86
86
 
87
- if (!isGlobalParseInt && !isNumberParseInt) return;
87
+ if (!isGlobalParseInt && !isNumberParseInt) {
88
+ return;
89
+ }
88
90
 
89
91
  const args = node.arguments;
90
92
 
91
93
  const firstArg = args[0];
92
94
 
93
- if (firstArg === undefined) return;
95
+ if (firstArg === undefined) {
96
+ return;
97
+ }
94
98
 
95
99
  // Spread argument (`parseInt(...rest)`) cannot be rewritten safely.
96
- if (firstArg.type === AST_NODE_TYPES.SpreadElement) return;
100
+ if (firstArg.type === AST_NODE_TYPES.SpreadElement) {
101
+ return;
102
+ }
97
103
 
98
104
  // Only base 10: accept a missing radix or an explicit literal `10`.
99
105
  if (args.length >= 2) {
@@ -106,17 +112,23 @@ export const preferNumSafeParseInt: TSESLint.RuleModule<MessageIds, Options> = {
106
112
 
107
113
  // The argument must be a `string` so the autofix is type-safe against
108
114
  // `Num.safeParseInt(s: string)`. Without type information, skip.
109
- if (services?.program == null) return;
115
+ if (services?.program == null) {
116
+ return;
117
+ }
110
118
 
111
119
  const checker = services.program.getTypeChecker();
112
120
 
113
121
  const tsNode = services.esTreeNodeToTSNodeMap?.get(firstArg);
114
122
 
115
- if (tsNode === undefined) return;
123
+ if (tsNode === undefined) {
124
+ return;
125
+ }
116
126
 
117
127
  const argType = checker.getTypeAtLocation(tsNode);
118
128
 
119
- if (!isStringType(argType)) return;
129
+ if (!isStringType(argType)) {
130
+ return;
131
+ }
120
132
 
121
133
  mut_nodesToFix.push({ node, argExpression: firstArg });
122
134
  },
@@ -159,7 +159,9 @@ export const preferObjOverEntriesRoundTrip: TSESLint.RuleModule<
159
159
  CallExpression: (node) => {
160
160
  const roundTrip = parseEntriesRoundTrip(node);
161
161
 
162
- if (roundTrip === undefined) return;
162
+ if (roundTrip === undefined) {
163
+ return;
164
+ }
163
165
 
164
166
  mut_roundTrips.push({ node, roundTrip });
165
167
  },
@@ -225,13 +227,19 @@ export const preferObjOverEntriesRoundTrip: TSESLint.RuleModule<
225
227
  const parseEntriesRoundTrip = (
226
228
  node: TSESTree.CallExpression,
227
229
  ): RoundTrip | undefined => {
228
- if (!isObjectStaticCall(node, 'fromEntries')) return undefined;
230
+ if (!isObjectStaticCall(node, 'fromEntries')) {
231
+ return undefined;
232
+ }
229
233
 
230
- if (!Arr.isFixedLengthTuple(1, node.arguments)) return undefined;
234
+ if (!Arr.isFixedLengthTuple(1, node.arguments)) {
235
+ return undefined;
236
+ }
231
237
 
232
238
  const [transform] = node.arguments;
233
239
 
234
- if (transform.type !== AST_NODE_TYPES.CallExpression) return undefined;
240
+ if (transform.type !== AST_NODE_TYPES.CallExpression) {
241
+ return undefined;
242
+ }
235
243
 
236
244
  const { callee } = transform;
237
245
 
@@ -265,11 +273,15 @@ const parseEntriesRoundTrip = (
265
273
 
266
274
  const [record] = entriesCall.arguments;
267
275
 
268
- if (record.type === AST_NODE_TYPES.SpreadElement) return undefined;
276
+ if (record.type === AST_NODE_TYPES.SpreadElement) {
277
+ return undefined;
278
+ }
269
279
 
270
280
  // A second argument (`thisArg`) or a callback that also takes the entry index
271
281
  // has no counterpart in `Obj`.
272
- if (!Arr.isFixedLengthTuple(1, transform.arguments)) return undefined;
282
+ if (!Arr.isFixedLengthTuple(1, transform.arguments)) {
283
+ return undefined;
284
+ }
273
285
 
274
286
  const [callback] = transform.arguments;
275
287
 
@@ -287,11 +299,15 @@ const parseEntriesRoundTrip = (
287
299
 
288
300
  const [entryPattern] = callback.params;
289
301
 
290
- if (entryPattern.type !== AST_NODE_TYPES.ArrayPattern) return undefined;
302
+ if (entryPattern.type !== AST_NODE_TYPES.ArrayPattern) {
303
+ return undefined;
304
+ }
291
305
 
292
306
  const entryParams = parseEntryPattern(entryPattern);
293
307
 
294
- if (entryParams === undefined) return undefined;
308
+ if (entryParams === undefined) {
309
+ return undefined;
310
+ }
295
311
 
296
312
  const body = callback.body;
297
313
 
@@ -320,7 +336,9 @@ const parseEntriesRoundTrip = (
320
336
  }
321
337
 
322
338
  case 'flatMap': {
323
- if (body.type !== AST_NODE_TYPES.ConditionalExpression) return undefined;
339
+ if (body.type !== AST_NODE_TYPES.ConditionalExpression) {
340
+ return undefined;
341
+ }
324
342
 
325
343
  const onTrue = parseSingletonEntry(body.consequent, entryParams.keyParam);
326
344
 
@@ -365,7 +383,9 @@ type EntryParams = Readonly<{
365
383
  const parseEntryPattern = (
366
384
  pattern: TSESTree.ArrayPattern,
367
385
  ): EntryParams | undefined => {
368
- if (pattern.elements.length > 2) return undefined;
386
+ if (pattern.elements.length > 2) {
387
+ return undefined;
388
+ }
369
389
 
370
390
  const [keyElement, valueElement] = pattern.elements;
371
391
 
@@ -399,7 +419,9 @@ const parseKeptEntry = (
399
419
  node: TSESTree.Expression,
400
420
  keyParam: TSESTree.Identifier | undefined,
401
421
  ): KeptEntry | undefined => {
402
- if (keyParam === undefined) return undefined;
422
+ if (keyParam === undefined) {
423
+ return undefined;
424
+ }
403
425
 
404
426
  const tuple = stripTypeWrappers(node);
405
427
 
@@ -81,7 +81,9 @@ export const preferRangeForLoop: TSESLint.RuleModule<MessageIds, Options> = {
81
81
  const endExpr = node.test.right;
82
82
 
83
83
  // Check update: ++i, i++, i += 1, or i += step
84
- if (node.update === null) return;
84
+ if (node.update === null) {
85
+ return;
86
+ }
85
87
 
86
88
  let mut_step: string | undefined;
87
89