@typescript-eslint/eslint-plugin 8.67.1-alpha.8 → 8.68.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 (242) hide show
  1. package/CHANGELOG.md +5906 -0
  2. package/dist/configs/eslint-recommended-raw.js +1 -0
  3. package/dist/configs/eslintrc/all.js +1 -0
  4. package/dist/configs/eslintrc/base.js +1 -0
  5. package/dist/configs/eslintrc/disable-type-checked.js +1 -0
  6. package/dist/configs/eslintrc/eslint-recommended.js +1 -0
  7. package/dist/configs/eslintrc/recommended-type-checked-only.js +1 -0
  8. package/dist/configs/eslintrc/recommended-type-checked.js +1 -0
  9. package/dist/configs/eslintrc/recommended.js +1 -0
  10. package/dist/configs/eslintrc/strict-type-checked-only.js +1 -0
  11. package/dist/configs/eslintrc/strict-type-checked.js +1 -0
  12. package/dist/configs/eslintrc/strict.js +1 -0
  13. package/dist/configs/eslintrc/stylistic-type-checked-only.js +1 -0
  14. package/dist/configs/eslintrc/stylistic-type-checked.js +1 -0
  15. package/dist/configs/eslintrc/stylistic.js +1 -0
  16. package/dist/configs/flat/all.js +1 -0
  17. package/dist/configs/flat/base.js +1 -0
  18. package/dist/configs/flat/disable-type-checked.js +1 -0
  19. package/dist/configs/flat/eslint-recommended.js +1 -0
  20. package/dist/configs/flat/recommended-type-checked-only.js +1 -0
  21. package/dist/configs/flat/recommended-type-checked.js +1 -0
  22. package/dist/configs/flat/recommended.js +1 -0
  23. package/dist/configs/flat/strict-type-checked-only.js +1 -0
  24. package/dist/configs/flat/strict-type-checked.js +1 -0
  25. package/dist/configs/flat/strict.js +1 -0
  26. package/dist/configs/flat/stylistic-type-checked-only.js +1 -0
  27. package/dist/configs/flat/stylistic-type-checked.js +1 -0
  28. package/dist/configs/flat/stylistic.js +1 -0
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +1 -0
  31. package/dist/raw-plugin.d.ts +1 -1
  32. package/dist/raw-plugin.js +1 -0
  33. package/dist/rules/adjacent-overload-signatures.js +1 -0
  34. package/dist/rules/array-type.js +1 -0
  35. package/dist/rules/await-thenable.js +1 -0
  36. package/dist/rules/ban-ts-comment.js +1 -0
  37. package/dist/rules/ban-tslint-comment.js +1 -0
  38. package/dist/rules/class-literal-property-style.js +1 -0
  39. package/dist/rules/class-methods-use-this.js +1 -0
  40. package/dist/rules/consistent-generic-constructors.js +1 -0
  41. package/dist/rules/consistent-indexed-object-style.js +1 -0
  42. package/dist/rules/consistent-return.js +1 -0
  43. package/dist/rules/consistent-type-assertions.js +1 -0
  44. package/dist/rules/consistent-type-definitions.js +1 -0
  45. package/dist/rules/consistent-type-exports.js +1 -0
  46. package/dist/rules/consistent-type-imports.js +1 -0
  47. package/dist/rules/default-param-last.js +1 -0
  48. package/dist/rules/dot-notation.js +1 -0
  49. package/dist/rules/enum-utils/shared.d.ts +5 -0
  50. package/dist/rules/enum-utils/shared.js +68 -0
  51. package/dist/rules/explicit-function-return-type.js +1 -0
  52. package/dist/rules/explicit-member-accessibility.js +1 -0
  53. package/dist/rules/explicit-module-boundary-types.js +1 -0
  54. package/dist/rules/index.d.ts +1 -1
  55. package/dist/rules/index.js +1 -0
  56. package/dist/rules/init-declarations.js +1 -0
  57. package/dist/rules/max-params.js +1 -0
  58. package/dist/rules/member-ordering.js +1 -0
  59. package/dist/rules/method-signature-style.js +1 -0
  60. package/dist/rules/naming-convention-utils/enums.js +1 -0
  61. package/dist/rules/naming-convention-utils/format.js +1 -0
  62. package/dist/rules/naming-convention-utils/index.js +1 -0
  63. package/dist/rules/naming-convention-utils/parse-options.js +1 -0
  64. package/dist/rules/naming-convention-utils/schema.js +1 -0
  65. package/dist/rules/naming-convention-utils/shared.js +1 -0
  66. package/dist/rules/naming-convention-utils/types.js +1 -0
  67. package/dist/rules/naming-convention-utils/validator.js +1 -0
  68. package/dist/rules/naming-convention.js +1 -0
  69. package/dist/rules/no-array-constructor.js +1 -0
  70. package/dist/rules/no-array-delete.js +1 -0
  71. package/dist/rules/no-base-to-string.js +1 -0
  72. package/dist/rules/no-confusing-non-null-assertion.js +1 -0
  73. package/dist/rules/no-confusing-void-expression.js +8 -9
  74. package/dist/rules/no-deprecated.js +1 -0
  75. package/dist/rules/no-dupe-class-members.js +1 -0
  76. package/dist/rules/no-duplicate-enum-values.js +1 -0
  77. package/dist/rules/no-duplicate-type-constituents.js +1 -0
  78. package/dist/rules/no-dynamic-delete.js +1 -0
  79. package/dist/rules/no-empty-function.js +1 -0
  80. package/dist/rules/no-empty-interface.js +1 -0
  81. package/dist/rules/no-empty-object-type.js +9 -4
  82. package/dist/rules/no-explicit-any.js +1 -0
  83. package/dist/rules/no-extra-non-null-assertion.js +1 -0
  84. package/dist/rules/no-extraneous-class.js +1 -0
  85. package/dist/rules/no-floating-promises.js +64 -55
  86. package/dist/rules/no-for-in-array.js +1 -0
  87. package/dist/rules/no-implied-eval.js +1 -0
  88. package/dist/rules/no-import-type-side-effects.js +1 -0
  89. package/dist/rules/no-inferrable-types.js +1 -0
  90. package/dist/rules/no-invalid-this.js +1 -0
  91. package/dist/rules/no-invalid-void-type.js +1 -0
  92. package/dist/rules/no-loop-func.js +1 -0
  93. package/dist/rules/no-loss-of-precision.js +1 -0
  94. package/dist/rules/no-magic-numbers.js +1 -0
  95. package/dist/rules/no-meaningless-void-operator.js +1 -0
  96. package/dist/rules/no-misused-new.js +1 -0
  97. package/dist/rules/no-misused-promises.js +1 -0
  98. package/dist/rules/no-misused-spread.js +1 -0
  99. package/dist/rules/no-mixed-enums.js +1 -0
  100. package/dist/rules/no-namespace.js +1 -0
  101. package/dist/rules/no-non-null-asserted-nullish-coalescing.js +1 -0
  102. package/dist/rules/no-non-null-asserted-optional-chain.js +1 -0
  103. package/dist/rules/no-non-null-assertion.js +1 -0
  104. package/dist/rules/no-redeclare.js +1 -0
  105. package/dist/rules/no-redundant-type-constituents.js +1 -0
  106. package/dist/rules/no-require-imports.js +1 -0
  107. package/dist/rules/no-restricted-imports.js +1 -0
  108. package/dist/rules/no-restricted-types.js +1 -0
  109. package/dist/rules/no-shadow.js +1 -0
  110. package/dist/rules/no-this-alias.js +1 -0
  111. package/dist/rules/no-type-alias.js +1 -0
  112. package/dist/rules/no-unnecessary-boolean-literal-compare.js +1 -0
  113. package/dist/rules/no-unnecessary-condition.js +1 -0
  114. package/dist/rules/no-unnecessary-parameter-property-assignment.js +1 -0
  115. package/dist/rules/no-unnecessary-qualifier.js +1 -0
  116. package/dist/rules/no-unnecessary-template-expression.js +3 -14
  117. package/dist/rules/no-unnecessary-type-arguments.js +1 -0
  118. package/dist/rules/no-unnecessary-type-assertion.js +12 -1
  119. package/dist/rules/no-unnecessary-type-constraint.js +1 -0
  120. package/dist/rules/no-unnecessary-type-conversion.js +1 -0
  121. package/dist/rules/no-unnecessary-type-parameters.js +1 -0
  122. package/dist/rules/no-unsafe-argument.js +2 -91
  123. package/dist/rules/no-unsafe-assignment.js +1 -0
  124. package/dist/rules/no-unsafe-call.js +1 -0
  125. package/dist/rules/no-unsafe-declaration-merging.js +1 -0
  126. package/dist/rules/no-unsafe-enum-comparison.js +3 -113
  127. package/dist/rules/no-unsafe-function-type.js +1 -0
  128. package/dist/rules/no-unsafe-member-access.js +1 -0
  129. package/dist/rules/no-unsafe-return.js +1 -0
  130. package/dist/rules/no-unsafe-type-assertion.js +1 -0
  131. package/dist/rules/no-unsafe-unary-minus.js +1 -0
  132. package/dist/rules/no-unused-expressions.js +1 -0
  133. package/dist/rules/no-unused-private-class-members.js +1 -0
  134. package/dist/rules/no-unused-vars.js +1 -0
  135. package/dist/rules/no-use-before-define.js +1 -0
  136. package/dist/rules/no-useless-constructor.js +1 -0
  137. package/dist/rules/no-useless-default-assignment.js +1 -0
  138. package/dist/rules/no-useless-empty-export.js +1 -0
  139. package/dist/rules/no-var-requires.js +1 -0
  140. package/dist/rules/no-wrapper-object-types.js +1 -0
  141. package/dist/rules/non-nullable-type-assertion-style.js +1 -0
  142. package/dist/rules/only-throw-error.js +1 -0
  143. package/dist/rules/parameter-properties.js +1 -0
  144. package/dist/rules/prefer-as-const.js +1 -0
  145. package/dist/rules/prefer-destructuring.js +1 -0
  146. package/dist/rules/prefer-enum-initializers.js +1 -0
  147. package/dist/rules/prefer-find.js +1 -0
  148. package/dist/rules/prefer-for-of.js +1 -0
  149. package/dist/rules/prefer-function-type.js +1 -0
  150. package/dist/rules/prefer-includes.js +1 -0
  151. package/dist/rules/prefer-literal-enum-member.js +1 -0
  152. package/dist/rules/prefer-namespace-keyword.js +1 -0
  153. package/dist/rules/prefer-nullish-coalescing.js +1 -0
  154. package/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.js +1 -0
  155. package/dist/rules/prefer-optional-chain-utils/analyzeChain.js +1 -0
  156. package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js +1 -0
  157. package/dist/rules/prefer-optional-chain-utils/compareNodes.js +1 -0
  158. package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js +1 -0
  159. package/dist/rules/prefer-optional-chain.js +1 -0
  160. package/dist/rules/prefer-promise-reject-errors.js +1 -0
  161. package/dist/rules/prefer-readonly-parameter-types.js +1 -0
  162. package/dist/rules/prefer-readonly.js +1 -0
  163. package/dist/rules/prefer-reduce-type-parameter.js +1 -0
  164. package/dist/rules/prefer-regexp-exec.js +1 -0
  165. package/dist/rules/prefer-return-this-type.js +1 -0
  166. package/dist/rules/prefer-string-starts-ends-with.js +1 -0
  167. package/dist/rules/prefer-ts-expect-error.js +1 -0
  168. package/dist/rules/promise-function-async.js +1 -0
  169. package/dist/rules/related-getter-setter-pairs.js +1 -0
  170. package/dist/rules/require-array-sort-compare.js +1 -0
  171. package/dist/rules/require-await.js +1 -0
  172. package/dist/rules/restrict-plus-operands.js +1 -0
  173. package/dist/rules/restrict-template-expressions.js +1 -0
  174. package/dist/rules/return-await.js +1 -0
  175. package/dist/rules/sort-type-constituents.js +1 -0
  176. package/dist/rules/strict-boolean-expressions.js +1 -0
  177. package/dist/rules/strict-void-return.d.ts +3 -2
  178. package/dist/rules/strict-void-return.js +97 -5
  179. package/dist/rules/switch-exhaustiveness-check.js +1 -0
  180. package/dist/rules/triple-slash-reference.js +1 -0
  181. package/dist/rules/typedef.js +1 -0
  182. package/dist/rules/unbound-method.js +1 -0
  183. package/dist/rules/unified-signatures.d.ts +1 -1
  184. package/dist/rules/unified-signatures.js +30 -4
  185. package/dist/rules/use-unknown-in-catch-callback-variable.js +1 -0
  186. package/dist/util/FunctionSignature.d.ts +15 -0
  187. package/dist/util/FunctionSignature.js +123 -0
  188. package/dist/util/assertionFunctionUtils.js +1 -0
  189. package/dist/util/astUtils.js +1 -0
  190. package/dist/util/baseTypeUtils.d.ts +2 -0
  191. package/dist/util/baseTypeUtils.js +17 -0
  192. package/dist/util/class-scope-analyzer/classScopeAnalyzer.js +1 -0
  193. package/dist/util/class-scope-analyzer/extractComputedName.js +1 -0
  194. package/dist/util/class-scope-analyzer/types.js +1 -0
  195. package/dist/util/collectUnusedVariables.js +1 -0
  196. package/dist/util/createRule.js +1 -0
  197. package/dist/util/escapeRegExp.js +1 -0
  198. package/dist/util/explicitReturnTypeUtils.js +1 -0
  199. package/dist/util/getBaseTypesOfClassMember.js +1 -0
  200. package/dist/util/getConstraintInfo.js +1 -0
  201. package/dist/util/getESLintCoreRule.js +1 -0
  202. package/dist/util/getFixOrSuggest.js +1 -0
  203. package/dist/util/getForStatementHeadLoc.js +1 -0
  204. package/dist/util/getFunctionHeadLoc.js +1 -0
  205. package/dist/util/getMemberHeadLoc.js +1 -0
  206. package/dist/util/getOperatorPrecedence.js +1 -0
  207. package/dist/util/getParentFunctionNode.js +1 -0
  208. package/dist/util/getStaticStringValue.js +1 -0
  209. package/dist/util/getStringLength.js +1 -0
  210. package/dist/util/getTextWithParentheses.js +1 -0
  211. package/dist/util/getThisExpression.js +1 -0
  212. package/dist/util/getValueOfLiteralType.js +1 -0
  213. package/dist/util/getWrappedCode.js +1 -0
  214. package/dist/util/getWrappingFixer.js +1 -0
  215. package/dist/util/hasOverloadSignatures.js +1 -0
  216. package/dist/util/index.d.ts +1 -0
  217. package/dist/util/index.js +2 -0
  218. package/dist/util/isArrayMethodCallWithPredicate.js +1 -0
  219. package/dist/util/isAssignee.js +1 -0
  220. package/dist/util/isConditionalTest.js +1 -0
  221. package/dist/util/isHigherPrecedenceThanAwait.js +1 -0
  222. package/dist/util/isNodeEqual.js +1 -0
  223. package/dist/util/isNullLiteral.js +1 -0
  224. package/dist/util/isPromiseAggregatorMethod.js +1 -0
  225. package/dist/util/isStartOfArrowFunctionBody.js +1 -0
  226. package/dist/util/isStartOfExpressionStatement.js +1 -0
  227. package/dist/util/isTypeImport.js +1 -0
  228. package/dist/util/isUndefinedIdentifier.js +1 -0
  229. package/dist/util/misc.js +1 -0
  230. package/dist/util/needsPrecedingSemiColon.js +1 -0
  231. package/dist/util/needsToBeAwaited.js +1 -0
  232. package/dist/util/objectIterators.js +1 -0
  233. package/dist/util/promiseUtils.js +1 -0
  234. package/dist/util/rangeToLoc.js +1 -0
  235. package/dist/util/referenceContainsTypePredicate.js +1 -0
  236. package/dist/util/referenceContainsTypeQuery.js +1 -0
  237. package/dist/util/scopeUtils.js +1 -0
  238. package/dist/util/skipChainExpression.js +1 -0
  239. package/dist/util/truthinessUtils.js +1 -0
  240. package/dist/util/types.js +1 -0
  241. package/dist/util/walkStatements.js +1 -0
  242. package/package.json +12 -11
@@ -12,6 +12,7 @@ exports.default = (0, util_1.createRule)({
12
12
  recommended: 'strict',
13
13
  },
14
14
  messages: {
15
+ allParametersAreSame: '{{failureStringStart}} with identical parameters.',
15
16
  omittingRestParameter: '{{failureStringStart}} with a rest parameter.',
16
17
  omittingSingleParameter: '{{failureStringStart}} with an optional parameter.',
17
18
  singleParameterDifference: '{{failureStringStart}} taking `{{types}}`.',
@@ -85,7 +86,24 @@ exports.default = (0, util_1.createRule)({
85
86
  failureStringStart: failureStringStart(lineOfOtherOverload),
86
87
  },
87
88
  });
89
+ break;
88
90
  }
91
+ case 'all-parameters-are-same': {
92
+ const { signature0, signature1 } = unify;
93
+ const lineOfOtherOverload = only2
94
+ ? undefined
95
+ : signature0.loc.start.line;
96
+ context.report({
97
+ node: signature1,
98
+ messageId: 'allParametersAreSame',
99
+ data: {
100
+ failureStringStart: failureStringStart(lineOfOtherOverload),
101
+ },
102
+ });
103
+ break;
104
+ }
105
+ default:
106
+ unify;
89
107
  }
90
108
  }
91
109
  }
@@ -109,7 +127,7 @@ exports.default = (0, util_1.createRule)({
109
127
  return undefined;
110
128
  }
111
129
  return a.params.length === b.params.length
112
- ? signaturesDifferBySingleParameter(a, b)
130
+ ? signaturesHaveSameAmountOfParameters(a, b)
113
131
  : signaturesDifferByOptionalOrRestParameter(a, b);
114
132
  }
115
133
  function signaturesCanBeUnified(a, b, isTypeParameter) {
@@ -140,8 +158,11 @@ exports.default = (0, util_1.createRule)({
140
158
  signatureUsesTypeParameter(a, isTypeParameter) ===
141
159
  signatureUsesTypeParameter(b, isTypeParameter));
142
160
  }
143
- /** Detect `a(x: number, y: number, z: number)` and `a(x: number, y: string, z: number)`. */
144
- function signaturesDifferBySingleParameter(signature0, signature1) {
161
+ /**
162
+ * Detect no difference, i.e. `a(x: number, y: string)` and `a(x: number, y: string)`,
163
+ * or one param difference, i.e. `a(x: number, y: number, z: number)` and `a(x: number, y: string, z: number)`.
164
+ */
165
+ function signaturesHaveSameAmountOfParameters(signature0, signature1) {
145
166
  const types1 = signature0.params;
146
167
  const types2 = signature1.params;
147
168
  const firstParam1 = types1[0];
@@ -152,7 +173,11 @@ exports.default = (0, util_1.createRule)({
152
173
  }
153
174
  const index = getIndexOfFirstDifference(types1, types2, parametersAreEqual);
154
175
  if (index == null) {
155
- return undefined;
176
+ return {
177
+ kind: 'all-parameters-are-same',
178
+ signature0,
179
+ signature1,
180
+ };
156
181
  }
157
182
  // If remaining arrays are equal, the signatures differ by just one parameter type
158
183
  if (!(0, util_1.arraysAreEqual)(types1.slice(index + 1), types2.slice(index + 1), parametersAreEqual)) {
@@ -478,3 +503,4 @@ function isPrivateIdentifier(node) {
478
503
  function isGetterOrSetter(node) {
479
504
  return node.kind === 'get' || node.kind === 'set';
480
505
  }
506
+ //# sourceMappingURL=unified-signatures.js.map
@@ -259,3 +259,4 @@ exports.default = (0, util_1.createRule)({
259
259
  };
260
260
  },
261
261
  });
262
+ //# sourceMappingURL=use-unknown-in-catch-callback-variable.js.map
@@ -0,0 +1,15 @@
1
+ import * as ts from 'typescript';
2
+ /**
3
+ * Tracks checking the parameters of a single function signature.
4
+ * This allows rules to "consume" parameters and check for unsafe comparisons.
5
+ */
6
+ export declare class FunctionSignature {
7
+ private readonly paramTypes;
8
+ private readonly restType;
9
+ private hasConsumedArguments;
10
+ private parameterTypeIndex;
11
+ private constructor();
12
+ static create(checker: ts.TypeChecker, tsNode: ts.CallLikeExpression): FunctionSignature;
13
+ consumeRemainingArguments(): void;
14
+ getNextParameterType(): ts.Type | null;
15
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FunctionSignature = void 0;
37
+ const utils_1 = require("@typescript-eslint/utils");
38
+ const ts = __importStar(require("typescript"));
39
+ const misc_1 = require("./misc");
40
+ const { nullThrows } = utils_1.ESLintUtils;
41
+ var RestTypeKind;
42
+ (function (RestTypeKind) {
43
+ RestTypeKind[RestTypeKind["Array"] = 0] = "Array";
44
+ RestTypeKind[RestTypeKind["Other"] = 1] = "Other";
45
+ RestTypeKind[RestTypeKind["Tuple"] = 2] = "Tuple";
46
+ })(RestTypeKind || (RestTypeKind = {}));
47
+ /**
48
+ * Tracks checking the parameters of a single function signature.
49
+ * This allows rules to "consume" parameters and check for unsafe comparisons.
50
+ */
51
+ class FunctionSignature {
52
+ paramTypes;
53
+ restType;
54
+ hasConsumedArguments = false;
55
+ parameterTypeIndex = 0;
56
+ constructor(paramTypes, restType) {
57
+ this.paramTypes = paramTypes;
58
+ this.restType = restType;
59
+ }
60
+ static create(checker, tsNode) {
61
+ // getResolvedSignature only returns undefined for nodes outside the parse
62
+ // tree, and tsNode always comes from the AST node map.
63
+ const signature = nullThrows(checker.getResolvedSignature(tsNode), 'Expected the call-like node to resolve to a signature.');
64
+ const paramTypes = [];
65
+ let restType = null;
66
+ const parameters = signature.getParameters();
67
+ for (let index = 0; index < parameters.length; index += 1) {
68
+ const param = parameters[index];
69
+ const declaration = param.getDeclarations()?.[0];
70
+ const type = checker.getTypeOfSymbolAtLocation(param, tsNode);
71
+ const constrainedType = checker.getBaseConstraintOfType(type) ?? type;
72
+ if (declaration && (0, misc_1.isRestParameterDeclaration)(declaration)) {
73
+ if (checker.isTupleType(constrainedType)) {
74
+ restType = {
75
+ index,
76
+ kind: RestTypeKind.Tuple,
77
+ typeArguments: checker.getTypeArguments(constrainedType),
78
+ };
79
+ }
80
+ else {
81
+ const elementType = checker.getIndexTypeOfType(constrainedType, ts.IndexKind.Number);
82
+ restType = elementType
83
+ ? { index, kind: RestTypeKind.Array, type: elementType }
84
+ : { index, kind: RestTypeKind.Other, type: constrainedType };
85
+ }
86
+ break;
87
+ }
88
+ paramTypes.push(type);
89
+ }
90
+ return new FunctionSignature(paramTypes, restType);
91
+ }
92
+ consumeRemainingArguments() {
93
+ this.hasConsumedArguments = true;
94
+ }
95
+ getNextParameterType() {
96
+ const index = this.parameterTypeIndex;
97
+ this.parameterTypeIndex += 1;
98
+ if (index >= this.paramTypes.length || this.hasConsumedArguments) {
99
+ if (this.restType == null) {
100
+ return null;
101
+ }
102
+ switch (this.restType.kind) {
103
+ case RestTypeKind.Tuple: {
104
+ const { typeArguments } = this.restType;
105
+ if (this.hasConsumedArguments) {
106
+ return typeArguments[typeArguments.length - 1];
107
+ }
108
+ const typeIndex = index - this.restType.index;
109
+ if (typeIndex >= typeArguments.length) {
110
+ return typeArguments[typeArguments.length - 1];
111
+ }
112
+ return typeArguments[typeIndex];
113
+ }
114
+ case RestTypeKind.Array:
115
+ case RestTypeKind.Other:
116
+ return this.restType.type;
117
+ }
118
+ }
119
+ return this.paramTypes[index];
120
+ }
121
+ }
122
+ exports.FunctionSignature = FunctionSignature;
123
+ //# sourceMappingURL=FunctionSignature.js.map
@@ -114,3 +114,4 @@ function findTypeGuardAssertedArgument(services, node) {
114
114
  type,
115
115
  };
116
116
  }
117
+ //# sourceMappingURL=assertionFunctionUtils.js.map
@@ -141,3 +141,4 @@ function forEachChildESTree(node, callback) {
141
141
  }
142
142
  return visit(node);
143
143
  }
144
+ //# sourceMappingURL=astUtils.js.map
@@ -1,6 +1,8 @@
1
1
  import type { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
2
2
  import type { InterfaceType, Type } from 'typescript';
3
3
  export declare function hasBaseTypes(type: Type): type is InterfaceType;
4
+ export declare function isNumberLike(type: Type): boolean;
5
+ export declare function isStringLike(type: Type): boolean;
4
6
  /**
5
7
  * Recursively checks if a type or any of its base types matches the provided
6
8
  * matcher function.
@@ -34,6 +34,8 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.hasBaseTypes = hasBaseTypes;
37
+ exports.isNumberLike = isNumberLike;
38
+ exports.isStringLike = isStringLike;
37
39
  exports.matchesTypeOrBaseType = matchesTypeOrBaseType;
38
40
  const ts_api_utils_1 = require("ts-api-utils");
39
41
  const tsutils = __importStar(require("ts-api-utils"));
@@ -53,6 +55,20 @@ function hasBaseTypes(type) {
53
55
  return ((0, ts_api_utils_1.isObjectType)(type) &&
54
56
  (0, ts_api_utils_1.isObjectFlagSet)(type, ts.ObjectFlags.Interface | ts.ObjectFlags.Class));
55
57
  }
58
+ function isNumberLike(type) {
59
+ return tsutils
60
+ .unionConstituents(type)
61
+ .every(unionPart => tsutils
62
+ .intersectionConstituents(unionPart)
63
+ .some(intersectionPart => tsutils.isTypeFlagSet(intersectionPart, ts.TypeFlags.NumberLike)));
64
+ }
65
+ function isStringLike(type) {
66
+ return tsutils
67
+ .unionConstituents(type)
68
+ .every(unionPart => tsutils
69
+ .intersectionConstituents(unionPart)
70
+ .some(intersectionPart => tsutils.isTypeFlagSet(intersectionPart, ts.TypeFlags.StringLike)));
71
+ }
56
72
  /**
57
73
  * Recursively checks if a type or any of its base types matches the provided
58
74
  * matcher function.
@@ -73,3 +89,4 @@ function matchesTypeOrBaseType(services, matcher, type, seen = new Set()) {
73
89
  const checker = services.program.getTypeChecker();
74
90
  return getBaseTypesForType(checker, type).some(base => matchesTypeOrBaseType(services, matcher, base, seen));
75
91
  }
92
+ //# sourceMappingURL=baseTypeUtils.js.map
@@ -564,3 +564,4 @@ function traverseScopes(currentScope, analysisResults = new Map()) {
564
564
  }
565
565
  return analysisResults;
566
566
  }
567
+ //# sourceMappingURL=classScopeAnalyzer.js.map
@@ -68,3 +68,4 @@ function extractNameForMemberExpression(node) {
68
68
  }
69
69
  return extractNonComputedName(node.property);
70
70
  }
71
+ //# sourceMappingURL=extractComputedName.js.map
@@ -8,3 +8,4 @@ function publicKey(name) {
8
8
  function privateKey(node) {
9
9
  return `#private@@${node.name}`;
10
10
  }
11
+ //# sourceMappingURL=types.js.map
@@ -599,3 +599,4 @@ function isUsedVariable(variable) {
599
599
  function collectVariables(context) {
600
600
  return UnusedVarsVisitor.collectUnusedVariables(context.sourceCode.ast, utils_1.ESLintUtils.nullThrows(context.sourceCode.scopeManager, 'Missing required scope manager'));
601
601
  }
602
+ //# sourceMappingURL=collectUnusedVariables.js.map
@@ -3,3 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRule = void 0;
4
4
  const utils_1 = require("@typescript-eslint/utils");
5
5
  exports.createRule = utils_1.ESLintUtils.RuleCreator(name => `https://typescript-eslint.io/rules/${name}`);
6
+ //# sourceMappingURL=createRule.js.map
@@ -12,3 +12,4 @@ function escapeRegExp(string = '') {
12
12
  ? string.replaceAll(reRegExpChar, '\\$&')
13
13
  : string;
14
14
  }
15
+ //# sourceMappingURL=escapeRegExp.js.map
@@ -236,3 +236,4 @@ function ancestorHasReturnType(node) {
236
236
  }
237
237
  return false;
238
238
  }
239
+ //# sourceMappingURL=explicitReturnTypeUtils.js.map
@@ -29,3 +29,4 @@ function* getBaseTypesOfClassMember(services, memberNode) {
29
29
  }
30
30
  }
31
31
  }
32
+ //# sourceMappingURL=getBaseTypesOfClassMember.js.map
@@ -68,3 +68,4 @@ function getConstraintInfo(checker, type) {
68
68
  isTypeParameter: false,
69
69
  };
70
70
  }
71
+ //# sourceMappingURL=getConstraintInfo.js.map
@@ -14,3 +14,4 @@ function maybeGetESLintCoreRule(ruleId) {
14
14
  return null;
15
15
  }
16
16
  }
17
+ //# sourceMappingURL=getESLintCoreRule.js.map
@@ -11,3 +11,4 @@ function getFixOrSuggest({ fixOrSuggest, suggestion, }) {
11
11
  return { suggest: [suggestion] };
12
12
  }
13
13
  }
14
+ //# sourceMappingURL=getFixOrSuggest.js.map
@@ -24,3 +24,4 @@ function getForStatementHeadLoc(sourceCode, node) {
24
24
  start: structuredClone(node.loc.start),
25
25
  };
26
26
  }
27
+ //# sourceMappingURL=getForStatementHeadLoc.js.map
@@ -159,3 +159,4 @@ function getFunctionHeadLoc(node, sourceCode) {
159
159
  start: { ...start },
160
160
  };
161
161
  }
162
+ //# sourceMappingURL=getFunctionHeadLoc.js.map
@@ -77,3 +77,4 @@ function getParameterPropertyHeadLoc(sourceCode, node, nodeName) {
77
77
  start,
78
78
  };
79
79
  }
80
+ //# sourceMappingURL=getMemberHeadLoc.js.map
@@ -419,3 +419,4 @@ function getBinaryOperatorPrecedence(kind) {
419
419
  // parsing to stop.
420
420
  return -1;
421
421
  }
422
+ //# sourceMappingURL=getOperatorPrecedence.js.map
@@ -16,3 +16,4 @@ function getParentFunctionNode(node) {
16
16
  // the parser won't error, so we shouldn't throw here
17
17
  /* istanbul ignore next */ return null;
18
18
  }
19
+ //# sourceMappingURL=getParentFunctionNode.js.map
@@ -42,3 +42,4 @@ function getStaticStringValue(node) {
42
42
  }
43
43
  return null;
44
44
  }
45
+ //# sourceMappingURL=getStaticStringValue.js.map
@@ -12,3 +12,4 @@ function getStringLength(value) {
12
12
  segmenter ??= new Intl.Segmenter();
13
13
  return [...segmenter.segment(value)].length;
14
14
  }
15
+ //# sourceMappingURL=getStringLength.js.map
@@ -14,3 +14,4 @@ function getTextWithParentheses(sourceCode, node) {
14
14
  }
15
15
  return sourceCode.getText(node, beforeCount, afterCount);
16
16
  }
17
+ //# sourceMappingURL=getTextWithParentheses.js.map
@@ -22,3 +22,4 @@ function getThisExpression(node) {
22
22
  }
23
23
  return;
24
24
  }
25
+ //# sourceMappingURL=getThisExpression.js.map
@@ -14,3 +14,4 @@ const getValueOfLiteralType = (type) => {
14
14
  return type.value;
15
15
  };
16
16
  exports.getValueOfLiteralType = getValueOfLiteralType;
17
+ //# sourceMappingURL=getValueOfLiteralType.js.map
@@ -4,3 +4,4 @@ exports.getWrappedCode = getWrappedCode;
4
4
  function getWrappedCode(text, nodePrecedence, parentPrecedence) {
5
5
  return nodePrecedence > parentPrecedence ? text : `(${text})`;
6
6
  }
7
+ //# sourceMappingURL=getWrappedCode.js.map
@@ -183,3 +183,4 @@ function isObjectExpressionInOneLineReturn(node, innerNode) {
183
183
  node.parent.body === node &&
184
184
  innerNode.type === utils_1.AST_NODE_TYPES.ObjectExpression);
185
185
  }
186
+ //# sourceMappingURL=getWrappingFixer.js.map
@@ -45,3 +45,4 @@ function getFunctionDeclarationName(node, context) {
45
45
  }
46
46
  return (0, misc_1.getStaticMemberAccessValue)(node, context);
47
47
  }
48
+ //# sourceMappingURL=hasOverloadSignatures.js.map
@@ -3,6 +3,7 @@ export * from './astUtils';
3
3
  export * from './baseTypeUtils';
4
4
  export * from './collectUnusedVariables';
5
5
  export * from './createRule';
6
+ export * from './FunctionSignature';
6
7
  export * from './getBaseTypesOfClassMember';
7
8
  export * from './getFixOrSuggest';
8
9
  export * from './getFunctionHeadLoc';
@@ -20,6 +20,7 @@ __exportStar(require("./astUtils"), exports);
20
20
  __exportStar(require("./baseTypeUtils"), exports);
21
21
  __exportStar(require("./collectUnusedVariables"), exports);
22
22
  __exportStar(require("./createRule"), exports);
23
+ __exportStar(require("./FunctionSignature"), exports);
23
24
  __exportStar(require("./getBaseTypesOfClassMember"), exports);
24
25
  __exportStar(require("./getFixOrSuggest"), exports);
25
26
  __exportStar(require("./getFunctionHeadLoc"), exports);
@@ -53,3 +54,4 @@ __exportStar(require("./walkStatements"), exports);
53
54
  // this is done for convenience - saves migrating all of the old rules
54
55
  __exportStar(require("@typescript-eslint/type-utils"), exports);
55
56
  ({ applyDefault: exports.applyDefault, deepMerge: exports.deepMerge, getParserServices: exports.getParserServices, isObjectNotArray: exports.isObjectNotArray, nullThrows: exports.nullThrows, NullThrowsReasons: exports.NullThrowsReasons } = utils_1.ESLintUtils);
57
+ //# sourceMappingURL=index.js.map
@@ -62,3 +62,4 @@ function isArrayMethodCallWithPredicate(context, services, node) {
62
62
  .flatMap(part => tsutils.intersectionConstituents(part))
63
63
  .some(t => checker.isArrayType(t) || checker.isTupleType(t));
64
64
  }
65
+ //# sourceMappingURL=isArrayMethodCallWithPredicate.js.map
@@ -48,3 +48,4 @@ function isAssignee(node) {
48
48
  }
49
49
  return false;
50
50
  }
51
+ //# sourceMappingURL=isAssignee.js.map
@@ -32,3 +32,4 @@ function isConditionalTest(node) {
32
32
  }
33
33
  return false;
34
34
  }
35
+ //# sourceMappingURL=isConditionalTest.js.map
@@ -44,3 +44,4 @@ function isHigherPrecedenceThanAwait(tsNode) {
44
44
  const awaitPrecedence = (0, getOperatorPrecedence_1.getOperatorPrecedence)(ts.SyntaxKind.AwaitExpression, ts.SyntaxKind.Unknown);
45
45
  return nodePrecedence > awaitPrecedence;
46
46
  }
47
+ //# sourceMappingURL=isHigherPrecedenceThanAwait.js.map
@@ -23,3 +23,4 @@ function isNodeEqual(a, b) {
23
23
  }
24
24
  return false;
25
25
  }
26
+ //# sourceMappingURL=isNodeEqual.js.map
@@ -5,3 +5,4 @@ const utils_1 = require("@typescript-eslint/utils");
5
5
  function isNullLiteral(i) {
6
6
  return i.type === utils_1.AST_NODE_TYPES.Literal && i.value == null;
7
7
  }
8
+ //# sourceMappingURL=isNullLiteral.js.map
@@ -20,3 +20,4 @@ function isPromiseAggregatorMethod(context, services, node) {
20
20
  }
21
21
  return (0, type_utils_1.isPromiseConstructorLike)(services.program, (0, type_utils_1.getConstrainedTypeAtLocation)(services, node.callee.object));
22
22
  }
23
+ //# sourceMappingURL=isPromiseAggregatorMethod.js.map
@@ -23,3 +23,4 @@ function isStartOfArrowFunctionBody(node, sourceCode) {
23
23
  current = parent;
24
24
  }
25
25
  }
26
+ //# sourceMappingURL=isStartOfArrowFunctionBody.js.map
@@ -20,3 +20,4 @@ function isStartOfExpressionStatement(node) {
20
20
  }
21
21
  return false;
22
22
  }
23
+ //# sourceMappingURL=isStartOfExpressionStatement.js.map
@@ -19,3 +19,4 @@ function isTypeImport(definition) {
19
19
  (definition.node.type === utils_1.AST_NODE_TYPES.ImportSpecifier &&
20
20
  definition.node.importKind === 'type')));
21
21
  }
22
+ //# sourceMappingURL=isTypeImport.js.map
@@ -5,3 +5,4 @@ const utils_1 = require("@typescript-eslint/utils");
5
5
  function isUndefinedIdentifier(i) {
6
6
  return i.type === utils_1.AST_NODE_TYPES.Identifier && i.name === 'undefined';
7
7
  }
8
+ //# sourceMappingURL=isUndefinedIdentifier.js.map
package/dist/util/misc.js CHANGED
@@ -268,3 +268,4 @@ function getStaticMemberAccessValue(node, { sourceCode }) {
268
268
  */
269
269
  const isStaticMemberAccessOfValue = (memberExpression, context, ...values) => values.includes(getStaticMemberAccessValue(memberExpression, context));
270
270
  exports.isStaticMemberAccessOfValue = isStaticMemberAccessOfValue;
271
+ //# sourceMappingURL=misc.js.map
@@ -95,3 +95,4 @@ function needsPrecedingSemicolon(sourceCode, node) {
95
95
  }
96
96
  return true;
97
97
  }
98
+ //# sourceMappingURL=needsPrecedingSemiColon.js.map
@@ -61,3 +61,4 @@ function needsToBeAwaited(checker, node, type) {
61
61
  // anything else should not be awaited
62
62
  return Awaitable.Never;
63
63
  }
64
+ //# sourceMappingURL=needsToBeAwaited.js.map
@@ -23,3 +23,4 @@ function objectReduceKey(obj, callback, initial) {
23
23
  });
24
24
  return accumulator;
25
25
  }
26
+ //# sourceMappingURL=objectIterators.js.map
@@ -96,3 +96,4 @@ function parseFinallyCall(node, context) {
96
96
  }
97
97
  return undefined;
98
98
  }
99
+ //# sourceMappingURL=promiseUtils.js.map
@@ -7,3 +7,4 @@ function rangeToLoc(sourceCode, range) {
7
7
  start: sourceCode.getLocFromIndex(range[0]),
8
8
  };
9
9
  }
10
+ //# sourceMappingURL=rangeToLoc.js.map
@@ -16,3 +16,4 @@ function referenceContainsTypePredicate(node) {
16
16
  return false;
17
17
  }
18
18
  }
19
+ //# sourceMappingURL=referenceContainsTypePredicate.js.map
@@ -17,3 +17,4 @@ function referenceContainsTypeQuery(node) {
17
17
  return false;
18
18
  }
19
19
  }
20
+ //# sourceMappingURL=referenceContainsTypeQuery.js.map
@@ -8,3 +8,4 @@ function isReferenceToGlobalFunction(calleeName, node, sourceCode) {
8
8
  // ensure it's the "global" version
9
9
  return !ref?.resolved?.defs.length;
10
10
  }
11
+ //# sourceMappingURL=scopeUtils.js.map
@@ -5,3 +5,4 @@ const utils_1 = require("@typescript-eslint/utils");
5
5
  function skipChainExpression(node) {
6
6
  return node.type === utils_1.AST_NODE_TYPES.ChainExpression ? node.expression : node;
7
7
  }
8
+ //# sourceMappingURL=skipChainExpression.js.map
@@ -58,3 +58,4 @@ const isPossiblyTruthy = (type) => tsutils
58
58
  // like `"" & { __brand: string }`.
59
59
  intersectionParts.every(type => !tsutils.isFalsyType(type)));
60
60
  exports.isPossiblyTruthy = isPossiblyTruthy;
61
+ //# sourceMappingURL=truthinessUtils.js.map
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -54,3 +54,4 @@ function* walkStatements(body) {
54
54
  }
55
55
  }
56
56
  }
57
+ //# sourceMappingURL=walkStatements.js.map