@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,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@typescript-eslint/utils");
4
+ const util_1 = require("../util");
5
+ const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
6
+ const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('no-loop-func');
7
+ exports.default = (0, util_1.createRule)({
8
+ name: 'no-loop-func',
9
+ meta: {
10
+ type: 'suggestion',
11
+ // defaultOptions, -- base rule does not use defaultOptions
12
+ docs: {
13
+ description: 'Disallow function declarations that contain unsafe references inside loop statements',
14
+ extendsBaseRule: true,
15
+ },
16
+ hasSuggestions: baseRule.meta.hasSuggestions,
17
+ messages: baseRule.meta.messages,
18
+ schema: [],
19
+ },
20
+ defaultOptions: [],
21
+ create(context) {
22
+ const SKIPPED_IIFE_NODES = new Set();
23
+ /**
24
+ * Gets the containing loop node of a specified node.
25
+ *
26
+ * We don't need to check nested functions, so this ignores those.
27
+ * `Scope.through` contains references of nested functions.
28
+ *
29
+ * @param node An AST node to get.
30
+ * @returns The containing loop node of the specified node, or `null`.
31
+ */
32
+ function getContainingLoopNode(node) {
33
+ for (let currentNode = node; currentNode.parent; currentNode = currentNode.parent) {
34
+ const parent = currentNode.parent;
35
+ switch (parent.type) {
36
+ case utils_1.AST_NODE_TYPES.WhileStatement:
37
+ case utils_1.AST_NODE_TYPES.DoWhileStatement:
38
+ return parent;
39
+ case utils_1.AST_NODE_TYPES.ForStatement:
40
+ // `init` is outside of the loop.
41
+ if (parent.init !== currentNode) {
42
+ return parent;
43
+ }
44
+ break;
45
+ case utils_1.AST_NODE_TYPES.ForInStatement:
46
+ case utils_1.AST_NODE_TYPES.ForOfStatement:
47
+ // `right` is outside of the loop.
48
+ if (parent.right !== currentNode) {
49
+ return parent;
50
+ }
51
+ break;
52
+ case utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
53
+ case utils_1.AST_NODE_TYPES.FunctionExpression:
54
+ case utils_1.AST_NODE_TYPES.FunctionDeclaration:
55
+ // We don't need to check nested functions.
56
+ // We need to check nested functions only in case of IIFE.
57
+ if (SKIPPED_IIFE_NODES.has(parent)) {
58
+ break;
59
+ }
60
+ return null;
61
+ default:
62
+ break;
63
+ }
64
+ }
65
+ return null;
66
+ }
67
+ /**
68
+ * Gets the containing loop node of a given node.
69
+ * If the loop was nested, this returns the most outer loop.
70
+ * @param node A node to get. This is a loop node.
71
+ * @param excludedNode A node that the result node should not include.
72
+ * @returns The most outer loop node.
73
+ */
74
+ function getTopLoopNode(node, excludedNode) {
75
+ const border = excludedNode ? excludedNode.range[1] : 0;
76
+ let retv = node;
77
+ let containingLoopNode = node;
78
+ while (containingLoopNode && containingLoopNode.range[0] >= border) {
79
+ retv = containingLoopNode;
80
+ containingLoopNode = getContainingLoopNode(containingLoopNode);
81
+ }
82
+ return retv;
83
+ }
84
+ /**
85
+ * Checks whether a given reference which refers to an upper scope's variable is
86
+ * safe or not.
87
+ * @param loopNode A containing loop node.
88
+ * @param reference A reference to check.
89
+ * @returns `true` if the reference is safe or not.
90
+ */
91
+ function isSafe(loopNode, reference) {
92
+ const variable = reference.resolved;
93
+ const definition = variable?.defs[0];
94
+ const declaration = definition?.parent;
95
+ const kind = declaration?.type === utils_1.AST_NODE_TYPES.VariableDeclaration
96
+ ? declaration.kind
97
+ : '';
98
+ // type references are all safe
99
+ // this only really matters for global types that haven't been configured
100
+ if (reference.isTypeReference) {
101
+ return true;
102
+ }
103
+ // Variables which are declared by `const` is safe.
104
+ if (kind === 'const') {
105
+ return true;
106
+ }
107
+ /*
108
+ * Variables which are declared by `let` in the loop is safe.
109
+ * It's a different instance from the next loop step's.
110
+ */
111
+ if (kind === 'let' &&
112
+ declaration &&
113
+ declaration.range[0] > loopNode.range[0] &&
114
+ declaration.range[1] < loopNode.range[1]) {
115
+ return true;
116
+ }
117
+ /*
118
+ * WriteReferences which exist after this border are unsafe because those
119
+ * can modify the variable.
120
+ */
121
+ const border = getTopLoopNode(loopNode, kind === 'let' ? declaration : null).range[0];
122
+ /**
123
+ * Checks whether a given reference is safe or not.
124
+ * The reference is every reference of the upper scope's variable we are
125
+ * looking now.
126
+ *
127
+ * It's safe if the reference matches one of the following condition.
128
+ * - is readonly.
129
+ * - doesn't exist inside a local function and after the border.
130
+ *
131
+ * @param upperRef A reference to check.
132
+ * @returns `true` if the reference is safe.
133
+ */
134
+ function isSafeReference(upperRef) {
135
+ const id = upperRef.identifier;
136
+ return (!upperRef.isWrite() ||
137
+ (variable?.scope.variableScope === upperRef.from.variableScope &&
138
+ id.range[0] < border));
139
+ }
140
+ return variable?.references.every(isSafeReference) ?? false;
141
+ }
142
+ /**
143
+ * Reports functions which match the following condition:
144
+ * - has a loop node in ancestors.
145
+ * - has any references which refers to an unsafe variable.
146
+ *
147
+ * @param node The AST node to check.
148
+ */
149
+ function checkForLoops(node) {
150
+ const loopNode = getContainingLoopNode(node);
151
+ if (!loopNode) {
152
+ return;
153
+ }
154
+ const references = context.sourceCode.getScope(node).through;
155
+ if (!(node.async || node.generator) && isIIFE(node)) {
156
+ const isFunctionExpression = node.type === utils_1.AST_NODE_TYPES.FunctionExpression;
157
+ // Check if the function is referenced elsewhere in the code
158
+ const isFunctionReferenced = isFunctionExpression && node.id
159
+ ? references.some(r => r.identifier.name === node.id?.name)
160
+ : false;
161
+ if (!isFunctionReferenced) {
162
+ SKIPPED_IIFE_NODES.add(node);
163
+ return;
164
+ }
165
+ }
166
+ const unsafeRefs = references
167
+ .filter(r => r.resolved && !isSafe(loopNode, r))
168
+ .map(r => r.identifier.name);
169
+ if (unsafeRefs.length > 0) {
170
+ context.report({
171
+ node,
172
+ messageId: 'unsafeRefs',
173
+ data: { varNames: `'${unsafeRefs.join("', '")}'` },
174
+ });
175
+ }
176
+ }
177
+ return {
178
+ ArrowFunctionExpression: checkForLoops,
179
+ FunctionDeclaration: checkForLoops,
180
+ FunctionExpression: checkForLoops,
181
+ };
182
+ },
183
+ });
184
+ function isIIFE(node) {
185
+ return (node.parent.type === utils_1.AST_NODE_TYPES.CallExpression &&
186
+ node.parent.callee === node);
187
+ }
@@ -0,0 +1,9 @@
1
+ import type { InferMessageIdsTypeFromRule, InferOptionsTypeFromRule } from '../util';
2
+ import { getESLintCoreRule } from '../util/getESLintCoreRule';
3
+ declare const baseRule: ReturnType<typeof getESLintCoreRule>;
4
+ export type Options = InferOptionsTypeFromRule<NonNullable<typeof baseRule>>;
5
+ export type MessageIds = InferMessageIdsTypeFromRule<NonNullable<typeof baseRule>>;
6
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noLossOfPrecision", [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
7
+ name: string;
8
+ };
9
+ export default _default;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("../util");
4
+ const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
5
+ const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('no-loss-of-precision');
6
+ exports.default = (0, util_1.createRule)({
7
+ name: 'no-loss-of-precision',
8
+ meta: {
9
+ type: 'problem',
10
+ // defaultOptions, -- base rule does not use defaultOptions
11
+ deprecated: {
12
+ deprecatedSince: '8.0.0',
13
+ replacedBy: [
14
+ {
15
+ rule: {
16
+ name: 'no-loss-of-precision',
17
+ url: 'https://eslint.org/docs/latest/rules/no-loss-of-precision',
18
+ },
19
+ },
20
+ ],
21
+ url: 'https://github.com/typescript-eslint/typescript-eslint/pull/8832',
22
+ },
23
+ docs: {
24
+ description: 'Disallow literal numbers that lose precision',
25
+ extendsBaseRule: true,
26
+ },
27
+ hasSuggestions: baseRule.meta.hasSuggestions,
28
+ messages: baseRule.meta.messages,
29
+ schema: [],
30
+ },
31
+ defaultOptions: [],
32
+ create(context) {
33
+ return baseRule.create(context);
34
+ },
35
+ });
@@ -0,0 +1,29 @@
1
+ import type { TSESTree } from '@typescript-eslint/utils';
2
+ import type { InferMessageIdsTypeFromRule, InferOptionsTypeFromRule } from '../util';
3
+ declare const baseRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noMagic", [{
4
+ detectObjects?: boolean;
5
+ enforceConst?: boolean;
6
+ ignore?: (number | string)[];
7
+ ignoreArrayIndexes?: boolean;
8
+ ignoreEnums?: boolean;
9
+ ignoreNumericLiteralTypes?: boolean;
10
+ ignoreReadonlyClassProperties?: boolean;
11
+ ignoreTypeIndexes?: boolean;
12
+ }], unknown, {
13
+ Literal(node: TSESTree.Literal): void;
14
+ }>;
15
+ export type Options = InferOptionsTypeFromRule<typeof baseRule>;
16
+ export type MessageIds = InferMessageIdsTypeFromRule<typeof baseRule>;
17
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noMagic", [{
18
+ detectObjects?: boolean;
19
+ enforceConst?: boolean;
20
+ ignore?: (number | string)[];
21
+ ignoreArrayIndexes?: boolean;
22
+ ignoreEnums?: boolean;
23
+ ignoreNumericLiteralTypes?: boolean;
24
+ ignoreReadonlyClassProperties?: boolean;
25
+ ignoreTypeIndexes?: boolean;
26
+ }], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
27
+ name: string;
28
+ };
29
+ export default _default;
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@typescript-eslint/utils");
4
+ const util_1 = require("../util");
5
+ const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
6
+ const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('no-magic-numbers');
7
+ // Extend base schema with additional property to ignore TS numeric literal types
8
+ const schema = (0, util_1.deepMerge)(
9
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- https://github.com/microsoft/TypeScript/issues/17002
10
+ Array.isArray(baseRule.meta.schema)
11
+ ? baseRule.meta.schema[0]
12
+ : baseRule.meta.schema, {
13
+ properties: {
14
+ ignoreEnums: {
15
+ type: 'boolean',
16
+ description: 'Whether enums used in TypeScript are considered okay.',
17
+ },
18
+ ignoreNumericLiteralTypes: {
19
+ type: 'boolean',
20
+ description: 'Whether numbers used in TypeScript numeric literal types are considered okay.',
21
+ },
22
+ ignoreReadonlyClassProperties: {
23
+ type: 'boolean',
24
+ description: 'Whether `readonly` class properties are considered okay.',
25
+ },
26
+ ignoreTypeIndexes: {
27
+ type: 'boolean',
28
+ description: 'Whether numbers used to index types are okay.',
29
+ },
30
+ },
31
+ });
32
+ exports.default = (0, util_1.createRule)({
33
+ name: 'no-magic-numbers',
34
+ meta: {
35
+ type: 'suggestion',
36
+ // defaultOptions, -- base rule does not use defaultOptions
37
+ docs: {
38
+ description: 'Disallow magic numbers',
39
+ extendsBaseRule: true,
40
+ frozen: true,
41
+ },
42
+ messages: baseRule.meta.messages,
43
+ schema: [schema],
44
+ },
45
+ defaultOptions: [
46
+ {
47
+ detectObjects: false,
48
+ enforceConst: false,
49
+ ignore: [],
50
+ ignoreArrayIndexes: false,
51
+ ignoreEnums: false,
52
+ ignoreNumericLiteralTypes: false,
53
+ ignoreReadonlyClassProperties: false,
54
+ ignoreTypeIndexes: false,
55
+ },
56
+ ],
57
+ create(context, [options]) {
58
+ const rules = baseRule.create(context);
59
+ const ignored = new Set((options.ignore ?? []).map(normalizeIgnoreValue));
60
+ return {
61
+ Literal(node) {
62
+ // If it’s not a numeric literal we’re not interested
63
+ if (typeof node.value !== 'number' && typeof node.value !== 'bigint') {
64
+ return;
65
+ }
66
+ // This will be `true` if we’re configured to ignore this case (eg. it’s
67
+ // an enum and `ignoreEnums` is `true`). It will be `false` if we’re not
68
+ // configured to ignore this case. It will remain `undefined` if this is
69
+ // not one of our exception cases, and we’ll fall back to the base rule.
70
+ let isAllowed;
71
+ // Check if the node is ignored
72
+ if (ignored.has(normalizeLiteralValue(node, node.value))) {
73
+ isAllowed = true;
74
+ }
75
+ // Check if the node is a TypeScript enum declaration
76
+ else if (isParentTSEnumDeclaration(node)) {
77
+ isAllowed = options.ignoreEnums === true;
78
+ }
79
+ // Check TypeScript specific nodes for Numeric Literal
80
+ else if (isTSNumericLiteralType(node)) {
81
+ isAllowed = options.ignoreNumericLiteralTypes === true;
82
+ }
83
+ // Check if the node is a type index
84
+ else if (isAncestorTSIndexedAccessType(node)) {
85
+ isAllowed = options.ignoreTypeIndexes === true;
86
+ }
87
+ // Check if the node is a readonly class property
88
+ else if (isParentTSReadonlyPropertyDefinition(node)) {
89
+ isAllowed = options.ignoreReadonlyClassProperties === true;
90
+ }
91
+ // If we’ve hit a case where the ignore option is true we can return now
92
+ if (isAllowed === true) {
93
+ return;
94
+ }
95
+ // If the ignore option is *not* set we can report it now
96
+ if (isAllowed === false) {
97
+ let fullNumberNode = node;
98
+ let raw = node.raw;
99
+ if (node.parent.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
100
+ // the base rule only shows the operator for negative numbers
101
+ // https://github.com/eslint/eslint/blob/9dfc8501fb1956c90dc11e6377b4cb38a6bea65d/lib/rules/no-magic-numbers.js#L126
102
+ node.parent.operator === '-') {
103
+ fullNumberNode = node.parent;
104
+ raw = `${node.parent.operator}${node.raw}`;
105
+ }
106
+ context.report({
107
+ node: fullNumberNode,
108
+ messageId: 'noMagic',
109
+ data: { raw },
110
+ });
111
+ return;
112
+ }
113
+ // Let the base rule deal with the rest
114
+ rules.Literal(node);
115
+ },
116
+ };
117
+ },
118
+ });
119
+ /**
120
+ * Convert the value to bigint if it's a string. Otherwise, return the value as-is.
121
+ * @param value The value to normalize.
122
+ * @returns The normalized value.
123
+ */
124
+ function normalizeIgnoreValue(value) {
125
+ if (typeof value === 'string') {
126
+ return BigInt(value.slice(0, -1));
127
+ }
128
+ return value;
129
+ }
130
+ /**
131
+ * Converts the node to its numeric value, handling prefixed numbers (-1 / +1)
132
+ * @param node the node to normalize.
133
+ * @param value the node's value.
134
+ */
135
+ function normalizeLiteralValue(node, value) {
136
+ if (node.parent.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
137
+ ['-', '+'].includes(node.parent.operator) &&
138
+ node.parent.operator === '-') {
139
+ return -value;
140
+ }
141
+ return value;
142
+ }
143
+ /**
144
+ * Gets the true parent of the literal, handling prefixed numbers (-1 / +1)
145
+ */
146
+ function getLiteralParent(node) {
147
+ if (node.parent.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
148
+ ['-', '+'].includes(node.parent.operator)) {
149
+ return node.parent.parent;
150
+ }
151
+ return node.parent;
152
+ }
153
+ /**
154
+ * Checks if the node grandparent is a Typescript type alias declaration
155
+ * @param node the node to be validated.
156
+ * @returns true if the node grandparent is a Typescript type alias declaration
157
+ * @private
158
+ */
159
+ function isGrandparentTSTypeAliasDeclaration(node) {
160
+ return node.parent?.parent?.type === utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration;
161
+ }
162
+ /**
163
+ * Checks if the node grandparent is a Typescript union type and its parent is a type alias declaration
164
+ * @param node the node to be validated.
165
+ * @returns true if the node grandparent is a Typescript union type and its parent is a type alias declaration
166
+ * @private
167
+ */
168
+ function isGrandparentTSUnionType(node) {
169
+ if (node.parent?.parent?.type === utils_1.AST_NODE_TYPES.TSUnionType) {
170
+ return isGrandparentTSTypeAliasDeclaration(node.parent);
171
+ }
172
+ return false;
173
+ }
174
+ /**
175
+ * Checks if the node parent is a Typescript enum member
176
+ * @param node the node to be validated.
177
+ * @returns true if the node parent is a Typescript enum member
178
+ * @private
179
+ */
180
+ function isParentTSEnumDeclaration(node) {
181
+ const parent = getLiteralParent(node);
182
+ return parent?.type === utils_1.AST_NODE_TYPES.TSEnumMember;
183
+ }
184
+ /**
185
+ * Checks if the node parent is a Typescript literal type
186
+ * @param node the node to be validated.
187
+ * @returns true if the node parent is a Typescript literal type
188
+ * @private
189
+ */
190
+ function isParentTSLiteralType(node) {
191
+ return node.parent?.type === utils_1.AST_NODE_TYPES.TSLiteralType;
192
+ }
193
+ /**
194
+ * Checks if the node is a valid TypeScript numeric literal type.
195
+ * @param node the node to be validated.
196
+ * @returns true if the node is a TypeScript numeric literal type.
197
+ * @private
198
+ */
199
+ function isTSNumericLiteralType(node) {
200
+ // For negative numbers, use the parent node
201
+ if (node.parent?.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
202
+ node.parent.operator === '-') {
203
+ node = node.parent;
204
+ }
205
+ // If the parent node is not a TSLiteralType, early return
206
+ if (!isParentTSLiteralType(node)) {
207
+ return false;
208
+ }
209
+ // If the grandparent is a TSTypeAliasDeclaration, ignore
210
+ if (isGrandparentTSTypeAliasDeclaration(node)) {
211
+ return true;
212
+ }
213
+ // If the grandparent is a TSUnionType and it's parent is a TSTypeAliasDeclaration, ignore
214
+ if (isGrandparentTSUnionType(node)) {
215
+ return true;
216
+ }
217
+ return false;
218
+ }
219
+ /**
220
+ * Checks if the node parent is a readonly class property
221
+ * @param node the node to be validated.
222
+ * @returns true if the node parent is a readonly class property
223
+ * @private
224
+ */
225
+ function isParentTSReadonlyPropertyDefinition(node) {
226
+ const parent = getLiteralParent(node);
227
+ if (parent?.type === utils_1.AST_NODE_TYPES.PropertyDefinition && parent.readonly) {
228
+ return true;
229
+ }
230
+ return false;
231
+ }
232
+ /**
233
+ * Checks if the node is part of a type indexed access (eg. Foo[4])
234
+ * @param node the node to be validated.
235
+ * @returns true if the node is part of an indexed access
236
+ * @private
237
+ */
238
+ function isAncestorTSIndexedAccessType(node) {
239
+ // Handle unary expressions (eg. -4)
240
+ let ancestor = getLiteralParent(node);
241
+ // Go up another level while we’re part of a type union (eg. 1 | 2) or
242
+ // intersection (eg. 1 & 2)
243
+ while (ancestor?.parent?.type === utils_1.AST_NODE_TYPES.TSUnionType ||
244
+ ancestor?.parent?.type === utils_1.AST_NODE_TYPES.TSIntersectionType) {
245
+ ancestor = ancestor.parent;
246
+ }
247
+ return ancestor?.parent?.type === utils_1.AST_NODE_TYPES.TSIndexedAccessType;
248
+ }
@@ -0,0 +1,10 @@
1
+ import type { TSESLint } from '@typescript-eslint/utils';
2
+ export type Options = [
3
+ {
4
+ checkNever: boolean;
5
+ }
6
+ ];
7
+ declare const _default: TSESLint.RuleModule<"meaninglessVoidOperator" | "removeVoid", Options, import("../../rules").ESLintPluginDocs, TSESLint.RuleListener> & {
8
+ name: string;
9
+ };
10
+ export default _default;
@@ -0,0 +1,102 @@
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-meaningless-void-operator',
42
+ meta: {
43
+ type: 'suggestion',
44
+ docs: {
45
+ description: 'Disallow the `void` operator except when used to discard a value',
46
+ recommended: 'strict',
47
+ requiresTypeChecking: true,
48
+ },
49
+ fixable: 'code',
50
+ hasSuggestions: true,
51
+ messages: {
52
+ meaninglessVoidOperator: "void operator shouldn't be used on {{type}}; it should convey that a return value is being ignored",
53
+ removeVoid: "Remove 'void'",
54
+ },
55
+ schema: [
56
+ {
57
+ type: 'object',
58
+ additionalProperties: false,
59
+ properties: {
60
+ checkNever: {
61
+ type: 'boolean',
62
+ description: 'Whether to suggest removing `void` when the argument has type `never`.',
63
+ },
64
+ },
65
+ },
66
+ ],
67
+ },
68
+ defaultOptions: [{ checkNever: false }],
69
+ create(context, [{ checkNever }]) {
70
+ const services = utils_1.ESLintUtils.getParserServices(context);
71
+ const checker = services.program.getTypeChecker();
72
+ return {
73
+ 'UnaryExpression[operator="void"]'(node) {
74
+ const fix = (fixer) => {
75
+ return fixer.removeRange([
76
+ context.sourceCode.getTokens(node)[0].range[0],
77
+ context.sourceCode.getTokens(node)[1].range[0],
78
+ ]);
79
+ };
80
+ const argType = services.getTypeAtLocation(node.argument);
81
+ const unionParts = tsutils.unionConstituents(argType);
82
+ if (unionParts.every(part => tsutils.isTypeFlagSet(part, ts.TypeFlags.Void | ts.TypeFlags.Undefined))) {
83
+ context.report({
84
+ node,
85
+ messageId: 'meaninglessVoidOperator',
86
+ data: { type: checker.typeToString(argType) },
87
+ fix,
88
+ });
89
+ }
90
+ else if (checkNever &&
91
+ unionParts.every(part => tsutils.isTypeFlagSet(part, ts.TypeFlags.Void | ts.TypeFlags.Undefined | ts.TypeFlags.Never))) {
92
+ context.report({
93
+ node,
94
+ messageId: 'meaninglessVoidOperator',
95
+ data: { type: checker.typeToString(argType) },
96
+ suggest: [{ messageId: 'removeVoid', fix }],
97
+ });
98
+ }
99
+ },
100
+ };
101
+ },
102
+ });
@@ -0,0 +1,4 @@
1
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"errorMessageClass" | "errorMessageInterface", [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
4
+ export default _default;