@depup/typescript-eslint__eslint-plugin 8.57.1-depup.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 (461) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/changes.json +5 -0
  4. package/dist/configs/eslint-recommended-raw.d.ts +10 -0
  5. package/dist/configs/eslint-recommended-raw.js +46 -0
  6. package/dist/configs/eslintrc/all.d.ts +159 -0
  7. package/dist/configs/eslintrc/all.js +165 -0
  8. package/dist/configs/eslintrc/base.d.ts +8 -0
  9. package/dist/configs/eslintrc/base.js +6 -0
  10. package/dist/configs/eslintrc/disable-type-checked.d.ts +71 -0
  11. package/dist/configs/eslintrc/disable-type-checked.js +73 -0
  12. package/dist/configs/eslintrc/eslint-recommended.d.ts +12 -0
  13. package/dist/configs/eslintrc/eslint-recommended.js +13 -0
  14. package/dist/configs/eslintrc/recommended-type-checked-only.d.ts +33 -0
  15. package/dist/configs/eslintrc/recommended-type-checked-only.js +39 -0
  16. package/dist/configs/eslintrc/recommended-type-checked.d.ts +56 -0
  17. package/dist/configs/eslintrc/recommended-type-checked.js +62 -0
  18. package/dist/configs/eslintrc/recommended.d.ts +29 -0
  19. package/dist/configs/eslintrc/recommended.js +35 -0
  20. package/dist/configs/eslintrc/strict-type-checked-only.d.ts +64 -0
  21. package/dist/configs/eslintrc/strict-type-checked-only.js +79 -0
  22. package/dist/configs/eslintrc/strict-type-checked.d.ts +98 -0
  23. package/dist/configs/eslintrc/strict-type-checked.js +114 -0
  24. package/dist/configs/eslintrc/strict.d.ts +40 -0
  25. package/dist/configs/eslintrc/strict.js +47 -0
  26. package/dist/configs/eslintrc/stylistic-type-checked-only.d.ts +15 -0
  27. package/dist/configs/eslintrc/stylistic-type-checked-only.js +21 -0
  28. package/dist/configs/eslintrc/stylistic-type-checked.d.ts +29 -0
  29. package/dist/configs/eslintrc/stylistic-type-checked.js +35 -0
  30. package/dist/configs/eslintrc/stylistic.d.ts +20 -0
  31. package/dist/configs/eslintrc/stylistic.js +26 -0
  32. package/dist/configs/flat/all.d.ts +7 -0
  33. package/dist/configs/flat/all.js +179 -0
  34. package/dist/configs/flat/base.d.ts +8 -0
  35. package/dist/configs/flat/base.js +17 -0
  36. package/dist/configs/flat/disable-type-checked.d.ts +7 -0
  37. package/dist/configs/flat/disable-type-checked.js +81 -0
  38. package/dist/configs/flat/eslint-recommended.d.ts +9 -0
  39. package/dist/configs/flat/eslint-recommended.js +16 -0
  40. package/dist/configs/flat/recommended-type-checked-only.d.ts +7 -0
  41. package/dist/configs/flat/recommended-type-checked-only.js +53 -0
  42. package/dist/configs/flat/recommended-type-checked.d.ts +7 -0
  43. package/dist/configs/flat/recommended-type-checked.js +76 -0
  44. package/dist/configs/flat/recommended.d.ts +7 -0
  45. package/dist/configs/flat/recommended.js +49 -0
  46. package/dist/configs/flat/strict-type-checked-only.d.ts +7 -0
  47. package/dist/configs/flat/strict-type-checked-only.js +93 -0
  48. package/dist/configs/flat/strict-type-checked.d.ts +7 -0
  49. package/dist/configs/flat/strict-type-checked.js +128 -0
  50. package/dist/configs/flat/strict.d.ts +7 -0
  51. package/dist/configs/flat/strict.js +61 -0
  52. package/dist/configs/flat/stylistic-type-checked-only.d.ts +7 -0
  53. package/dist/configs/flat/stylistic-type-checked-only.js +35 -0
  54. package/dist/configs/flat/stylistic-type-checked.d.ts +7 -0
  55. package/dist/configs/flat/stylistic-type-checked.js +49 -0
  56. package/dist/configs/flat/stylistic.d.ts +7 -0
  57. package/dist/configs/flat/stylistic.js +40 -0
  58. package/dist/index.d.ts +1128 -0
  59. package/dist/index.js +6 -0
  60. package/dist/raw-plugin.d.ts +1152 -0
  61. package/dist/raw-plugin.js +122 -0
  62. package/dist/rules/adjacent-overload-signatures.d.ts +4 -0
  63. package/dist/rules/adjacent-overload-signatures.js +124 -0
  64. package/dist/rules/array-type.d.ts +12 -0
  65. package/dist/rules/array-type.js +232 -0
  66. package/dist/rules/await-thenable.d.ts +6 -0
  67. package/dist/rules/await-thenable.js +228 -0
  68. package/dist/rules/ban-ts-comment.d.ts +17 -0
  69. package/dist/rules/ban-ts-comment.js +195 -0
  70. package/dist/rules/ban-tslint-comment.d.ts +4 -0
  71. package/dist/rules/ban-tslint-comment.js +53 -0
  72. package/dist/rules/class-literal-property-style.d.ts +7 -0
  73. package/dist/rules/class-literal-property-style.js +160 -0
  74. package/dist/rules/class-methods-use-this.d.ts +13 -0
  75. package/dist/rules/class-methods-use-this.js +219 -0
  76. package/dist/rules/consistent-generic-constructors.d.ts +6 -0
  77. package/dist/rules/consistent-generic-constructors.js +126 -0
  78. package/dist/rules/consistent-indexed-object-style.d.ts +7 -0
  79. package/dist/rules/consistent-indexed-object-style.js +256 -0
  80. package/dist/rules/consistent-return.d.ts +18 -0
  81. package/dist/rules/consistent-return.js +135 -0
  82. package/dist/rules/consistent-type-assertions.d.ts +14 -0
  83. package/dist/rules/consistent-type-assertions.js +256 -0
  84. package/dist/rules/consistent-type-definitions.d.ts +5 -0
  85. package/dist/rules/consistent-type-definitions.js +100 -0
  86. package/dist/rules/consistent-type-exports.d.ts +11 -0
  87. package/dist/rules/consistent-type-exports.js +335 -0
  88. package/dist/rules/consistent-type-imports.d.ts +15 -0
  89. package/dist/rules/consistent-type-imports.js +608 -0
  90. package/dist/rules/default-param-last.d.ts +4 -0
  91. package/dist/rules/default-param-last.js +68 -0
  92. package/dist/rules/dot-notation.d.ts +23 -0
  93. package/dist/rules/dot-notation.js +139 -0
  94. package/dist/rules/enum-utils/shared.d.ts +36 -0
  95. package/dist/rules/enum-utils/shared.js +121 -0
  96. package/dist/rules/explicit-function-return-type.d.ts +17 -0
  97. package/dist/rules/explicit-function-return-type.js +179 -0
  98. package/dist/rules/explicit-member-accessibility.d.ts +19 -0
  99. package/dist/rules/explicit-member-accessibility.js +299 -0
  100. package/dist/rules/explicit-module-boundary-types.d.ts +15 -0
  101. package/dist/rules/explicit-module-boundary-types.js +386 -0
  102. package/dist/rules/index.d.ts +448 -0
  103. package/dist/rules/index.js +275 -0
  104. package/dist/rules/init-declarations.d.ts +15 -0
  105. package/dist/rules/init-declarations.js +105 -0
  106. package/dist/rules/max-params.d.ts +25 -0
  107. package/dist/rules/max-params.js +72 -0
  108. package/dist/rules/member-ordering.d.ts +33 -0
  109. package/dist/rules/member-ordering.js +833 -0
  110. package/dist/rules/method-signature-style.d.ts +6 -0
  111. package/dist/rules/method-signature-style.js +186 -0
  112. package/dist/rules/naming-convention-utils/enums.d.ts +79 -0
  113. package/dist/rules/naming-convention-utils/enums.js +102 -0
  114. package/dist/rules/naming-convention-utils/format.d.ts +2 -0
  115. package/dist/rules/naming-convention-utils/format.js +89 -0
  116. package/dist/rules/naming-convention-utils/index.d.ts +6 -0
  117. package/dist/rules/naming-convention-utils/index.js +11 -0
  118. package/dist/rules/naming-convention-utils/parse-options.d.ts +2 -0
  119. package/dist/rules/naming-convention-utils/parse-options.js +69 -0
  120. package/dist/rules/naming-convention-utils/schema.d.ts +2 -0
  121. package/dist/rules/naming-convention-utils/schema.js +305 -0
  122. package/dist/rules/naming-convention-utils/shared.d.ts +5 -0
  123. package/dist/rules/naming-convention-utils/shared.js +16 -0
  124. package/dist/rules/naming-convention-utils/types.d.ts +39 -0
  125. package/dist/rules/naming-convention-utils/types.js +2 -0
  126. package/dist/rules/naming-convention-utils/validator.d.ts +3 -0
  127. package/dist/rules/naming-convention-utils/validator.js +349 -0
  128. package/dist/rules/naming-convention.d.ts +8 -0
  129. package/dist/rules/naming-convention.js +505 -0
  130. package/dist/rules/no-array-constructor.d.ts +4 -0
  131. package/dist/rules/no-array-constructor.js +62 -0
  132. package/dist/rules/no-array-delete.d.ts +6 -0
  133. package/dist/rules/no-array-delete.js +80 -0
  134. package/dist/rules/no-base-to-string.d.ts +11 -0
  135. package/dist/rules/no-base-to-string.js +324 -0
  136. package/dist/rules/no-confusing-non-null-assertion.d.ts +6 -0
  137. package/dist/rules/no-confusing-non-null-assertion.js +142 -0
  138. package/dist/rules/no-confusing-void-expression.d.ts +13 -0
  139. package/dist/rules/no-confusing-void-expression.js +357 -0
  140. package/dist/rules/no-deprecated.d.ts +11 -0
  141. package/dist/rules/no-deprecated.js +402 -0
  142. package/dist/rules/no-dupe-class-members.d.ts +14 -0
  143. package/dist/rules/no-dupe-class-members.js +39 -0
  144. package/dist/rules/no-duplicate-enum-values.d.ts +4 -0
  145. package/dist/rules/no-duplicate-enum-values.js +83 -0
  146. package/dist/rules/no-duplicate-type-constituents.d.ts +11 -0
  147. package/dist/rules/no-duplicate-type-constituents.js +219 -0
  148. package/dist/rules/no-dynamic-delete.d.ts +4 -0
  149. package/dist/rules/no-dynamic-delete.js +42 -0
  150. package/dist/rules/no-empty-function.d.ts +16 -0
  151. package/dist/rules/no-empty-function.js +134 -0
  152. package/dist/rules/no-empty-interface.d.ts +11 -0
  153. package/dist/rules/no-empty-interface.js +102 -0
  154. package/dist/rules/no-empty-object-type.d.ts +15 -0
  155. package/dist/rules/no-empty-object-type.js +143 -0
  156. package/dist/rules/no-explicit-any.d.ts +12 -0
  157. package/dist/rules/no-explicit-any.js +197 -0
  158. package/dist/rules/no-extra-non-null-assertion.d.ts +4 -0
  159. package/dist/rules/no-extra-non-null-assertion.js +35 -0
  160. package/dist/rules/no-extraneous-class.d.ts +13 -0
  161. package/dist/rules/no-extraneous-class.js +120 -0
  162. package/dist/rules/no-floating-promises.d.ts +16 -0
  163. package/dist/rules/no-floating-promises.js +365 -0
  164. package/dist/rules/no-for-in-array.d.ts +4 -0
  165. package/dist/rules/no-for-in-array.js +86 -0
  166. package/dist/rules/no-implied-eval.d.ts +4 -0
  167. package/dist/rules/no-implied-eval.js +152 -0
  168. package/dist/rules/no-import-type-side-effects.d.ts +7 -0
  169. package/dist/rules/no-import-type-side-effects.js +53 -0
  170. package/dist/rules/no-inferrable-types.d.ts +11 -0
  171. package/dist/rules/no-inferrable-types.js +182 -0
  172. package/dist/rules/no-invalid-this.d.ts +15 -0
  173. package/dist/rules/no-invalid-this.js +75 -0
  174. package/dist/rules/no-invalid-void-type.d.ts +9 -0
  175. package/dist/rules/no-invalid-void-type.js +210 -0
  176. package/dist/rules/no-loop-func.d.ts +13 -0
  177. package/dist/rules/no-loop-func.js +187 -0
  178. package/dist/rules/no-loss-of-precision.d.ts +9 -0
  179. package/dist/rules/no-loss-of-precision.js +35 -0
  180. package/dist/rules/no-magic-numbers.d.ts +29 -0
  181. package/dist/rules/no-magic-numbers.js +248 -0
  182. package/dist/rules/no-meaningless-void-operator.d.ts +10 -0
  183. package/dist/rules/no-meaningless-void-operator.js +102 -0
  184. package/dist/rules/no-misused-new.d.ts +4 -0
  185. package/dist/rules/no-misused-new.js +81 -0
  186. package/dist/rules/no-misused-promises.d.ts +21 -0
  187. package/dist/rules/no-misused-promises.js +765 -0
  188. package/dist/rules/no-misused-spread.d.ts +12 -0
  189. package/dist/rules/no-misused-spread.js +260 -0
  190. package/dist/rules/no-mixed-enums.d.ts +4 -0
  191. package/dist/rules/no-mixed-enums.js +200 -0
  192. package/dist/rules/no-namespace.d.ts +11 -0
  193. package/dist/rules/no-namespace.js +60 -0
  194. package/dist/rules/no-non-null-asserted-nullish-coalescing.d.ts +5 -0
  195. package/dist/rules/no-non-null-asserted-nullish-coalescing.js +73 -0
  196. package/dist/rules/no-non-null-asserted-optional-chain.d.ts +5 -0
  197. package/dist/rules/no-non-null-asserted-optional-chain.js +65 -0
  198. package/dist/rules/no-non-null-assertion.d.ts +6 -0
  199. package/dist/rules/no-non-null-assertion.js +93 -0
  200. package/dist/rules/no-redeclare.d.ts +12 -0
  201. package/dist/rules/no-redeclare.js +199 -0
  202. package/dist/rules/no-redundant-type-constituents.d.ts +4 -0
  203. package/dist/rules/no-redundant-type-constituents.js +431 -0
  204. package/dist/rules/no-require-imports.d.ts +11 -0
  205. package/dist/rules/no-require-imports.js +115 -0
  206. package/dist/rules/no-restricted-imports.d.ts +9 -0
  207. package/dist/rules/no-restricted-imports.js +243 -0
  208. package/dist/rules/no-restricted-types.d.ts +16 -0
  209. package/dist/rules/no-restricted-types.js +165 -0
  210. package/dist/rules/no-shadow.d.ts +16 -0
  211. package/dist/rules/no-shadow.js +521 -0
  212. package/dist/rules/no-this-alias.d.ts +11 -0
  213. package/dist/rules/no-this-alias.js +66 -0
  214. package/dist/rules/no-type-alias.d.ts +18 -0
  215. package/dist/rules/no-type-alias.js +268 -0
  216. package/dist/rules/no-unnecessary-boolean-literal-compare.d.ts +12 -0
  217. package/dist/rules/no-unnecessary-boolean-literal-compare.js +263 -0
  218. package/dist/rules/no-unnecessary-condition.d.ts +14 -0
  219. package/dist/rules/no-unnecessary-condition.js +675 -0
  220. package/dist/rules/no-unnecessary-parameter-property-assignment.d.ts +4 -0
  221. package/dist/rules/no-unnecessary-parameter-property-assignment.js +148 -0
  222. package/dist/rules/no-unnecessary-qualifier.d.ts +4 -0
  223. package/dist/rules/no-unnecessary-qualifier.js +156 -0
  224. package/dist/rules/no-unnecessary-template-expression.d.ts +6 -0
  225. package/dist/rules/no-unnecessary-template-expression.js +361 -0
  226. package/dist/rules/no-unnecessary-type-arguments.d.ts +5 -0
  227. package/dist/rules/no-unnecessary-type-arguments.js +197 -0
  228. package/dist/rules/no-unnecessary-type-assertion.d.ts +11 -0
  229. package/dist/rules/no-unnecessary-type-assertion.js +353 -0
  230. package/dist/rules/no-unnecessary-type-constraint.d.ts +5 -0
  231. package/dist/rules/no-unnecessary-type-constraint.js +119 -0
  232. package/dist/rules/no-unnecessary-type-conversion.d.ts +5 -0
  233. package/dist/rules/no-unnecessary-type-conversion.js +356 -0
  234. package/dist/rules/no-unnecessary-type-parameters.d.ts +5 -0
  235. package/dist/rules/no-unnecessary-type-parameters.js +422 -0
  236. package/dist/rules/no-unsafe-argument.d.ts +5 -0
  237. package/dist/rules/no-unsafe-argument.js +272 -0
  238. package/dist/rules/no-unsafe-assignment.d.ts +4 -0
  239. package/dist/rules/no-unsafe-assignment.js +322 -0
  240. package/dist/rules/no-unsafe-call.d.ts +5 -0
  241. package/dist/rules/no-unsafe-call.js +136 -0
  242. package/dist/rules/no-unsafe-declaration-merging.d.ts +4 -0
  243. package/dist/rules/no-unsafe-declaration-merging.js +54 -0
  244. package/dist/rules/no-unsafe-enum-comparison.d.ts +5 -0
  245. package/dist/rules/no-unsafe-enum-comparison.js +192 -0
  246. package/dist/rules/no-unsafe-function-type.d.ts +4 -0
  247. package/dist/rules/no-unsafe-function-type.js +45 -0
  248. package/dist/rules/no-unsafe-member-access.d.ts +10 -0
  249. package/dist/rules/no-unsafe-member-access.js +183 -0
  250. package/dist/rules/no-unsafe-return.d.ts +4 -0
  251. package/dist/rules/no-unsafe-return.js +183 -0
  252. package/dist/rules/no-unsafe-type-assertion.d.ts +4 -0
  253. package/dist/rules/no-unsafe-type-assertion.js +158 -0
  254. package/dist/rules/no-unsafe-unary-minus.d.ts +6 -0
  255. package/dist/rules/no-unsafe-unary-minus.js +78 -0
  256. package/dist/rules/no-unused-expressions.d.ts +19 -0
  257. package/dist/rules/no-unused-expressions.js +64 -0
  258. package/dist/rules/no-unused-private-class-members.d.ts +6 -0
  259. package/dist/rules/no-unused-private-class-members.js +44 -0
  260. package/dist/rules/no-unused-vars.d.ts +24 -0
  261. package/dist/rules/no-unused-vars.js +1033 -0
  262. package/dist/rules/no-use-before-define.d.ts +16 -0
  263. package/dist/rules/no-use-before-define.js +303 -0
  264. package/dist/rules/no-useless-constructor.d.ts +11 -0
  265. package/dist/rules/no-useless-constructor.js +57 -0
  266. package/dist/rules/no-useless-default-assignment.d.ts +11 -0
  267. package/dist/rules/no-useless-default-assignment.js +318 -0
  268. package/dist/rules/no-useless-empty-export.d.ts +4 -0
  269. package/dist/rules/no-useless-empty-export.js +70 -0
  270. package/dist/rules/no-var-requires.d.ts +10 -0
  271. package/dist/rules/no-var-requires.js +83 -0
  272. package/dist/rules/no-wrapper-object-types.d.ts +5 -0
  273. package/dist/rules/no-wrapper-object-types.js +60 -0
  274. package/dist/rules/non-nullable-type-assertion-style.d.ts +4 -0
  275. package/dist/rules/non-nullable-type-assertion-style.js +132 -0
  276. package/dist/rules/only-throw-error.d.ts +14 -0
  277. package/dist/rules/only-throw-error.js +158 -0
  278. package/dist/rules/parameter-properties.d.ts +13 -0
  279. package/dist/rules/parameter-properties.js +164 -0
  280. package/dist/rules/prefer-as-const.d.ts +5 -0
  281. package/dist/rules/prefer-as-const.js +72 -0
  282. package/dist/rules/prefer-destructuring.d.ts +19 -0
  283. package/dist/rules/prefer-destructuring.js +216 -0
  284. package/dist/rules/prefer-enum-initializers.d.ts +6 -0
  285. package/dist/rules/prefer-enum-initializers.js +62 -0
  286. package/dist/rules/prefer-find.d.ts +5 -0
  287. package/dist/rules/prefer-find.js +247 -0
  288. package/dist/rules/prefer-for-of.d.ts +5 -0
  289. package/dist/rules/prefer-for-of.js +115 -0
  290. package/dist/rules/prefer-function-type.d.ts +9 -0
  291. package/dist/rules/prefer-function-type.js +186 -0
  292. package/dist/rules/prefer-includes.d.ts +5 -0
  293. package/dist/rules/prefer-includes.js +242 -0
  294. package/dist/rules/prefer-literal-enum-member.d.ts +6 -0
  295. package/dist/rules/prefer-literal-enum-member.js +116 -0
  296. package/dist/rules/prefer-namespace-keyword.d.ts +4 -0
  297. package/dist/rules/prefer-namespace-keyword.js +42 -0
  298. package/dist/rules/prefer-nullish-coalescing.d.ts +22 -0
  299. package/dist/rules/prefer-nullish-coalescing.js +647 -0
  300. package/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.d.ts +11 -0
  301. package/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.js +2 -0
  302. package/dist/rules/prefer-optional-chain-utils/analyzeChain.d.ts +7 -0
  303. package/dist/rules/prefer-optional-chain-utils/analyzeChain.js +569 -0
  304. package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.d.ts +6 -0
  305. package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js +45 -0
  306. package/dist/rules/prefer-optional-chain-utils/compareNodes.d.ts +15 -0
  307. package/dist/rules/prefer-optional-chain-utils/compareNodes.js +326 -0
  308. package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.d.ts +61 -0
  309. package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js +411 -0
  310. package/dist/rules/prefer-optional-chain.d.ts +5 -0
  311. package/dist/rules/prefer-optional-chain.js +150 -0
  312. package/dist/rules/prefer-promise-reject-errors.d.ts +14 -0
  313. package/dist/rules/prefer-promise-reject-errors.js +124 -0
  314. package/dist/rules/prefer-readonly-parameter-types.d.ts +14 -0
  315. package/dist/rules/prefer-readonly-parameter-types.js +89 -0
  316. package/dist/rules/prefer-readonly.d.ts +10 -0
  317. package/dist/rules/prefer-readonly.js +439 -0
  318. package/dist/rules/prefer-reduce-type-parameter.d.ts +4 -0
  319. package/dist/rules/prefer-reduce-type-parameter.js +114 -0
  320. package/dist/rules/prefer-regexp-exec.d.ts +4 -0
  321. package/dist/rules/prefer-regexp-exec.js +178 -0
  322. package/dist/rules/prefer-return-this-type.d.ts +4 -0
  323. package/dist/rules/prefer-return-this-type.js +154 -0
  324. package/dist/rules/prefer-string-starts-ends-with.d.ts +12 -0
  325. package/dist/rules/prefer-string-starts-ends-with.js +512 -0
  326. package/dist/rules/prefer-ts-expect-error.d.ts +5 -0
  327. package/dist/rules/prefer-ts-expect-error.js +71 -0
  328. package/dist/rules/promise-function-async.d.ts +15 -0
  329. package/dist/rules/promise-function-async.js +204 -0
  330. package/dist/rules/related-getter-setter-pairs.d.ts +4 -0
  331. package/dist/rules/related-getter-setter-pairs.js +71 -0
  332. package/dist/rules/require-array-sort-compare.d.ts +10 -0
  333. package/dist/rules/require-array-sort-compare.js +63 -0
  334. package/dist/rules/require-await.d.ts +4 -0
  335. package/dist/rules/require-await.js +263 -0
  336. package/dist/rules/restrict-plus-operands.d.ts +15 -0
  337. package/dist/rules/restrict-plus-operands.js +231 -0
  338. package/dist/rules/restrict-template-expressions.d.ts +19 -0
  339. package/dist/rules/restrict-template-expressions.js +119 -0
  340. package/dist/rules/return-await.d.ts +5 -0
  341. package/dist/rules/return-await.js +363 -0
  342. package/dist/rules/sort-type-constituents.d.ts +14 -0
  343. package/dist/rules/sort-type-constituents.js +272 -0
  344. package/dist/rules/strict-boolean-expressions.d.ts +19 -0
  345. package/dist/rules/strict-boolean-expressions.js +882 -0
  346. package/dist/rules/strict-void-return.d.ts +10 -0
  347. package/dist/rules/strict-void-return.js +374 -0
  348. package/dist/rules/switch-exhaustiveness-check.d.ts +33 -0
  349. package/dist/rules/switch-exhaustiveness-check.js +291 -0
  350. package/dist/rules/triple-slash-reference.d.ts +12 -0
  351. package/dist/rules/triple-slash-reference.js +110 -0
  352. package/dist/rules/typedef.d.ts +16 -0
  353. package/dist/rules/typedef.js +239 -0
  354. package/dist/rules/unbound-method.d.ts +9 -0
  355. package/dist/rules/unbound-method.js +334 -0
  356. package/dist/rules/unified-signatures.d.ts +11 -0
  357. package/dist/rules/unified-signatures.js +465 -0
  358. package/dist/rules/use-unknown-in-catch-callback-variable.d.ts +6 -0
  359. package/dist/rules/use-unknown-in-catch-callback-variable.js +261 -0
  360. package/dist/util/assertionFunctionUtils.d.ts +16 -0
  361. package/dist/util/assertionFunctionUtils.js +116 -0
  362. package/dist/util/astUtils.d.ts +17 -0
  363. package/dist/util/astUtils.js +143 -0
  364. package/dist/util/baseTypeUtils.d.ts +13 -0
  365. package/dist/util/baseTypeUtils.js +75 -0
  366. package/dist/util/class-scope-analyzer/classScopeAnalyzer.d.ts +52 -0
  367. package/dist/util/class-scope-analyzer/classScopeAnalyzer.js +566 -0
  368. package/dist/util/class-scope-analyzer/extractComputedName.d.ts +17 -0
  369. package/dist/util/class-scope-analyzer/extractComputedName.js +70 -0
  370. package/dist/util/class-scope-analyzer/types.d.ts +12 -0
  371. package/dist/util/class-scope-analyzer/types.js +10 -0
  372. package/dist/util/collectUnusedVariables.d.ts +15 -0
  373. package/dist/util/collectUnusedVariables.js +598 -0
  374. package/dist/util/createRule.d.ts +5 -0
  375. package/dist/util/createRule.js +5 -0
  376. package/dist/util/escapeRegExp.d.ts +1 -0
  377. package/dist/util/escapeRegExp.js +14 -0
  378. package/dist/util/explicitReturnTypeUtils.d.ts +47 -0
  379. package/dist/util/explicitReturnTypeUtils.js +238 -0
  380. package/dist/util/getBaseTypesOfClassMember.d.ts +11 -0
  381. package/dist/util/getBaseTypesOfClassMember.js +31 -0
  382. package/dist/util/getConstraintInfo.d.ts +35 -0
  383. package/dist/util/getConstraintInfo.js +70 -0
  384. package/dist/util/getESLintCoreRule.d.ts +27 -0
  385. package/dist/util/getESLintCoreRule.js +16 -0
  386. package/dist/util/getFixOrSuggest.d.ts +9 -0
  387. package/dist/util/getFixOrSuggest.js +13 -0
  388. package/dist/util/getForStatementHeadLoc.d.ts +17 -0
  389. package/dist/util/getForStatementHeadLoc.js +26 -0
  390. package/dist/util/getFunctionHeadLoc.d.ts +101 -0
  391. package/dist/util/getFunctionHeadLoc.js +161 -0
  392. package/dist/util/getMemberHeadLoc.d.ts +36 -0
  393. package/dist/util/getMemberHeadLoc.js +79 -0
  394. package/dist/util/getOperatorPrecedence.d.ts +39 -0
  395. package/dist/util/getOperatorPrecedence.js +421 -0
  396. package/dist/util/getParentFunctionNode.d.ts +2 -0
  397. package/dist/util/getParentFunctionNode.js +18 -0
  398. package/dist/util/getStaticStringValue.d.ts +11 -0
  399. package/dist/util/getStaticStringValue.js +44 -0
  400. package/dist/util/getStringLength.d.ts +1 -0
  401. package/dist/util/getStringLength.js +14 -0
  402. package/dist/util/getTextWithParentheses.d.ts +3 -0
  403. package/dist/util/getTextWithParentheses.js +16 -0
  404. package/dist/util/getThisExpression.d.ts +2 -0
  405. package/dist/util/getThisExpression.js +24 -0
  406. package/dist/util/getValueOfLiteralType.d.ts +2 -0
  407. package/dist/util/getValueOfLiteralType.js +16 -0
  408. package/dist/util/getWrappedCode.d.ts +2 -0
  409. package/dist/util/getWrappedCode.js +6 -0
  410. package/dist/util/getWrappingFixer.d.ts +42 -0
  411. package/dist/util/getWrappingFixer.js +184 -0
  412. package/dist/util/hasOverloadSignatures.d.ts +6 -0
  413. package/dist/util/hasOverloadSignatures.js +47 -0
  414. package/dist/util/index.d.ts +40 -0
  415. package/dist/util/index.js +53 -0
  416. package/dist/util/isArrayMethodCallWithPredicate.d.ts +3 -0
  417. package/dist/util/isArrayMethodCallWithPredicate.js +64 -0
  418. package/dist/util/isAssignee.d.ts +2 -0
  419. package/dist/util/isAssignee.js +50 -0
  420. package/dist/util/isHigherPrecedenceThanAwait.d.ts +2 -0
  421. package/dist/util/isHigherPrecedenceThanAwait.js +46 -0
  422. package/dist/util/isNodeEqual.d.ts +2 -0
  423. package/dist/util/isNodeEqual.js +25 -0
  424. package/dist/util/isNullLiteral.d.ts +2 -0
  425. package/dist/util/isNullLiteral.js +7 -0
  426. package/dist/util/isPromiseAggregatorMethod.d.ts +3 -0
  427. package/dist/util/isPromiseAggregatorMethod.js +22 -0
  428. package/dist/util/isStartOfExpressionStatement.d.ts +7 -0
  429. package/dist/util/isStartOfExpressionStatement.js +22 -0
  430. package/dist/util/isTypeImport.d.ts +12 -0
  431. package/dist/util/isTypeImport.js +21 -0
  432. package/dist/util/isUndefinedIdentifier.d.ts +2 -0
  433. package/dist/util/isUndefinedIdentifier.js +7 -0
  434. package/dist/util/misc.d.ts +115 -0
  435. package/dist/util/misc.js +270 -0
  436. package/dist/util/needsPrecedingSemiColon.d.ts +11 -0
  437. package/dist/util/needsPrecedingSemiColon.js +97 -0
  438. package/dist/util/needsToBeAwaited.d.ts +7 -0
  439. package/dist/util/needsToBeAwaited.js +63 -0
  440. package/dist/util/objectIterators.d.ts +3 -0
  441. package/dist/util/objectIterators.js +25 -0
  442. package/dist/util/promiseUtils.d.ts +27 -0
  443. package/dist/util/promiseUtils.js +98 -0
  444. package/dist/util/rangeToLoc.d.ts +2 -0
  445. package/dist/util/rangeToLoc.js +9 -0
  446. package/dist/util/referenceContainsTypeQuery.d.ts +5 -0
  447. package/dist/util/referenceContainsTypeQuery.js +19 -0
  448. package/dist/util/scopeUtils.d.ts +3 -0
  449. package/dist/util/scopeUtils.js +10 -0
  450. package/dist/util/skipChainExpression.d.ts +2 -0
  451. package/dist/util/skipChainExpression.js +7 -0
  452. package/dist/util/truthinessUtils.d.ts +3 -0
  453. package/dist/util/truthinessUtils.js +60 -0
  454. package/dist/util/types.d.ts +2 -0
  455. package/dist/util/types.js +2 -0
  456. package/dist/util/walkStatements.d.ts +7 -0
  457. package/dist/util/walkStatements.js +56 -0
  458. package/index.d.ts +13 -0
  459. package/package.json +137 -0
  460. package/raw-plugin.d.ts +25 -0
  461. package/rules.d.ts +87 -0
@@ -0,0 +1,422 @@
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
+ const utils_1 = require("@typescript-eslint/utils");
37
+ const tsutils = __importStar(require("ts-api-utils"));
38
+ const ts = __importStar(require("typescript"));
39
+ const util_1 = require("../util");
40
+ exports.default = (0, util_1.createRule)({
41
+ name: 'no-unnecessary-type-parameters',
42
+ meta: {
43
+ type: 'problem',
44
+ docs: {
45
+ description: "Disallow type parameters that aren't used multiple times",
46
+ recommended: 'strict',
47
+ requiresTypeChecking: true,
48
+ },
49
+ hasSuggestions: true,
50
+ messages: {
51
+ replaceUsagesWithConstraint: 'Replace all usages of type parameter with its constraint.',
52
+ sole: 'Type parameter {{name}} is {{uses}} in the {{descriptor}} signature.',
53
+ },
54
+ schema: [],
55
+ },
56
+ defaultOptions: [],
57
+ create(context) {
58
+ const parserServices = (0, util_1.getParserServices)(context);
59
+ function checkNode(node, descriptor) {
60
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
61
+ const checker = parserServices.program.getTypeChecker();
62
+ let counts;
63
+ // Get the scope in which the type parameters are declared.
64
+ const scope = context.sourceCode.getScope(node);
65
+ for (const typeParameter of tsNode.typeParameters) {
66
+ const esTypeParameter = parserServices.tsNodeToESTreeNodeMap.get(typeParameter);
67
+ const smTypeParameterVariable = (0, util_1.nullThrows)((() => {
68
+ const variable = scope.set.get(esTypeParameter.name.name);
69
+ return variable?.isTypeVariable ? variable : undefined;
70
+ })(), "Type parameter should be present in scope's variables.");
71
+ // Quick path: if the type parameter is used multiple times in the AST,
72
+ // we don't need to dip into types to know it's repeated.
73
+ if (isTypeParameterRepeatedInAST(esTypeParameter, smTypeParameterVariable.references, node.body?.range[0] ?? node.returnType?.range[1])) {
74
+ continue;
75
+ }
76
+ // For any inferred types, we have to dip into type checking.
77
+ counts ??= countTypeParameterUsage(checker, tsNode);
78
+ const identifierCounts = counts.get(typeParameter.name);
79
+ if (!identifierCounts || identifierCounts > 2) {
80
+ continue;
81
+ }
82
+ context.report({
83
+ node: esTypeParameter,
84
+ messageId: 'sole',
85
+ data: {
86
+ name: typeParameter.name.text,
87
+ descriptor,
88
+ uses: identifierCounts === 1 ? 'never used' : 'used only once',
89
+ },
90
+ suggest: [
91
+ {
92
+ messageId: 'replaceUsagesWithConstraint',
93
+ *fix(fixer) {
94
+ // Replace all the usages of the type parameter with the constraint...
95
+ const constraint = esTypeParameter.constraint;
96
+ // special case - a constraint of 'any' actually acts like 'unknown'
97
+ const constraintText = constraint != null &&
98
+ constraint.type !== utils_1.AST_NODE_TYPES.TSAnyKeyword
99
+ ? context.sourceCode.getText(constraint)
100
+ : 'unknown';
101
+ for (const reference of smTypeParameterVariable.references) {
102
+ if (reference.isTypeReference) {
103
+ const referenceNode = reference.identifier;
104
+ const isComplexType = constraint?.type === utils_1.AST_NODE_TYPES.TSUnionType ||
105
+ constraint?.type === utils_1.AST_NODE_TYPES.TSIntersectionType ||
106
+ constraint?.type === utils_1.AST_NODE_TYPES.TSConditionalType;
107
+ const hasMatchingAncestorType = [
108
+ utils_1.AST_NODE_TYPES.TSArrayType,
109
+ utils_1.AST_NODE_TYPES.TSIndexedAccessType,
110
+ utils_1.AST_NODE_TYPES.TSIntersectionType,
111
+ utils_1.AST_NODE_TYPES.TSUnionType,
112
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
113
+ ].some(type => referenceNode.parent.parent.type === type);
114
+ if (isComplexType && hasMatchingAncestorType) {
115
+ const fixResult = (0, util_1.getWrappingFixer)({
116
+ node: referenceNode,
117
+ innerNode: constraint,
118
+ sourceCode: context.sourceCode,
119
+ wrap: constraintNode => constraintNode,
120
+ })(fixer);
121
+ yield fixResult;
122
+ }
123
+ else {
124
+ yield fixer.replaceText(referenceNode, constraintText);
125
+ }
126
+ }
127
+ }
128
+ // ...and remove the type parameter itself from the declaration.
129
+ const typeParamsNode = (0, util_1.nullThrows)(node.typeParameters, 'node should have type parameters');
130
+ // We are assuming at this point that the reported type parameter
131
+ // is present in the inspected node's type parameters.
132
+ if (typeParamsNode.params.length === 1) {
133
+ // Remove the whole <T> generic syntax if we're removing the only type parameter in the list.
134
+ yield fixer.remove(typeParamsNode);
135
+ }
136
+ else {
137
+ const index = typeParamsNode.params.indexOf(esTypeParameter);
138
+ if (index === 0) {
139
+ const commaAfter = (0, util_1.nullThrows)(context.sourceCode.getTokenAfter(esTypeParameter, token => token.value === ','), util_1.NullThrowsReasons.MissingToken('comma', 'type parameter list'));
140
+ const tokenAfterComma = (0, util_1.nullThrows)(context.sourceCode.getTokenAfter(commaAfter, {
141
+ includeComments: true,
142
+ }), util_1.NullThrowsReasons.MissingToken('token', 'type parameter list'));
143
+ yield fixer.removeRange([
144
+ esTypeParameter.range[0],
145
+ tokenAfterComma.range[0],
146
+ ]);
147
+ }
148
+ else {
149
+ const commaBefore = (0, util_1.nullThrows)(context.sourceCode.getTokenBefore(esTypeParameter, token => token.value === ','), util_1.NullThrowsReasons.MissingToken('comma', 'type parameter list'));
150
+ yield fixer.removeRange([
151
+ commaBefore.range[0],
152
+ esTypeParameter.range[1],
153
+ ]);
154
+ }
155
+ }
156
+ },
157
+ },
158
+ ],
159
+ });
160
+ }
161
+ }
162
+ return {
163
+ [[
164
+ 'ArrowFunctionExpression[typeParameters]',
165
+ 'FunctionDeclaration[typeParameters]',
166
+ 'FunctionExpression[typeParameters]',
167
+ 'TSCallSignatureDeclaration[typeParameters]',
168
+ 'TSConstructorType[typeParameters]',
169
+ 'TSDeclareFunction[typeParameters]',
170
+ 'TSEmptyBodyFunctionExpression[typeParameters]',
171
+ 'TSFunctionType[typeParameters]',
172
+ 'TSMethodSignature[typeParameters]',
173
+ ].join(', ')](node) {
174
+ checkNode(node, 'function');
175
+ },
176
+ [[
177
+ 'ClassDeclaration[typeParameters]',
178
+ 'ClassExpression[typeParameters]',
179
+ ].join(', ')](node) {
180
+ checkNode(node, 'class');
181
+ },
182
+ };
183
+ },
184
+ });
185
+ function isTypeParameterRepeatedInAST(node, references, startOfBody = Infinity) {
186
+ let total = 0;
187
+ for (const reference of references) {
188
+ // References inside the type parameter's definition don't count...
189
+ if (reference.identifier.range[0] < node.range[1] &&
190
+ reference.identifier.range[1] > node.range[0]) {
191
+ continue;
192
+ }
193
+ // ...nor references that are outside the declaring signature.
194
+ if (reference.identifier.range[0] > startOfBody) {
195
+ continue;
196
+ }
197
+ // Neither do references that aren't to the same type parameter,
198
+ // namely value-land (non-type) identifiers of the type parameter's type,
199
+ // and references to different type parameters or values.
200
+ if (!reference.isTypeReference ||
201
+ reference.identifier.name !== node.name.name) {
202
+ continue;
203
+ }
204
+ // If the type parameter is being used as a type argument, then we
205
+ // know the type parameter is being reused and can't be reported.
206
+ if (reference.identifier.parent.type === utils_1.AST_NODE_TYPES.TSTypeReference) {
207
+ const grandparent = skipConstituentsUpward(reference.identifier.parent.parent);
208
+ if (grandparent.type === utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation &&
209
+ grandparent.params.includes(reference.identifier.parent) &&
210
+ // Array and ReadonlyArray must be handled carefully
211
+ // let's defer the check to the type-aware phase
212
+ !(grandparent.parent.type === utils_1.AST_NODE_TYPES.TSTypeReference &&
213
+ grandparent.parent.typeName.type === utils_1.AST_NODE_TYPES.Identifier &&
214
+ ['Array', 'ReadonlyArray'].includes(grandparent.parent.typeName.name))) {
215
+ return true;
216
+ }
217
+ }
218
+ total += 1;
219
+ if (total >= 2) {
220
+ return true;
221
+ }
222
+ }
223
+ return false;
224
+ }
225
+ function skipConstituentsUpward(node) {
226
+ switch (node.type) {
227
+ case utils_1.AST_NODE_TYPES.TSIntersectionType:
228
+ case utils_1.AST_NODE_TYPES.TSUnionType:
229
+ return skipConstituentsUpward(node.parent);
230
+ default:
231
+ return node;
232
+ }
233
+ }
234
+ /**
235
+ * Count uses of type parameters in inferred return types.
236
+ * We need to resolve and analyze the inferred return type of a function
237
+ * to see whether it contains additional references to the type parameters.
238
+ * For classes, we need to do this for all their methods.
239
+ */
240
+ function countTypeParameterUsage(checker, node) {
241
+ const counts = new Map();
242
+ if (ts.isClassLike(node)) {
243
+ for (const typeParameter of node.typeParameters) {
244
+ collectTypeParameterUsageCounts(checker, typeParameter, counts, true);
245
+ }
246
+ for (const member of node.members) {
247
+ collectTypeParameterUsageCounts(checker, member, counts, true);
248
+ }
249
+ }
250
+ else {
251
+ collectTypeParameterUsageCounts(checker, node, counts, false);
252
+ }
253
+ return counts;
254
+ }
255
+ /**
256
+ * Populates {@link foundIdentifierUsages} by the number of times each type parameter
257
+ * appears in the given type by checking its uses through its type references.
258
+ * This is essentially a limited subset of the scope manager, but for types.
259
+ */
260
+ function collectTypeParameterUsageCounts(checker, node, foundIdentifierUsages, fromClass) {
261
+ const visitedSymbolLists = new Set();
262
+ const type = checker.getTypeAtLocation(node);
263
+ const typeUsages = new Map();
264
+ const visitedConstraints = new Set();
265
+ let functionLikeType = false;
266
+ let visitedDefault = false;
267
+ if (ts.isCallSignatureDeclaration(node) ||
268
+ ts.isConstructorDeclaration(node)) {
269
+ functionLikeType = true;
270
+ visitSignature(checker.getSignatureFromDeclaration(node));
271
+ }
272
+ if (!functionLikeType) {
273
+ visitType(type, false);
274
+ }
275
+ function visitType(type, assumeMultipleUses, isReturnType = false) {
276
+ // Seeing the same type > (threshold=3 ** 2) times indicates a likely
277
+ // recursive type, like `type T = { [P in keyof T]: T }`.
278
+ // If it's not recursive, then heck, we've seen it enough times that any
279
+ // referenced types have been counted enough to qualify as used.
280
+ if (!type || incrementTypeUsages(type) > 9) {
281
+ return;
282
+ }
283
+ if (tsutils.isTypeParameter(type)) {
284
+ const declaration = type.getSymbol()?.getDeclarations()?.[0];
285
+ if (declaration) {
286
+ incrementIdentifierCount(declaration.name, assumeMultipleUses);
287
+ // Visiting the type of a constrained type parameter will recurse into
288
+ // the constraint. We avoid infinite loops by visiting each only once.
289
+ if (declaration.constraint &&
290
+ !visitedConstraints.has(declaration.constraint)) {
291
+ visitedConstraints.add(declaration.constraint);
292
+ visitType(checker.getTypeAtLocation(declaration.constraint), false);
293
+ }
294
+ if (declaration.default && !visitedDefault) {
295
+ visitedDefault = true;
296
+ visitType(checker.getTypeAtLocation(declaration.default), false);
297
+ }
298
+ }
299
+ }
300
+ // Catch-all: generic type references like `Exclude<T, null>`
301
+ else if (type.aliasTypeArguments) {
302
+ // We don't descend into the definition of the type alias, so we don't
303
+ // know whether it's used multiple times. It's safest to assume it is.
304
+ visitTypesList(type.aliasTypeArguments, true);
305
+ }
306
+ // Intersections and unions like `0 | 1`
307
+ else if (tsutils.isUnionOrIntersectionType(type)) {
308
+ visitTypesList(type.types, assumeMultipleUses);
309
+ }
310
+ // Index access types like `T[K]`
311
+ else if (tsutils.isIndexedAccessType(type)) {
312
+ visitType(type.objectType, assumeMultipleUses);
313
+ visitType(type.indexType, assumeMultipleUses);
314
+ }
315
+ // Tuple types like `[K, V]`
316
+ // Generic type references like `Map<K, V>`
317
+ else if (tsutils.isTypeReference(type)) {
318
+ for (const typeArgument of type.typeArguments ?? []) {
319
+ // currently, if we are in a "class context", everything is accepted
320
+ let thisAssumeMultipleUses = fromClass || assumeMultipleUses;
321
+ // special cases - readonly arrays/tuples are considered only to use the
322
+ // type parameter once. Mutable arrays/tuples are considered to use the
323
+ // type parameter multiple times if and only if they are returned.
324
+ // other kind of type references always count as multiple uses
325
+ thisAssumeMultipleUses ||= tsutils.isTupleType(type.target)
326
+ ? isReturnType && !type.target.readonly
327
+ : checker.isArrayType(type.target)
328
+ ? isReturnType &&
329
+ type.symbol?.getName() === 'Array'
330
+ : true;
331
+ visitType(typeArgument, thisAssumeMultipleUses, isReturnType);
332
+ }
333
+ }
334
+ // Template literals like `a${T}b`
335
+ else if (tsutils.isTemplateLiteralType(type)) {
336
+ for (const subType of type.types) {
337
+ visitType(subType, assumeMultipleUses);
338
+ }
339
+ }
340
+ // Conditional types like `T extends string ? T : never`
341
+ else if (tsutils.isConditionalType(type)) {
342
+ visitType(type.checkType, assumeMultipleUses);
343
+ visitType(type.extendsType, assumeMultipleUses);
344
+ }
345
+ // Catch-all: inferred object types like `{ K: V }`.
346
+ // These catch-alls should be _after_ more specific checks like
347
+ // `isTypeReference` to avoid descending into all the properties of a
348
+ // generic interface/class, e.g. `Map<K, V>`.
349
+ else if (tsutils.isObjectType(type)) {
350
+ const properties = type.getProperties();
351
+ visitSymbolsListOnce(properties, false);
352
+ if (isMappedType(type)) {
353
+ visitType(type.typeParameter, false);
354
+ if (properties.length === 0) {
355
+ // TS treats mapped types like `{[k in "a"]: T}` like `{a: T}`.
356
+ // They have properties, so we need to avoid double-counting.
357
+ visitType(type.templateType ?? type.constraintType, false);
358
+ }
359
+ }
360
+ visitType(type.getNumberIndexType(), true);
361
+ visitType(type.getStringIndexType(), true);
362
+ type.getCallSignatures().forEach(signature => {
363
+ functionLikeType = true;
364
+ visitSignature(signature);
365
+ });
366
+ type.getConstructSignatures().forEach(signature => {
367
+ functionLikeType = true;
368
+ visitSignature(signature);
369
+ });
370
+ }
371
+ // Catch-all: operator types like `keyof T`
372
+ else if (isOperatorType(type)) {
373
+ visitType(type.type, assumeMultipleUses);
374
+ }
375
+ }
376
+ function incrementIdentifierCount(id, assumeMultipleUses) {
377
+ const identifierCount = foundIdentifierUsages.get(id) ?? 0;
378
+ const value = assumeMultipleUses ? 2 : 1;
379
+ foundIdentifierUsages.set(id, identifierCount + value);
380
+ }
381
+ function incrementTypeUsages(type) {
382
+ const count = (typeUsages.get(type) ?? 0) + 1;
383
+ typeUsages.set(type, count);
384
+ return count;
385
+ }
386
+ function visitSignature(signature) {
387
+ if (!signature) {
388
+ return;
389
+ }
390
+ if (signature.thisParameter) {
391
+ visitType(checker.getTypeOfSymbol(signature.thisParameter), false);
392
+ }
393
+ for (const parameter of signature.parameters) {
394
+ visitType(checker.getTypeOfSymbol(parameter), false);
395
+ }
396
+ for (const typeParameter of signature.getTypeParameters() ?? []) {
397
+ visitType(typeParameter, false);
398
+ }
399
+ visitType(checker.getTypePredicateOfSignature(signature)?.type ??
400
+ signature.getReturnType(), false, true);
401
+ }
402
+ function visitSymbolsListOnce(symbols, assumeMultipleUses) {
403
+ if (visitedSymbolLists.has(symbols)) {
404
+ return;
405
+ }
406
+ visitedSymbolLists.add(symbols);
407
+ for (const symbol of symbols) {
408
+ visitType(checker.getTypeOfSymbol(symbol), assumeMultipleUses);
409
+ }
410
+ }
411
+ function visitTypesList(types, assumeMultipleUses) {
412
+ for (const type of types) {
413
+ visitType(type, assumeMultipleUses);
414
+ }
415
+ }
416
+ }
417
+ function isMappedType(type) {
418
+ return 'typeParameter' in type;
419
+ }
420
+ function isOperatorType(type) {
421
+ return 'type' in type && !!type.type;
422
+ }
@@ -0,0 +1,5 @@
1
+ export type MessageIds = 'unsafeArgument' | 'unsafeArraySpread' | 'unsafeSpread' | 'unsafeTupleSpread';
2
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
3
+ name: string;
4
+ };
5
+ export default _default;