@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,272 @@
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
+ var RestTypeKind;
41
+ (function (RestTypeKind) {
42
+ RestTypeKind[RestTypeKind["Array"] = 0] = "Array";
43
+ RestTypeKind[RestTypeKind["Tuple"] = 1] = "Tuple";
44
+ RestTypeKind[RestTypeKind["Other"] = 2] = "Other";
45
+ })(RestTypeKind || (RestTypeKind = {}));
46
+ class FunctionSignature {
47
+ paramTypes;
48
+ restType;
49
+ hasConsumedArguments = false;
50
+ parameterTypeIndex = 0;
51
+ constructor(paramTypes, restType) {
52
+ this.paramTypes = paramTypes;
53
+ this.restType = restType;
54
+ }
55
+ static create(checker, tsNode) {
56
+ const signature = checker.getResolvedSignature(tsNode);
57
+ if (!signature) {
58
+ return null;
59
+ }
60
+ const paramTypes = [];
61
+ let restType = null;
62
+ const parameters = signature.getParameters();
63
+ for (let i = 0; i < parameters.length; i += 1) {
64
+ const param = parameters[i];
65
+ const type = checker.getTypeOfSymbolAtLocation(param, tsNode);
66
+ const decl = param.getDeclarations()?.[0];
67
+ if (decl && (0, util_1.isRestParameterDeclaration)(decl)) {
68
+ // is a rest param
69
+ if (checker.isArrayType(type)) {
70
+ restType = {
71
+ type: checker.getTypeArguments(type)[0],
72
+ index: i,
73
+ kind: RestTypeKind.Array,
74
+ };
75
+ }
76
+ else if (checker.isTupleType(type)) {
77
+ restType = {
78
+ index: i,
79
+ kind: RestTypeKind.Tuple,
80
+ typeArguments: checker.getTypeArguments(type),
81
+ };
82
+ }
83
+ else {
84
+ restType = {
85
+ type,
86
+ index: i,
87
+ kind: RestTypeKind.Other,
88
+ };
89
+ }
90
+ break;
91
+ }
92
+ paramTypes.push(type);
93
+ }
94
+ return new this(paramTypes, restType);
95
+ }
96
+ consumeRemainingArguments() {
97
+ this.hasConsumedArguments = true;
98
+ }
99
+ getNextParameterType() {
100
+ const index = this.parameterTypeIndex;
101
+ this.parameterTypeIndex += 1;
102
+ if (index >= this.paramTypes.length || this.hasConsumedArguments) {
103
+ if (this.restType == null) {
104
+ return null;
105
+ }
106
+ switch (this.restType.kind) {
107
+ case RestTypeKind.Tuple: {
108
+ const typeArguments = this.restType.typeArguments;
109
+ if (this.hasConsumedArguments) {
110
+ // all types consumed by a rest - just assume it's the last type
111
+ // there is one edge case where this is wrong, but we ignore it because
112
+ // it's rare and really complicated to handle
113
+ // eg: function foo(...a: [number, ...string[], number])
114
+ return typeArguments[typeArguments.length - 1];
115
+ }
116
+ const typeIndex = index - this.restType.index;
117
+ if (typeIndex >= typeArguments.length) {
118
+ return typeArguments[typeArguments.length - 1];
119
+ }
120
+ return typeArguments[typeIndex];
121
+ }
122
+ case RestTypeKind.Array:
123
+ case RestTypeKind.Other:
124
+ return this.restType.type;
125
+ }
126
+ }
127
+ return this.paramTypes[index];
128
+ }
129
+ }
130
+ exports.default = (0, util_1.createRule)({
131
+ name: 'no-unsafe-argument',
132
+ meta: {
133
+ type: 'problem',
134
+ docs: {
135
+ description: 'Disallow calling a function with a value with type `any`',
136
+ recommended: 'recommended',
137
+ requiresTypeChecking: true,
138
+ },
139
+ messages: {
140
+ unsafeArgument: 'Unsafe argument of type {{sender}} assigned to a parameter of type {{receiver}}.',
141
+ unsafeArraySpread: 'Unsafe spread of an {{sender}} array type.',
142
+ unsafeSpread: 'Unsafe spread of an {{sender}} type.',
143
+ unsafeTupleSpread: 'Unsafe spread of a tuple type. The argument is {{sender}} and is assigned to a parameter of type {{receiver}}.',
144
+ },
145
+ schema: [],
146
+ },
147
+ defaultOptions: [],
148
+ create(context) {
149
+ const services = (0, util_1.getParserServices)(context);
150
+ const checker = services.program.getTypeChecker();
151
+ function describeType(type) {
152
+ if (tsutils.isIntrinsicErrorType(type)) {
153
+ return 'error typed';
154
+ }
155
+ return `\`${checker.typeToString(type)}\``;
156
+ }
157
+ function describeTypeForSpread(type) {
158
+ if (checker.isArrayType(type) &&
159
+ tsutils.isIntrinsicErrorType(checker.getTypeArguments(type)[0])) {
160
+ return 'error';
161
+ }
162
+ return describeType(type);
163
+ }
164
+ function describeTypeForTuple(type) {
165
+ if (tsutils.isIntrinsicErrorType(type)) {
166
+ return 'error typed';
167
+ }
168
+ return `of type \`${checker.typeToString(type)}\``;
169
+ }
170
+ function checkUnsafeArguments(args, callee, node) {
171
+ if (args.length === 0) {
172
+ return;
173
+ }
174
+ // ignore any-typed calls as these are caught by no-unsafe-call
175
+ if ((0, util_1.isTypeAnyType)(services.getTypeAtLocation(callee))) {
176
+ return;
177
+ }
178
+ const tsNode = services.esTreeNodeToTSNodeMap.get(node);
179
+ const signature = (0, util_1.nullThrows)(FunctionSignature.create(checker, tsNode), 'Expected to a signature resolved');
180
+ if (node.type === utils_1.AST_NODE_TYPES.TaggedTemplateExpression) {
181
+ // Consumes the first parameter (TemplateStringsArray) of the function called with TaggedTemplateExpression.
182
+ signature.getNextParameterType();
183
+ }
184
+ for (const argument of args) {
185
+ switch (argument.type) {
186
+ // spreads consume
187
+ case utils_1.AST_NODE_TYPES.SpreadElement: {
188
+ const spreadArgType = services.getTypeAtLocation(argument.argument);
189
+ if ((0, util_1.isTypeAnyType)(spreadArgType)) {
190
+ // foo(...any)
191
+ context.report({
192
+ node: argument,
193
+ messageId: 'unsafeSpread',
194
+ data: { sender: describeType(spreadArgType) },
195
+ });
196
+ }
197
+ else if ((0, util_1.isTypeAnyArrayType)(spreadArgType, checker)) {
198
+ // foo(...any[])
199
+ // TODO - we could break down the spread and compare the array type against each argument
200
+ context.report({
201
+ node: argument,
202
+ messageId: 'unsafeArraySpread',
203
+ data: { sender: describeTypeForSpread(spreadArgType) },
204
+ });
205
+ }
206
+ else if (checker.isTupleType(spreadArgType)) {
207
+ // foo(...[tuple1, tuple2])
208
+ const spreadTypeArguments = checker.getTypeArguments(spreadArgType);
209
+ for (const tupleType of spreadTypeArguments) {
210
+ const parameterType = signature.getNextParameterType();
211
+ if (parameterType == null) {
212
+ continue;
213
+ }
214
+ const result = (0, util_1.isUnsafeAssignment)(tupleType, parameterType, checker,
215
+ // we can't pass the individual tuple members in here as this will most likely be a spread variable
216
+ // not a spread array
217
+ null);
218
+ if (result) {
219
+ context.report({
220
+ node: argument,
221
+ messageId: 'unsafeTupleSpread',
222
+ data: {
223
+ receiver: describeType(parameterType),
224
+ sender: describeTypeForTuple(tupleType),
225
+ },
226
+ });
227
+ }
228
+ }
229
+ if (spreadArgType.target.combinedFlags & ts.ElementFlags.Variable) {
230
+ // the last element was a rest - so all remaining defined arguments can be considered "consumed"
231
+ // all remaining arguments should be compared against the rest type (if one exists)
232
+ signature.consumeRemainingArguments();
233
+ }
234
+ }
235
+ else {
236
+ // something that's iterable
237
+ // handling this will be pretty complex - so we ignore it for now
238
+ // TODO - handle generic iterable case
239
+ }
240
+ break;
241
+ }
242
+ default: {
243
+ const parameterType = signature.getNextParameterType();
244
+ if (parameterType == null) {
245
+ continue;
246
+ }
247
+ const argumentType = services.getTypeAtLocation(argument);
248
+ const result = (0, util_1.isUnsafeAssignment)(argumentType, parameterType, checker, argument);
249
+ if (result) {
250
+ context.report({
251
+ node: argument,
252
+ messageId: 'unsafeArgument',
253
+ data: {
254
+ receiver: describeType(parameterType),
255
+ sender: describeType(argumentType),
256
+ },
257
+ });
258
+ }
259
+ }
260
+ }
261
+ }
262
+ }
263
+ return {
264
+ 'CallExpression, NewExpression'(node) {
265
+ checkUnsafeArguments(node.arguments, node.callee, node);
266
+ },
267
+ TaggedTemplateExpression(node) {
268
+ checkUnsafeArguments(node.quasi.expressions, node.tag, node);
269
+ },
270
+ };
271
+ },
272
+ });
@@ -0,0 +1,4 @@
1
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"unsafeArraySpread" | "anyAssignment" | "anyAssignmentThis" | "unsafeArrayPattern" | "unsafeArrayPatternFromTuple" | "unsafeAssignment" | "unsafeObjectPattern", [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
4
+ export default _default;
@@ -0,0 +1,322 @@
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 util_1 = require("../util");
39
+ var ComparisonType;
40
+ (function (ComparisonType) {
41
+ /** Do no assignment comparison */
42
+ ComparisonType[ComparisonType["None"] = 0] = "None";
43
+ /** Use the receiver's type for comparison */
44
+ ComparisonType[ComparisonType["Basic"] = 1] = "Basic";
45
+ /** Use the sender's contextual type for comparison */
46
+ ComparisonType[ComparisonType["Contextual"] = 2] = "Contextual";
47
+ })(ComparisonType || (ComparisonType = {}));
48
+ exports.default = (0, util_1.createRule)({
49
+ name: 'no-unsafe-assignment',
50
+ meta: {
51
+ type: 'problem',
52
+ docs: {
53
+ description: 'Disallow assigning a value with type `any` to variables and properties',
54
+ recommended: 'recommended',
55
+ requiresTypeChecking: true,
56
+ },
57
+ messages: {
58
+ anyAssignment: 'Unsafe assignment of an {{sender}} value.',
59
+ anyAssignmentThis: [
60
+ 'Unsafe assignment of an {{sender}} value. `this` is typed as `any`.',
61
+ 'You can try to fix this by turning on the `noImplicitThis` compiler option, or adding a `this` parameter to the function.',
62
+ ].join('\n'),
63
+ unsafeArrayPattern: 'Unsafe array destructuring of an {{sender}} array value.',
64
+ unsafeArrayPatternFromTuple: 'Unsafe array destructuring of a tuple element with an {{sender}} value.',
65
+ unsafeArraySpread: 'Unsafe spread of an {{sender}} value in an array.',
66
+ unsafeAssignment: 'Unsafe assignment of type {{sender}} to a variable of type {{receiver}}.',
67
+ unsafeObjectPattern: 'Unsafe object destructuring of a property with an {{sender}} value.',
68
+ },
69
+ schema: [],
70
+ },
71
+ defaultOptions: [],
72
+ create(context) {
73
+ const services = (0, util_1.getParserServices)(context);
74
+ const checker = services.program.getTypeChecker();
75
+ const compilerOptions = services.program.getCompilerOptions();
76
+ const isNoImplicitThis = tsutils.isStrictCompilerOptionEnabled(compilerOptions, 'noImplicitThis');
77
+ // returns true if the assignment reported
78
+ function checkArrayDestructureHelper(receiverNode, senderNode) {
79
+ if (receiverNode.type !== utils_1.AST_NODE_TYPES.ArrayPattern) {
80
+ return false;
81
+ }
82
+ const senderTsNode = services.esTreeNodeToTSNodeMap.get(senderNode);
83
+ const senderType = services.getTypeAtLocation(senderNode);
84
+ return checkArrayDestructure(receiverNode, senderType, senderTsNode);
85
+ }
86
+ // returns true if the assignment reported
87
+ function checkArrayDestructure(receiverNode, senderType, senderNode) {
88
+ // any array
89
+ // const [x] = ([] as any[]);
90
+ if ((0, util_1.isTypeAnyArrayType)(senderType, checker)) {
91
+ context.report({
92
+ node: receiverNode,
93
+ messageId: 'unsafeArrayPattern',
94
+ data: createData(senderType),
95
+ });
96
+ return false;
97
+ }
98
+ if (!checker.isTupleType(senderType)) {
99
+ return true;
100
+ }
101
+ const tupleElements = checker.getTypeArguments(senderType);
102
+ // tuple with any
103
+ // const [x] = [1 as any];
104
+ let didReport = false;
105
+ for (let receiverIndex = 0; receiverIndex < receiverNode.elements.length; receiverIndex += 1) {
106
+ const receiverElement = receiverNode.elements[receiverIndex];
107
+ if (!receiverElement) {
108
+ continue;
109
+ }
110
+ if (receiverElement.type === utils_1.AST_NODE_TYPES.RestElement) {
111
+ // don't handle rests as they're not a 1:1 assignment
112
+ continue;
113
+ }
114
+ const senderType = tupleElements[receiverIndex];
115
+ if (!senderType) {
116
+ continue;
117
+ }
118
+ // check for the any type first so we can handle [[[x]]] = [any]
119
+ if ((0, util_1.isTypeAnyType)(senderType)) {
120
+ context.report({
121
+ node: receiverElement,
122
+ messageId: 'unsafeArrayPatternFromTuple',
123
+ data: createData(senderType),
124
+ });
125
+ // we want to report on every invalid element in the tuple
126
+ didReport = true;
127
+ }
128
+ else if (receiverElement.type === utils_1.AST_NODE_TYPES.ArrayPattern) {
129
+ didReport = checkArrayDestructure(receiverElement, senderType, senderNode);
130
+ }
131
+ else if (receiverElement.type === utils_1.AST_NODE_TYPES.ObjectPattern) {
132
+ didReport = checkObjectDestructure(receiverElement, senderType, senderNode);
133
+ }
134
+ }
135
+ return didReport;
136
+ }
137
+ // returns true if the assignment reported
138
+ function checkObjectDestructureHelper(receiverNode, senderNode) {
139
+ if (receiverNode.type !== utils_1.AST_NODE_TYPES.ObjectPattern) {
140
+ return false;
141
+ }
142
+ const senderTsNode = services.esTreeNodeToTSNodeMap.get(senderNode);
143
+ const senderType = services.getTypeAtLocation(senderNode);
144
+ return checkObjectDestructure(receiverNode, senderType, senderTsNode);
145
+ }
146
+ // returns true if the assignment reported
147
+ function checkObjectDestructure(receiverNode, senderType, senderNode) {
148
+ const properties = new Map(senderType
149
+ .getProperties()
150
+ .map(property => [
151
+ property.getName(),
152
+ checker.getTypeOfSymbolAtLocation(property, senderNode),
153
+ ]));
154
+ let didReport = false;
155
+ for (const receiverProperty of receiverNode.properties) {
156
+ if (receiverProperty.type === utils_1.AST_NODE_TYPES.RestElement) {
157
+ // don't bother checking rest
158
+ continue;
159
+ }
160
+ let key;
161
+ if (!receiverProperty.computed) {
162
+ key =
163
+ receiverProperty.key.type === utils_1.AST_NODE_TYPES.Identifier
164
+ ? receiverProperty.key.name
165
+ : String(receiverProperty.key.value);
166
+ }
167
+ else if (receiverProperty.key.type === utils_1.AST_NODE_TYPES.Literal) {
168
+ key = String(receiverProperty.key.value);
169
+ }
170
+ else if (receiverProperty.key.type === utils_1.AST_NODE_TYPES.TemplateLiteral &&
171
+ receiverProperty.key.quasis.length === 1) {
172
+ const cooked = (0, util_1.nullThrows)(receiverProperty.key.quasis[0].value.cooked, 'cooked can only be null inside a TaggedTemplateExpression, which is not possible here');
173
+ key = cooked;
174
+ }
175
+ else {
176
+ // can't figure out the name, so skip it
177
+ continue;
178
+ }
179
+ const senderType = properties.get(key);
180
+ if (!senderType) {
181
+ continue;
182
+ }
183
+ // check for the any type first so we can handle {x: {y: z}} = {x: any}
184
+ if ((0, util_1.isTypeAnyType)(senderType)) {
185
+ context.report({
186
+ node: receiverProperty.value,
187
+ messageId: 'unsafeObjectPattern',
188
+ data: createData(senderType),
189
+ });
190
+ didReport = true;
191
+ }
192
+ else if (receiverProperty.value.type === utils_1.AST_NODE_TYPES.ArrayPattern) {
193
+ didReport = checkArrayDestructure(receiverProperty.value, senderType, senderNode);
194
+ }
195
+ else if (receiverProperty.value.type === utils_1.AST_NODE_TYPES.ObjectPattern) {
196
+ didReport = checkObjectDestructure(receiverProperty.value, senderType, senderNode);
197
+ }
198
+ }
199
+ return didReport;
200
+ }
201
+ // returns true if the assignment reported
202
+ function checkAssignment(receiverNode, senderNode, reportingNode, comparisonType) {
203
+ const receiverTsNode = services.esTreeNodeToTSNodeMap.get(receiverNode);
204
+ const receiverType = comparisonType === ComparisonType.Contextual
205
+ ? ((0, util_1.getContextualType)(checker, receiverTsNode) ??
206
+ services.getTypeAtLocation(receiverNode))
207
+ : services.getTypeAtLocation(receiverNode);
208
+ const senderType = services.getTypeAtLocation(senderNode);
209
+ if ((0, util_1.isTypeAnyType)(senderType)) {
210
+ // handle cases when we assign any ==> unknown.
211
+ if ((0, util_1.isTypeUnknownType)(receiverType)) {
212
+ return false;
213
+ }
214
+ let messageId = 'anyAssignment';
215
+ if (!isNoImplicitThis) {
216
+ // `var foo = this`
217
+ const thisExpression = (0, util_1.getThisExpression)(senderNode);
218
+ if (thisExpression &&
219
+ (0, util_1.isTypeAnyType)((0, util_1.getConstrainedTypeAtLocation)(services, thisExpression))) {
220
+ messageId = 'anyAssignmentThis';
221
+ }
222
+ }
223
+ context.report({
224
+ node: reportingNode,
225
+ messageId,
226
+ data: createData(senderType),
227
+ });
228
+ return true;
229
+ }
230
+ if (comparisonType === ComparisonType.None) {
231
+ return false;
232
+ }
233
+ const result = (0, util_1.isUnsafeAssignment)(senderType, receiverType, checker, senderNode);
234
+ if (!result) {
235
+ return false;
236
+ }
237
+ const { receiver, sender } = result;
238
+ context.report({
239
+ node: reportingNode,
240
+ messageId: 'unsafeAssignment',
241
+ data: createData(sender, receiver),
242
+ });
243
+ return true;
244
+ }
245
+ function getComparisonType(typeAnnotation) {
246
+ return typeAnnotation
247
+ ? // if there's a type annotation, we can do a comparison
248
+ ComparisonType.Basic
249
+ : // no type annotation means the variable's type will just be inferred, thus equal
250
+ ComparisonType.None;
251
+ }
252
+ function createData(senderType, receiverType) {
253
+ if (receiverType) {
254
+ return {
255
+ receiver: `\`${checker.typeToString(receiverType)}\``,
256
+ sender: `\`${checker.typeToString(senderType)}\``,
257
+ };
258
+ }
259
+ return {
260
+ sender: tsutils.isIntrinsicErrorType(senderType)
261
+ ? 'error typed'
262
+ : '`any`',
263
+ };
264
+ }
265
+ return {
266
+ 'AccessorProperty[value != null]'(node) {
267
+ checkAssignment(node.key, node.value, node, getComparisonType(node.typeAnnotation));
268
+ },
269
+ 'AssignmentExpression[operator = "="], AssignmentPattern'(node) {
270
+ let didReport = checkAssignment(node.left, node.right, node,
271
+ // the variable already has some form of a type to compare against
272
+ ComparisonType.Basic);
273
+ if (!didReport) {
274
+ didReport = checkArrayDestructureHelper(node.left, node.right);
275
+ }
276
+ if (!didReport) {
277
+ checkObjectDestructureHelper(node.left, node.right);
278
+ }
279
+ },
280
+ 'PropertyDefinition[value != null]'(node) {
281
+ checkAssignment(node.key, node.value, node, getComparisonType(node.typeAnnotation));
282
+ },
283
+ 'VariableDeclarator[init != null]'(node) {
284
+ const init = (0, util_1.nullThrows)(node.init, util_1.NullThrowsReasons.MissingToken(node.type, 'init'));
285
+ let didReport = checkAssignment(node.id, init, node, getComparisonType(node.id.typeAnnotation));
286
+ if (!didReport) {
287
+ didReport = checkArrayDestructureHelper(node.id, init);
288
+ }
289
+ if (!didReport) {
290
+ checkObjectDestructureHelper(node.id, init);
291
+ }
292
+ },
293
+ // object pattern props are checked via assignments
294
+ ':not(ObjectPattern) > Property'(node) {
295
+ if (node.value.type === utils_1.AST_NODE_TYPES.AssignmentPattern ||
296
+ node.value.type === utils_1.AST_NODE_TYPES.TSEmptyBodyFunctionExpression) {
297
+ // handled by other selector
298
+ return;
299
+ }
300
+ checkAssignment(node.key, node.value, node, ComparisonType.Contextual);
301
+ },
302
+ 'ArrayExpression > SpreadElement'(node) {
303
+ const restType = services.getTypeAtLocation(node.argument);
304
+ if ((0, util_1.isTypeAnyType)(restType) || (0, util_1.isTypeAnyArrayType)(restType, checker)) {
305
+ context.report({
306
+ node,
307
+ messageId: 'unsafeArraySpread',
308
+ data: createData(restType),
309
+ });
310
+ }
311
+ },
312
+ 'JSXAttribute[value != null]'(node) {
313
+ const value = (0, util_1.nullThrows)(node.value, util_1.NullThrowsReasons.MissingToken(node.type, 'value'));
314
+ if (value.type !== utils_1.AST_NODE_TYPES.JSXExpressionContainer ||
315
+ value.expression.type === utils_1.AST_NODE_TYPES.JSXEmptyExpression) {
316
+ return;
317
+ }
318
+ checkAssignment(node.name, value.expression, value.expression, ComparisonType.Contextual);
319
+ },
320
+ };
321
+ },
322
+ });
@@ -0,0 +1,5 @@
1
+ export type MessageIds = 'errorCall' | 'errorCallThis' | 'errorNew' | 'errorTemplateTag' | 'unsafeCall' | 'unsafeCallThis' | 'unsafeNew' | 'unsafeTemplateTag';
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;