@typescript-eslint/eslint-plugin 8.67.1-alpha.2 → 8.67.1-alpha.21

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 (240) hide show
  1. package/CHANGELOG.md +5880 -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.js +1 -0
  30. package/dist/raw-plugin.js +1 -0
  31. package/dist/rules/adjacent-overload-signatures.js +1 -0
  32. package/dist/rules/array-type.js +1 -0
  33. package/dist/rules/await-thenable.js +1 -0
  34. package/dist/rules/ban-ts-comment.js +1 -0
  35. package/dist/rules/ban-tslint-comment.js +1 -0
  36. package/dist/rules/class-literal-property-style.js +1 -0
  37. package/dist/rules/class-methods-use-this.js +1 -0
  38. package/dist/rules/consistent-generic-constructors.js +1 -0
  39. package/dist/rules/consistent-indexed-object-style.js +1 -0
  40. package/dist/rules/consistent-return.js +1 -0
  41. package/dist/rules/consistent-type-assertions.js +1 -0
  42. package/dist/rules/consistent-type-definitions.js +1 -0
  43. package/dist/rules/consistent-type-exports.js +1 -0
  44. package/dist/rules/consistent-type-imports.js +1 -0
  45. package/dist/rules/default-param-last.js +1 -0
  46. package/dist/rules/dot-notation.js +1 -0
  47. package/dist/rules/enum-utils/shared.d.ts +5 -0
  48. package/dist/rules/enum-utils/shared.js +68 -0
  49. package/dist/rules/explicit-function-return-type.js +1 -0
  50. package/dist/rules/explicit-member-accessibility.js +1 -0
  51. package/dist/rules/explicit-module-boundary-types.js +1 -0
  52. package/dist/rules/index.js +1 -0
  53. package/dist/rules/init-declarations.js +1 -0
  54. package/dist/rules/max-params.js +1 -0
  55. package/dist/rules/member-ordering.js +1 -0
  56. package/dist/rules/method-signature-style.js +1 -0
  57. package/dist/rules/naming-convention-utils/enums.js +1 -0
  58. package/dist/rules/naming-convention-utils/format.js +1 -0
  59. package/dist/rules/naming-convention-utils/index.js +1 -0
  60. package/dist/rules/naming-convention-utils/parse-options.js +1 -0
  61. package/dist/rules/naming-convention-utils/schema.js +1 -0
  62. package/dist/rules/naming-convention-utils/shared.js +1 -0
  63. package/dist/rules/naming-convention-utils/types.js +1 -0
  64. package/dist/rules/naming-convention-utils/validator.js +1 -0
  65. package/dist/rules/naming-convention.js +1 -0
  66. package/dist/rules/no-array-constructor.js +1 -0
  67. package/dist/rules/no-array-delete.js +1 -0
  68. package/dist/rules/no-base-to-string.js +1 -0
  69. package/dist/rules/no-confusing-non-null-assertion.js +1 -0
  70. package/dist/rules/no-confusing-void-expression.js +1 -0
  71. package/dist/rules/no-deprecated.js +1 -0
  72. package/dist/rules/no-dupe-class-members.js +1 -0
  73. package/dist/rules/no-duplicate-enum-values.js +1 -0
  74. package/dist/rules/no-duplicate-type-constituents.js +1 -0
  75. package/dist/rules/no-dynamic-delete.js +1 -0
  76. package/dist/rules/no-empty-function.js +1 -0
  77. package/dist/rules/no-empty-interface.js +1 -0
  78. package/dist/rules/no-empty-object-type.js +1 -0
  79. package/dist/rules/no-explicit-any.js +1 -0
  80. package/dist/rules/no-extra-non-null-assertion.js +1 -0
  81. package/dist/rules/no-extraneous-class.js +1 -0
  82. package/dist/rules/no-floating-promises.js +64 -55
  83. package/dist/rules/no-for-in-array.js +1 -0
  84. package/dist/rules/no-implied-eval.js +1 -0
  85. package/dist/rules/no-import-type-side-effects.js +1 -0
  86. package/dist/rules/no-inferrable-types.js +1 -0
  87. package/dist/rules/no-invalid-this.js +1 -0
  88. package/dist/rules/no-invalid-void-type.js +1 -0
  89. package/dist/rules/no-loop-func.js +1 -0
  90. package/dist/rules/no-loss-of-precision.js +1 -0
  91. package/dist/rules/no-magic-numbers.js +1 -0
  92. package/dist/rules/no-meaningless-void-operator.js +1 -0
  93. package/dist/rules/no-misused-new.js +1 -0
  94. package/dist/rules/no-misused-promises.js +1 -0
  95. package/dist/rules/no-misused-spread.js +1 -0
  96. package/dist/rules/no-mixed-enums.js +1 -0
  97. package/dist/rules/no-namespace.js +1 -0
  98. package/dist/rules/no-non-null-asserted-nullish-coalescing.js +1 -0
  99. package/dist/rules/no-non-null-asserted-optional-chain.js +1 -0
  100. package/dist/rules/no-non-null-assertion.js +1 -0
  101. package/dist/rules/no-redeclare.js +1 -0
  102. package/dist/rules/no-redundant-type-constituents.js +1 -0
  103. package/dist/rules/no-require-imports.js +1 -0
  104. package/dist/rules/no-restricted-imports.js +1 -0
  105. package/dist/rules/no-restricted-types.js +1 -0
  106. package/dist/rules/no-shadow.js +1 -0
  107. package/dist/rules/no-this-alias.js +1 -0
  108. package/dist/rules/no-type-alias.js +1 -0
  109. package/dist/rules/no-unnecessary-boolean-literal-compare.js +1 -0
  110. package/dist/rules/no-unnecessary-condition.js +1 -0
  111. package/dist/rules/no-unnecessary-parameter-property-assignment.js +1 -0
  112. package/dist/rules/no-unnecessary-qualifier.js +1 -0
  113. package/dist/rules/no-unnecessary-template-expression.js +3 -14
  114. package/dist/rules/no-unnecessary-type-arguments.js +1 -0
  115. package/dist/rules/no-unnecessary-type-assertion.d.ts +1 -2
  116. package/dist/rules/no-unnecessary-type-assertion.js +14 -39
  117. package/dist/rules/no-unnecessary-type-constraint.js +1 -0
  118. package/dist/rules/no-unnecessary-type-conversion.js +1 -0
  119. package/dist/rules/no-unnecessary-type-parameters.js +1 -0
  120. package/dist/rules/no-unsafe-argument.js +2 -91
  121. package/dist/rules/no-unsafe-assignment.js +1 -0
  122. package/dist/rules/no-unsafe-call.js +1 -0
  123. package/dist/rules/no-unsafe-declaration-merging.js +1 -0
  124. package/dist/rules/no-unsafe-enum-comparison.js +3 -113
  125. package/dist/rules/no-unsafe-function-type.js +1 -0
  126. package/dist/rules/no-unsafe-member-access.js +1 -0
  127. package/dist/rules/no-unsafe-return.js +1 -0
  128. package/dist/rules/no-unsafe-type-assertion.js +1 -0
  129. package/dist/rules/no-unsafe-unary-minus.js +1 -0
  130. package/dist/rules/no-unused-expressions.js +1 -0
  131. package/dist/rules/no-unused-private-class-members.js +1 -0
  132. package/dist/rules/no-unused-vars.js +1 -0
  133. package/dist/rules/no-use-before-define.js +1 -0
  134. package/dist/rules/no-useless-constructor.js +1 -0
  135. package/dist/rules/no-useless-default-assignment.js +1 -0
  136. package/dist/rules/no-useless-empty-export.js +1 -0
  137. package/dist/rules/no-var-requires.js +1 -0
  138. package/dist/rules/no-wrapper-object-types.js +1 -0
  139. package/dist/rules/non-nullable-type-assertion-style.js +1 -0
  140. package/dist/rules/only-throw-error.js +1 -0
  141. package/dist/rules/parameter-properties.js +1 -0
  142. package/dist/rules/prefer-as-const.js +1 -0
  143. package/dist/rules/prefer-destructuring.js +1 -0
  144. package/dist/rules/prefer-enum-initializers.js +1 -0
  145. package/dist/rules/prefer-find.js +1 -0
  146. package/dist/rules/prefer-for-of.js +1 -0
  147. package/dist/rules/prefer-function-type.js +1 -0
  148. package/dist/rules/prefer-includes.js +1 -0
  149. package/dist/rules/prefer-literal-enum-member.js +1 -0
  150. package/dist/rules/prefer-namespace-keyword.js +1 -0
  151. package/dist/rules/prefer-nullish-coalescing.js +1 -0
  152. package/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.js +1 -0
  153. package/dist/rules/prefer-optional-chain-utils/analyzeChain.js +1 -0
  154. package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js +1 -0
  155. package/dist/rules/prefer-optional-chain-utils/compareNodes.js +1 -0
  156. package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js +1 -0
  157. package/dist/rules/prefer-optional-chain.js +1 -0
  158. package/dist/rules/prefer-promise-reject-errors.js +1 -0
  159. package/dist/rules/prefer-readonly-parameter-types.js +1 -0
  160. package/dist/rules/prefer-readonly.js +1 -0
  161. package/dist/rules/prefer-reduce-type-parameter.js +1 -0
  162. package/dist/rules/prefer-regexp-exec.js +1 -0
  163. package/dist/rules/prefer-return-this-type.js +1 -0
  164. package/dist/rules/prefer-string-starts-ends-with.js +1 -0
  165. package/dist/rules/prefer-ts-expect-error.js +1 -0
  166. package/dist/rules/promise-function-async.js +1 -0
  167. package/dist/rules/related-getter-setter-pairs.js +1 -0
  168. package/dist/rules/require-array-sort-compare.js +1 -0
  169. package/dist/rules/require-await.js +1 -0
  170. package/dist/rules/restrict-plus-operands.js +1 -0
  171. package/dist/rules/restrict-template-expressions.js +1 -0
  172. package/dist/rules/return-await.js +13 -1
  173. package/dist/rules/sort-type-constituents.js +1 -0
  174. package/dist/rules/strict-boolean-expressions.js +1 -0
  175. package/dist/rules/strict-void-return.js +1 -0
  176. package/dist/rules/switch-exhaustiveness-check.js +1 -0
  177. package/dist/rules/triple-slash-reference.js +1 -0
  178. package/dist/rules/typedef.js +1 -0
  179. package/dist/rules/unbound-method.js +1 -0
  180. package/dist/rules/unified-signatures.d.ts +1 -1
  181. package/dist/rules/unified-signatures.js +73 -32
  182. package/dist/rules/use-unknown-in-catch-callback-variable.js +1 -0
  183. package/dist/util/FunctionSignature.d.ts +15 -0
  184. package/dist/util/FunctionSignature.js +123 -0
  185. package/dist/util/assertionFunctionUtils.js +1 -0
  186. package/dist/util/astUtils.js +1 -0
  187. package/dist/util/baseTypeUtils.d.ts +2 -0
  188. package/dist/util/baseTypeUtils.js +17 -0
  189. package/dist/util/class-scope-analyzer/classScopeAnalyzer.js +1 -0
  190. package/dist/util/class-scope-analyzer/extractComputedName.js +1 -0
  191. package/dist/util/class-scope-analyzer/types.js +1 -0
  192. package/dist/util/collectUnusedVariables.js +1 -0
  193. package/dist/util/createRule.js +1 -0
  194. package/dist/util/escapeRegExp.js +1 -0
  195. package/dist/util/explicitReturnTypeUtils.js +1 -0
  196. package/dist/util/getBaseTypesOfClassMember.js +1 -0
  197. package/dist/util/getConstraintInfo.js +1 -0
  198. package/dist/util/getESLintCoreRule.js +1 -0
  199. package/dist/util/getFixOrSuggest.js +1 -0
  200. package/dist/util/getForStatementHeadLoc.js +1 -0
  201. package/dist/util/getFunctionHeadLoc.js +1 -0
  202. package/dist/util/getMemberHeadLoc.js +1 -0
  203. package/dist/util/getOperatorPrecedence.js +1 -0
  204. package/dist/util/getParentFunctionNode.js +1 -0
  205. package/dist/util/getStaticStringValue.js +1 -0
  206. package/dist/util/getStringLength.js +1 -0
  207. package/dist/util/getTextWithParentheses.js +1 -0
  208. package/dist/util/getThisExpression.js +1 -0
  209. package/dist/util/getValueOfLiteralType.js +1 -0
  210. package/dist/util/getWrappedCode.js +1 -0
  211. package/dist/util/getWrappingFixer.js +1 -0
  212. package/dist/util/hasOverloadSignatures.js +1 -0
  213. package/dist/util/index.d.ts +2 -0
  214. package/dist/util/index.js +3 -0
  215. package/dist/util/isArrayMethodCallWithPredicate.js +1 -0
  216. package/dist/util/isAssignee.js +1 -0
  217. package/dist/util/isConditionalTest.js +1 -0
  218. package/dist/util/isHigherPrecedenceThanAwait.js +1 -0
  219. package/dist/util/isNodeEqual.js +1 -0
  220. package/dist/util/isNullLiteral.js +1 -0
  221. package/dist/util/isPromiseAggregatorMethod.js +1 -0
  222. package/dist/util/isStartOfArrowFunctionBody.d.ts +2 -0
  223. package/dist/util/isStartOfArrowFunctionBody.js +26 -0
  224. package/dist/util/isStartOfExpressionStatement.js +1 -0
  225. package/dist/util/isTypeImport.js +1 -0
  226. package/dist/util/isUndefinedIdentifier.js +1 -0
  227. package/dist/util/misc.js +1 -0
  228. package/dist/util/needsPrecedingSemiColon.js +1 -0
  229. package/dist/util/needsToBeAwaited.js +1 -0
  230. package/dist/util/objectIterators.js +1 -0
  231. package/dist/util/promiseUtils.js +1 -0
  232. package/dist/util/rangeToLoc.js +1 -0
  233. package/dist/util/referenceContainsTypePredicate.js +1 -0
  234. package/dist/util/referenceContainsTypeQuery.js +1 -0
  235. package/dist/util/scopeUtils.js +1 -0
  236. package/dist/util/skipChainExpression.js +1 -0
  237. package/dist/util/truthinessUtils.js +1 -0
  238. package/dist/util/types.js +1 -0
  239. package/dist/util/walkStatements.js +1 -0
  240. package/package.json +12 -11
@@ -12,9 +12,10 @@ 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
- singleParameterDifference: '{{failureStringStart}} taking `{{type1}} | {{type2}}`.',
18
+ singleParameterDifference: '{{failureStringStart}} taking `{{types}}`.',
18
19
  },
19
20
  schema: [
20
21
  {
@@ -57,20 +58,15 @@ exports.default = (0, util_1.createRule)({
57
58
  case 'single-parameter-difference': {
58
59
  const { p0, p1 } = unify;
59
60
  const lineOfOtherOverload = only2 ? undefined : p0.loc.start.line;
60
- const typeAnnotation0 = isTSParameterProperty(p0)
61
- ? p0.parameter.typeAnnotation
62
- : p0.typeAnnotation;
63
- const typeAnnotation1 = isTSParameterProperty(p1)
64
- ? p1.parameter.typeAnnotation
65
- : p1.typeAnnotation;
61
+ const typeAnnotation0 = getParameterTypeAnnotation(p0);
62
+ const typeAnnotation1 = getParameterTypeAnnotation(p1);
66
63
  context.report({
67
64
  loc: p1.loc,
68
65
  node: p1,
69
66
  messageId: 'singleParameterDifference',
70
67
  data: {
71
68
  failureStringStart: failureStringStart(lineOfOtherOverload),
72
- type1: context.sourceCode.getText(typeAnnotation0?.typeAnnotation),
73
- type2: context.sourceCode.getText(typeAnnotation1?.typeAnnotation),
69
+ types: getUnifiedTypeText(typeAnnotation0, typeAnnotation1),
74
70
  },
75
71
  });
76
72
  break;
@@ -90,7 +86,24 @@ exports.default = (0, util_1.createRule)({
90
86
  failureStringStart: failureStringStart(lineOfOtherOverload),
91
87
  },
92
88
  });
89
+ break;
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;
93
104
  }
105
+ default:
106
+ unify;
94
107
  }
95
108
  }
96
109
  }
@@ -114,7 +127,7 @@ exports.default = (0, util_1.createRule)({
114
127
  return undefined;
115
128
  }
116
129
  return a.params.length === b.params.length
117
- ? signaturesDifferBySingleParameter(a.params, b.params)
130
+ ? signaturesHaveSameAmountOfParameters(a, b)
118
131
  : signaturesDifferByOptionalOrRestParameter(a, b);
119
132
  }
120
133
  function signaturesCanBeUnified(a, b, isTypeParameter) {
@@ -138,15 +151,20 @@ exports.default = (0, util_1.createRule)({
138
151
  return false;
139
152
  }
140
153
  }
141
- return (typesAreEqual(a.returnType, b.returnType) &&
154
+ return (typesAreEqual(a.returnType?.typeAnnotation, b.returnType?.typeAnnotation) &&
142
155
  // Must take the same type parameters.
143
156
  // If one uses a type parameter (from outside) and the other doesn't, they shouldn't be joined.
144
157
  (0, util_1.arraysAreEqual)(aTypeParams, bTypeParams, typeParametersAreEqual) &&
145
158
  signatureUsesTypeParameter(a, isTypeParameter) ===
146
159
  signatureUsesTypeParameter(b, isTypeParameter));
147
160
  }
148
- /** Detect `a(x: number, y: number, z: number)` and `a(x: number, y: string, z: number)`. */
149
- function signaturesDifferBySingleParameter(types1, types2) {
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) {
166
+ const types1 = signature0.params;
167
+ const types2 = signature1.params;
150
168
  const firstParam1 = types1[0];
151
169
  const firstParam2 = types2[0];
152
170
  // exempt signatures with `this: void` from the rule
@@ -155,7 +173,11 @@ exports.default = (0, util_1.createRule)({
155
173
  }
156
174
  const index = getIndexOfFirstDifference(types1, types2, parametersAreEqual);
157
175
  if (index == null) {
158
- return undefined;
176
+ return {
177
+ kind: 'all-parameters-are-same',
178
+ signature0,
179
+ signature1,
180
+ };
159
181
  }
160
182
  // If remaining arrays are equal, the signatures differ by just one parameter type
161
183
  if (!(0, util_1.arraysAreEqual)(types1.slice(index + 1), types2.slice(index + 1), parametersAreEqual)) {
@@ -170,6 +192,39 @@ exports.default = (0, util_1.createRule)({
170
192
  ? { kind: 'single-parameter-difference', p0: a, p1: b }
171
193
  : undefined;
172
194
  }
195
+ function getParameterTypeAnnotation(parameter) {
196
+ return isTSParameterProperty(parameter)
197
+ ? parameter.parameter.typeAnnotation?.typeAnnotation
198
+ : parameter.typeAnnotation?.typeAnnotation;
199
+ }
200
+ function getUnifiedTypeText(type0, type1) {
201
+ // When a signature's parameter has no type annotation
202
+ if (type0 == null || type1 == null) {
203
+ return getUnionMemberText((0, util_1.nullThrows)(type0 ?? type1, 'Expected a type annotation for one of the parameters, but both were undefined'));
204
+ }
205
+ const members = [...getUnionMembers(type0), ...getUnionMembers(type1)];
206
+ const uniqueMembers = [];
207
+ for (const member of members) {
208
+ if (!uniqueMembers.some(other => typesAreEqual(other, member))) {
209
+ uniqueMembers.push(member);
210
+ }
211
+ }
212
+ return uniqueMembers
213
+ .map(member => getUnionMemberText(member))
214
+ .join(' | ');
215
+ }
216
+ function getUnionMembers(type) {
217
+ return type.type === utils_1.AST_NODE_TYPES.TSUnionType
218
+ ? type.types.flatMap(getUnionMembers)
219
+ : [type];
220
+ }
221
+ function getUnionMemberText(type) {
222
+ const text = context.sourceCode.getText(type);
223
+ const needsParentheses = type.type === utils_1.AST_NODE_TYPES.TSConditionalType ||
224
+ type.type === utils_1.AST_NODE_TYPES.TSConstructorType ||
225
+ type.type === utils_1.AST_NODE_TYPES.TSFunctionType;
226
+ return needsParentheses ? `(${text})` : text;
227
+ }
173
228
  function isThisParam(param) {
174
229
  return param?.type === utils_1.AST_NODE_TYPES.Identifier && param.name === 'this';
175
230
  }
@@ -209,15 +264,7 @@ exports.default = (0, util_1.createRule)({
209
264
  }
210
265
  }
211
266
  for (let i = 0; i < minLength; i++) {
212
- const sig1i = sig1[i];
213
- const sig2i = sig2[i];
214
- const typeAnnotation1 = isTSParameterProperty(sig1i)
215
- ? sig1i.parameter.typeAnnotation
216
- : sig1i.typeAnnotation;
217
- const typeAnnotation2 = isTSParameterProperty(sig2i)
218
- ? sig2i.parameter.typeAnnotation
219
- : sig2i.typeAnnotation;
220
- if (!typesAreEqual(typeAnnotation1, typeAnnotation2)) {
267
+ if (!typesAreEqual(getParameterTypeAnnotation(sig1[i]), getParameterTypeAnnotation(sig2[i]))) {
221
268
  return undefined;
222
269
  }
223
270
  }
@@ -265,14 +312,8 @@ exports.default = (0, util_1.createRule)({
265
312
  return node.type === utils_1.AST_NODE_TYPES.TSParameterProperty;
266
313
  }
267
314
  function parametersAreEqual(a, b) {
268
- const typeAnnotationA = isTSParameterProperty(a)
269
- ? a.parameter.typeAnnotation
270
- : a.typeAnnotation;
271
- const typeAnnotationB = isTSParameterProperty(b)
272
- ? b.parameter.typeAnnotation
273
- : b.typeAnnotation;
274
315
  return (parametersHaveEqualSigils(a, b) &&
275
- typesAreEqual(typeAnnotationA, typeAnnotationB));
316
+ typesAreEqual(getParameterTypeAnnotation(a), getParameterTypeAnnotation(b)));
276
317
  }
277
318
  /** True for optional/rest parameters. */
278
319
  function parameterMayBeMissing(p) {
@@ -300,8 +341,7 @@ exports.default = (0, util_1.createRule)({
300
341
  return (a === b ||
301
342
  (a != null &&
302
343
  b != null &&
303
- context.sourceCode.getText(a.typeAnnotation) ===
304
- context.sourceCode.getText(b.typeAnnotation)));
344
+ context.sourceCode.getText(a) === context.sourceCode.getText(b)));
305
345
  }
306
346
  function constraintsAreEqual(a, b) {
307
347
  return a === b || (a != null && a.type === b?.type);
@@ -463,3 +503,4 @@ function isPrivateIdentifier(node) {
463
503
  function isGetterOrSetter(node) {
464
504
  return node.kind === 'get' || node.kind === 'set';
465
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';
@@ -18,6 +19,7 @@ export * from './isAssignee';
18
19
  export * from './isConditionalTest';
19
20
  export * from './isNodeEqual';
20
21
  export * from './isNullLiteral';
22
+ export * from './isStartOfArrowFunctionBody';
21
23
  export * from './isStartOfExpressionStatement';
22
24
  export * from './isUndefinedIdentifier';
23
25
  export * from './misc';
@@ -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);
@@ -35,6 +36,7 @@ __exportStar(require("./isAssignee"), exports);
35
36
  __exportStar(require("./isConditionalTest"), exports);
36
37
  __exportStar(require("./isNodeEqual"), exports);
37
38
  __exportStar(require("./isNullLiteral"), exports);
39
+ __exportStar(require("./isStartOfArrowFunctionBody"), exports);
38
40
  __exportStar(require("./isStartOfExpressionStatement"), exports);
39
41
  __exportStar(require("./isUndefinedIdentifier"), exports);
40
42
  __exportStar(require("./misc"), exports);
@@ -52,3 +54,4 @@ __exportStar(require("./walkStatements"), exports);
52
54
  // this is done for convenience - saves migrating all of the old rules
53
55
  __exportStar(require("@typescript-eslint/type-utils"), exports);
54
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
@@ -0,0 +1,2 @@
1
+ import type { TSESLint, TSESTree } from '@typescript-eslint/utils';
2
+ export declare function isStartOfArrowFunctionBody(node: TSESTree.Node, sourceCode: TSESLint.SourceCode): boolean;