eslint 9.22.0 → 9.24.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 (417) hide show
  1. package/README.md +48 -46
  2. package/bin/eslint.js +92 -90
  3. package/conf/default-cli-options.js +22 -22
  4. package/conf/ecma-version.js +1 -1
  5. package/conf/globals.js +97 -98
  6. package/conf/replacements.json +24 -20
  7. package/conf/rule-type-list.json +88 -92
  8. package/lib/api.js +12 -12
  9. package/lib/cli-engine/cli-engine.js +830 -810
  10. package/lib/cli-engine/file-enumerator.js +381 -387
  11. package/lib/cli-engine/formatters/formatters-meta.json +16 -16
  12. package/lib/cli-engine/formatters/html.js +107 -99
  13. package/lib/cli-engine/formatters/json-with-metadata.js +5 -5
  14. package/lib/cli-engine/formatters/json.js +2 -2
  15. package/lib/cli-engine/formatters/stylish.js +96 -75
  16. package/lib/cli-engine/hash.js +1 -1
  17. package/lib/cli-engine/index.js +1 -1
  18. package/lib/cli-engine/lint-result-cache.js +144 -145
  19. package/lib/cli-engine/load-rules.js +16 -16
  20. package/lib/cli.js +638 -457
  21. package/lib/config/config-loader.js +726 -622
  22. package/lib/config/config.js +247 -221
  23. package/lib/config/default-config.js +54 -45
  24. package/lib/config/flat-config-array.js +167 -172
  25. package/lib/config/flat-config-helpers.js +72 -72
  26. package/lib/config/flat-config-schema.js +375 -368
  27. package/lib/config/rule-validator.js +139 -144
  28. package/lib/config-api.js +2 -2
  29. package/lib/eslint/eslint-helpers.js +756 -681
  30. package/lib/eslint/eslint.js +934 -912
  31. package/lib/eslint/index.js +2 -2
  32. package/lib/eslint/legacy-eslint.js +577 -533
  33. package/lib/languages/js/index.js +263 -264
  34. package/lib/languages/js/source-code/index.js +1 -1
  35. package/lib/languages/js/source-code/source-code.js +1128 -1057
  36. package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +39 -35
  37. package/lib/languages/js/source-code/token-store/backward-token-cursor.js +35 -36
  38. package/lib/languages/js/source-code/token-store/cursor.js +36 -36
  39. package/lib/languages/js/source-code/token-store/cursors.js +80 -52
  40. package/lib/languages/js/source-code/token-store/decorative-cursor.js +17 -18
  41. package/lib/languages/js/source-code/token-store/filter-cursor.js +19 -20
  42. package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +40 -32
  43. package/lib/languages/js/source-code/token-store/forward-token-cursor.js +40 -41
  44. package/lib/languages/js/source-code/token-store/index.js +592 -498
  45. package/lib/languages/js/source-code/token-store/limit-cursor.js +17 -18
  46. package/lib/languages/js/source-code/token-store/padded-token-cursor.js +23 -16
  47. package/lib/languages/js/source-code/token-store/skip-cursor.js +19 -20
  48. package/lib/languages/js/source-code/token-store/utils.js +63 -60
  49. package/lib/languages/js/validate-language-options.js +104 -89
  50. package/lib/linter/apply-disable-directives.js +467 -383
  51. package/lib/linter/code-path-analysis/code-path-analyzer.js +650 -672
  52. package/lib/linter/code-path-analysis/code-path-segment.js +215 -216
  53. package/lib/linter/code-path-analysis/code-path-state.js +2118 -2096
  54. package/lib/linter/code-path-analysis/code-path.js +307 -319
  55. package/lib/linter/code-path-analysis/debug-helpers.js +183 -163
  56. package/lib/linter/code-path-analysis/fork-context.js +296 -271
  57. package/lib/linter/code-path-analysis/id-generator.js +22 -23
  58. package/lib/linter/file-context.js +119 -120
  59. package/lib/linter/index.js +3 -3
  60. package/lib/linter/interpolate.js +16 -16
  61. package/lib/linter/linter.js +2403 -2045
  62. package/lib/linter/node-event-generator.js +284 -225
  63. package/lib/linter/report-translator.js +256 -219
  64. package/lib/linter/rule-fixer.js +122 -124
  65. package/lib/linter/rules.js +36 -36
  66. package/lib/linter/safe-emitter.js +18 -18
  67. package/lib/linter/source-code-fixer.js +94 -92
  68. package/lib/linter/timing.js +104 -101
  69. package/lib/linter/vfile.js +70 -73
  70. package/lib/options.js +404 -361
  71. package/lib/rule-tester/index.js +1 -1
  72. package/lib/rule-tester/rule-tester.js +1308 -1046
  73. package/lib/rules/accessor-pairs.js +298 -263
  74. package/lib/rules/array-bracket-newline.js +250 -238
  75. package/lib/rules/array-bracket-spacing.js +263 -224
  76. package/lib/rules/array-callback-return.js +402 -356
  77. package/lib/rules/array-element-newline.js +358 -313
  78. package/lib/rules/arrow-body-style.js +400 -281
  79. package/lib/rules/arrow-parens.js +206 -173
  80. package/lib/rules/arrow-spacing.js +169 -163
  81. package/lib/rules/block-scoped-var.js +125 -123
  82. package/lib/rules/block-spacing.js +186 -176
  83. package/lib/rules/brace-style.js +262 -199
  84. package/lib/rules/callback-return.js +203 -190
  85. package/lib/rules/camelcase.js +403 -392
  86. package/lib/rules/capitalized-comments.js +253 -232
  87. package/lib/rules/class-methods-use-this.js +224 -172
  88. package/lib/rules/comma-dangle.js +379 -346
  89. package/lib/rules/comma-spacing.js +193 -195
  90. package/lib/rules/comma-style.js +375 -316
  91. package/lib/rules/complexity.js +173 -169
  92. package/lib/rules/computed-property-spacing.js +236 -211
  93. package/lib/rules/consistent-return.js +181 -170
  94. package/lib/rules/consistent-this.js +167 -147
  95. package/lib/rules/constructor-super.js +412 -404
  96. package/lib/rules/curly.js +407 -332
  97. package/lib/rules/default-case-last.js +38 -31
  98. package/lib/rules/default-case.js +89 -85
  99. package/lib/rules/default-param-last.js +69 -54
  100. package/lib/rules/dot-location.js +122 -110
  101. package/lib/rules/dot-notation.js +192 -156
  102. package/lib/rules/eol-last.js +122 -120
  103. package/lib/rules/eqeqeq.js +168 -155
  104. package/lib/rules/for-direction.js +146 -121
  105. package/lib/rules/func-call-spacing.js +261 -231
  106. package/lib/rules/func-name-matching.js +293 -209
  107. package/lib/rules/func-names.js +165 -164
  108. package/lib/rules/func-style.js +159 -127
  109. package/lib/rules/function-call-argument-newline.js +152 -129
  110. package/lib/rules/function-paren-newline.js +349 -291
  111. package/lib/rules/generator-star-spacing.js +229 -210
  112. package/lib/rules/getter-return.js +208 -172
  113. package/lib/rules/global-require.js +85 -74
  114. package/lib/rules/grouped-accessor-pairs.js +170 -150
  115. package/lib/rules/guard-for-in.js +72 -63
  116. package/lib/rules/handle-callback-err.js +108 -103
  117. package/lib/rules/id-blacklist.js +182 -199
  118. package/lib/rules/id-denylist.js +168 -187
  119. package/lib/rules/id-length.js +197 -171
  120. package/lib/rules/id-match.js +344 -289
  121. package/lib/rules/implicit-arrow-linebreak.js +102 -79
  122. package/lib/rules/indent-legacy.js +1344 -1118
  123. package/lib/rules/indent.js +2272 -1759
  124. package/lib/rules/index.js +317 -292
  125. package/lib/rules/init-declarations.js +137 -107
  126. package/lib/rules/jsx-quotes.js +94 -82
  127. package/lib/rules/key-spacing.js +750 -633
  128. package/lib/rules/keyword-spacing.js +648 -605
  129. package/lib/rules/line-comment-position.js +142 -128
  130. package/lib/rules/linebreak-style.js +107 -106
  131. package/lib/rules/lines-around-comment.js +540 -448
  132. package/lib/rules/lines-around-directive.js +233 -203
  133. package/lib/rules/lines-between-class-members.js +305 -234
  134. package/lib/rules/logical-assignment-operators.js +582 -399
  135. package/lib/rules/max-classes-per-file.js +69 -68
  136. package/lib/rules/max-depth.js +146 -143
  137. package/lib/rules/max-len.js +473 -434
  138. package/lib/rules/max-lines-per-function.js +201 -176
  139. package/lib/rules/max-lines.js +158 -162
  140. package/lib/rules/max-nested-callbacks.js +102 -104
  141. package/lib/rules/max-params.js +78 -76
  142. package/lib/rules/max-statements-per-line.js +205 -198
  143. package/lib/rules/max-statements.js +168 -164
  144. package/lib/rules/multiline-comment-style.js +637 -479
  145. package/lib/rules/multiline-ternary.js +241 -176
  146. package/lib/rules/new-cap.js +233 -213
  147. package/lib/rules/new-parens.js +88 -79
  148. package/lib/rules/newline-after-var.js +287 -250
  149. package/lib/rules/newline-before-return.js +229 -222
  150. package/lib/rules/newline-per-chained-call.js +142 -127
  151. package/lib/rules/no-alert.js +90 -79
  152. package/lib/rules/no-array-constructor.js +125 -113
  153. package/lib/rules/no-async-promise-executor.js +30 -24
  154. package/lib/rules/no-await-in-loop.js +69 -71
  155. package/lib/rules/no-bitwise.js +124 -100
  156. package/lib/rules/no-buffer-constructor.js +55 -47
  157. package/lib/rules/no-caller.js +39 -33
  158. package/lib/rules/no-case-declarations.js +61 -57
  159. package/lib/rules/no-catch-shadow.js +76 -73
  160. package/lib/rules/no-class-assign.js +51 -48
  161. package/lib/rules/no-compare-neg-zero.js +62 -48
  162. package/lib/rules/no-cond-assign.js +148 -132
  163. package/lib/rules/no-confusing-arrow.js +98 -81
  164. package/lib/rules/no-console.js +202 -199
  165. package/lib/rules/no-const-assign.js +47 -41
  166. package/lib/rules/no-constant-binary-expression.js +500 -405
  167. package/lib/rules/no-constant-condition.js +158 -143
  168. package/lib/rules/no-constructor-return.js +49 -49
  169. package/lib/rules/no-continue.js +25 -27
  170. package/lib/rules/no-control-regex.js +125 -121
  171. package/lib/rules/no-debugger.js +28 -30
  172. package/lib/rules/no-delete-var.js +29 -29
  173. package/lib/rules/no-div-regex.js +47 -41
  174. package/lib/rules/no-dupe-args.js +68 -69
  175. package/lib/rules/no-dupe-class-members.js +102 -89
  176. package/lib/rules/no-dupe-else-if.js +100 -77
  177. package/lib/rules/no-dupe-keys.js +133 -110
  178. package/lib/rules/no-duplicate-case.js +50 -43
  179. package/lib/rules/no-duplicate-imports.js +179 -176
  180. package/lib/rules/no-else-return.js +430 -385
  181. package/lib/rules/no-empty-character-class.js +57 -50
  182. package/lib/rules/no-empty-function.js +127 -128
  183. package/lib/rules/no-empty-pattern.js +63 -58
  184. package/lib/rules/no-empty-static-block.js +37 -35
  185. package/lib/rules/no-empty.js +98 -86
  186. package/lib/rules/no-eq-null.js +37 -32
  187. package/lib/rules/no-eval.js +256 -250
  188. package/lib/rules/no-ex-assign.js +42 -39
  189. package/lib/rules/no-extend-native.js +161 -159
  190. package/lib/rules/no-extra-bind.js +201 -190
  191. package/lib/rules/no-extra-boolean-cast.js +398 -348
  192. package/lib/rules/no-extra-label.js +150 -131
  193. package/lib/rules/no-extra-parens.js +1654 -1325
  194. package/lib/rules/no-extra-semi.js +146 -144
  195. package/lib/rules/no-fallthrough.js +199 -157
  196. package/lib/rules/no-floating-decimal.js +74 -66
  197. package/lib/rules/no-func-assign.js +54 -55
  198. package/lib/rules/no-global-assign.js +78 -73
  199. package/lib/rules/no-implicit-coercion.js +349 -293
  200. package/lib/rules/no-implicit-globals.js +158 -135
  201. package/lib/rules/no-implied-eval.js +140 -112
  202. package/lib/rules/no-import-assign.js +145 -159
  203. package/lib/rules/no-inline-comments.js +101 -95
  204. package/lib/rules/no-inner-declarations.js +115 -101
  205. package/lib/rules/no-invalid-regexp.js +222 -190
  206. package/lib/rules/no-invalid-this.js +123 -117
  207. package/lib/rules/no-irregular-whitespace.js +266 -252
  208. package/lib/rules/no-iterator.js +29 -33
  209. package/lib/rules/no-label-var.js +59 -62
  210. package/lib/rules/no-labels.js +138 -133
  211. package/lib/rules/no-lone-blocks.js +127 -123
  212. package/lib/rules/no-lonely-if.js +108 -77
  213. package/lib/rules/no-loop-func.js +238 -213
  214. package/lib/rules/no-loss-of-precision.js +218 -201
  215. package/lib/rules/no-magic-numbers.js +246 -218
  216. package/lib/rules/no-misleading-character-class.js +499 -446
  217. package/lib/rules/no-mixed-operators.js +188 -182
  218. package/lib/rules/no-mixed-requires.js +253 -240
  219. package/lib/rules/no-mixed-spaces-and-tabs.js +134 -121
  220. package/lib/rules/no-multi-assign.js +46 -44
  221. package/lib/rules/no-multi-spaces.js +163 -143
  222. package/lib/rules/no-multi-str.js +42 -41
  223. package/lib/rules/no-multiple-empty-lines.js +196 -158
  224. package/lib/rules/no-native-reassign.js +90 -85
  225. package/lib/rules/no-negated-condition.js +79 -75
  226. package/lib/rules/no-negated-in-lhs.js +45 -43
  227. package/lib/rules/no-nested-ternary.js +33 -32
  228. package/lib/rules/no-new-func.js +71 -62
  229. package/lib/rules/no-new-native-nonconstructor.js +43 -39
  230. package/lib/rules/no-new-object.js +48 -48
  231. package/lib/rules/no-new-require.js +48 -47
  232. package/lib/rules/no-new-symbol.js +52 -50
  233. package/lib/rules/no-new-wrappers.js +43 -41
  234. package/lib/rules/no-new.js +28 -29
  235. package/lib/rules/no-nonoctal-decimal-escape.js +141 -121
  236. package/lib/rules/no-obj-calls.js +66 -53
  237. package/lib/rules/no-object-constructor.js +104 -97
  238. package/lib/rules/no-octal-escape.js +40 -43
  239. package/lib/rules/no-octal.js +32 -32
  240. package/lib/rules/no-param-reassign.js +235 -217
  241. package/lib/rules/no-path-concat.js +66 -67
  242. package/lib/rules/no-plusplus.js +60 -61
  243. package/lib/rules/no-process-env.js +49 -48
  244. package/lib/rules/no-process-exit.js +54 -50
  245. package/lib/rules/no-promise-executor-return.js +214 -182
  246. package/lib/rules/no-proto.js +26 -29
  247. package/lib/rules/no-prototype-builtins.js +146 -124
  248. package/lib/rules/no-redeclare.js +154 -152
  249. package/lib/rules/no-regex-spaces.js +183 -161
  250. package/lib/rules/no-restricted-exports.js +208 -185
  251. package/lib/rules/no-restricted-globals.js +111 -112
  252. package/lib/rules/no-restricted-imports.js +657 -537
  253. package/lib/rules/no-restricted-modules.js +222 -202
  254. package/lib/rules/no-restricted-properties.js +181 -153
  255. package/lib/rules/no-restricted-syntax.js +56 -52
  256. package/lib/rules/no-return-assign.js +55 -50
  257. package/lib/rules/no-return-await.js +148 -124
  258. package/lib/rules/no-script-url.js +52 -45
  259. package/lib/rules/no-self-assign.js +148 -146
  260. package/lib/rules/no-self-compare.js +63 -46
  261. package/lib/rules/no-sequences.js +135 -116
  262. package/lib/rules/no-setter-return.js +185 -152
  263. package/lib/rules/no-shadow-restricted-names.js +61 -46
  264. package/lib/rules/no-shadow.js +342 -316
  265. package/lib/rules/no-spaced-func.js +82 -77
  266. package/lib/rules/no-sparse-arrays.js +54 -59
  267. package/lib/rules/no-sync.js +61 -60
  268. package/lib/rules/no-tabs.js +83 -72
  269. package/lib/rules/no-template-curly-in-string.js +33 -32
  270. package/lib/rules/no-ternary.js +25 -29
  271. package/lib/rules/no-this-before-super.js +321 -319
  272. package/lib/rules/no-throw-literal.js +31 -36
  273. package/lib/rules/no-trailing-spaces.js +199 -191
  274. package/lib/rules/no-undef-init.js +76 -61
  275. package/lib/rules/no-undef.js +51 -48
  276. package/lib/rules/no-undefined.js +73 -75
  277. package/lib/rules/no-underscore-dangle.js +370 -327
  278. package/lib/rules/no-unexpected-multiline.js +112 -102
  279. package/lib/rules/no-unmodified-loop-condition.js +254 -254
  280. package/lib/rules/no-unneeded-ternary.js +212 -147
  281. package/lib/rules/no-unreachable-loop.js +145 -142
  282. package/lib/rules/no-unreachable.js +255 -248
  283. package/lib/rules/no-unsafe-finally.js +93 -85
  284. package/lib/rules/no-unsafe-negation.js +105 -83
  285. package/lib/rules/no-unsafe-optional-chaining.js +192 -178
  286. package/lib/rules/no-unused-expressions.js +178 -162
  287. package/lib/rules/no-unused-labels.js +139 -124
  288. package/lib/rules/no-unused-private-class-members.js +206 -182
  289. package/lib/rules/no-unused-vars.js +1669 -1449
  290. package/lib/rules/no-use-before-define.js +229 -231
  291. package/lib/rules/no-useless-assignment.js +590 -511
  292. package/lib/rules/no-useless-backreference.js +212 -193
  293. package/lib/rules/no-useless-call.js +58 -53
  294. package/lib/rules/no-useless-catch.js +40 -40
  295. package/lib/rules/no-useless-computed-key.js +144 -115
  296. package/lib/rules/no-useless-concat.js +65 -60
  297. package/lib/rules/no-useless-constructor.js +158 -111
  298. package/lib/rules/no-useless-escape.js +342 -291
  299. package/lib/rules/no-useless-rename.js +183 -156
  300. package/lib/rules/no-useless-return.js +344 -312
  301. package/lib/rules/no-var.js +233 -212
  302. package/lib/rules/no-void.js +50 -48
  303. package/lib/rules/no-warning-comments.js +191 -186
  304. package/lib/rules/no-whitespace-before-property.js +131 -115
  305. package/lib/rules/no-with.js +24 -26
  306. package/lib/rules/nonblock-statement-body-position.js +149 -130
  307. package/lib/rules/object-curly-newline.js +306 -265
  308. package/lib/rules/object-curly-spacing.js +360 -314
  309. package/lib/rules/object-property-newline.js +137 -106
  310. package/lib/rules/object-shorthand.js +607 -502
  311. package/lib/rules/one-var-declaration-per-line.js +104 -100
  312. package/lib/rules/one-var.js +653 -537
  313. package/lib/rules/operator-assignment.js +219 -161
  314. package/lib/rules/operator-linebreak.js +295 -251
  315. package/lib/rules/padded-blocks.js +346 -308
  316. package/lib/rules/padding-line-between-statements.js +443 -439
  317. package/lib/rules/prefer-arrow-callback.js +362 -313
  318. package/lib/rules/prefer-const.js +418 -377
  319. package/lib/rules/prefer-destructuring.js +301 -279
  320. package/lib/rules/prefer-exponentiation-operator.js +176 -133
  321. package/lib/rules/prefer-named-capture-group.js +153 -140
  322. package/lib/rules/prefer-numeric-literals.js +121 -113
  323. package/lib/rules/prefer-object-has-own.js +116 -82
  324. package/lib/rules/prefer-object-spread.js +213 -193
  325. package/lib/rules/prefer-promise-reject-errors.js +140 -122
  326. package/lib/rules/prefer-reflect.js +127 -107
  327. package/lib/rules/prefer-regex-literals.js +578 -466
  328. package/lib/rules/prefer-rest-params.js +79 -80
  329. package/lib/rules/prefer-spread.js +47 -44
  330. package/lib/rules/prefer-template.js +266 -195
  331. package/lib/rules/quote-props.js +373 -307
  332. package/lib/rules/quotes.js +374 -326
  333. package/lib/rules/radix.js +152 -136
  334. package/lib/rules/require-atomic-updates.js +316 -285
  335. package/lib/rules/require-await.js +144 -116
  336. package/lib/rules/require-unicode-regexp.js +282 -177
  337. package/lib/rules/require-yield.js +53 -54
  338. package/lib/rules/rest-spread-spacing.js +128 -116
  339. package/lib/rules/semi-spacing.js +281 -250
  340. package/lib/rules/semi-style.js +176 -134
  341. package/lib/rules/semi.js +456 -436
  342. package/lib/rules/sort-imports.js +306 -233
  343. package/lib/rules/sort-keys.js +219 -188
  344. package/lib/rules/sort-vars.js +127 -93
  345. package/lib/rules/space-before-blocks.js +199 -189
  346. package/lib/rules/space-before-function-paren.js +186 -166
  347. package/lib/rules/space-in-parens.js +359 -288
  348. package/lib/rules/space-infix-ops.js +237 -201
  349. package/lib/rules/space-unary-ops.js +356 -298
  350. package/lib/rules/spaced-comment.js +363 -319
  351. package/lib/rules/strict.js +265 -230
  352. package/lib/rules/switch-colon-spacing.js +130 -122
  353. package/lib/rules/symbol-description.js +45 -48
  354. package/lib/rules/template-curly-spacing.js +148 -142
  355. package/lib/rules/template-tag-spacing.js +98 -88
  356. package/lib/rules/unicode-bom.js +54 -56
  357. package/lib/rules/use-isnan.js +237 -206
  358. package/lib/rules/utils/ast-utils.js +2039 -1860
  359. package/lib/rules/utils/char-source.js +162 -155
  360. package/lib/rules/utils/fix-tracker.js +83 -80
  361. package/lib/rules/utils/keywords.js +59 -59
  362. package/lib/rules/utils/lazy-loading-rule-map.js +79 -76
  363. package/lib/rules/utils/regular-expressions.js +32 -24
  364. package/lib/rules/utils/unicode/index.js +4 -4
  365. package/lib/rules/utils/unicode/is-combining-character.js +1 -1
  366. package/lib/rules/utils/unicode/is-emoji-modifier.js +1 -1
  367. package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +1 -1
  368. package/lib/rules/utils/unicode/is-surrogate-pair.js +1 -1
  369. package/lib/rules/valid-typeof.js +153 -111
  370. package/lib/rules/vars-on-top.js +152 -145
  371. package/lib/rules/wrap-iife.js +204 -191
  372. package/lib/rules/wrap-regex.js +70 -58
  373. package/lib/rules/yield-star-spacing.js +145 -134
  374. package/lib/rules/yoda.js +283 -272
  375. package/lib/services/parser-service.js +35 -35
  376. package/lib/services/processor-service.js +66 -73
  377. package/lib/services/suppressions-service.js +289 -0
  378. package/lib/shared/ajv.js +14 -14
  379. package/lib/shared/assert.js +3 -4
  380. package/lib/shared/ast-utils.js +7 -6
  381. package/lib/shared/deep-merge-arrays.js +24 -22
  382. package/lib/shared/directives.js +3 -2
  383. package/lib/shared/flags.js +50 -17
  384. package/lib/shared/logging.js +24 -25
  385. package/lib/shared/option-utils.js +43 -36
  386. package/lib/shared/runtime-info.js +136 -127
  387. package/lib/shared/serialization.js +27 -27
  388. package/lib/shared/severity.js +22 -22
  389. package/lib/shared/stats.js +5 -5
  390. package/lib/shared/string-utils.js +16 -16
  391. package/lib/shared/text-table.js +28 -27
  392. package/lib/shared/traverser.js +153 -146
  393. package/lib/shared/types.js +4 -27
  394. package/lib/types/index.d.ts +2010 -1559
  395. package/lib/types/rules.d.ts +5253 -5140
  396. package/lib/types/use-at-your-own-risk.d.ts +32 -30
  397. package/lib/unsupported-api.js +5 -5
  398. package/messages/all-files-ignored.js +3 -3
  399. package/messages/all-matched-files-ignored.js +3 -3
  400. package/messages/config-file-missing.js +2 -2
  401. package/messages/config-plugin-missing.js +3 -3
  402. package/messages/config-serialize-function.js +9 -7
  403. package/messages/eslintrc-incompat.js +13 -15
  404. package/messages/eslintrc-plugins.js +3 -4
  405. package/messages/extend-config-missing.js +3 -3
  406. package/messages/failed-to-read-json.js +3 -3
  407. package/messages/file-not-found.js +3 -3
  408. package/messages/invalid-rule-options.js +2 -2
  409. package/messages/invalid-rule-severity.js +2 -2
  410. package/messages/no-config-found.js +3 -3
  411. package/messages/plugin-conflict.js +8 -8
  412. package/messages/plugin-invalid.js +3 -3
  413. package/messages/plugin-missing.js +3 -3
  414. package/messages/print-config-with-directory-path.js +2 -2
  415. package/messages/shared.js +6 -1
  416. package/messages/whitespace-found.js +3 -3
  417. package/package.json +14 -20
package/README.md CHANGED
@@ -20,9 +20,9 @@
20
20
 
21
21
  ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. In many ways, it is similar to JSLint and JSHint with a few exceptions:
22
22
 
23
- * ESLint uses [Espree](https://github.com/eslint/js/tree/main/packages/espree) for JavaScript parsing.
24
- * ESLint uses an AST to evaluate patterns in code.
25
- * ESLint is completely pluggable, every single rule is a plugin and you can add more at runtime.
23
+ - ESLint uses [Espree](https://github.com/eslint/js/tree/main/packages/espree) for JavaScript parsing.
24
+ - ESLint uses an AST to evaluate patterns in code.
25
+ - ESLint is completely pluggable, every single rule is a plugin and you can add more at runtime.
26
26
 
27
27
  ## Table of Contents
28
28
 
@@ -75,21 +75,21 @@ You can configure rules in your `eslint.config.js` files as in this example:
75
75
  import { defineConfig } from "eslint/config";
76
76
 
77
77
  export default defineConfig([
78
- {
79
- files: ["**/*.js", "**/*.cjs", "**/*.mjs"],
80
- rules: {
81
- "prefer-const": "warn",
82
- "no-constant-binary-expression": "error"
83
- }
84
- }
78
+ {
79
+ files: ["**/*.js", "**/*.cjs", "**/*.mjs"],
80
+ rules: {
81
+ "prefer-const": "warn",
82
+ "no-constant-binary-expression": "error",
83
+ },
84
+ },
85
85
  ]);
86
86
  ```
87
87
 
88
88
  The names `"prefer-const"` and `"no-constant-binary-expression"` are the names of [rules](https://eslint.org/docs/rules) in ESLint. The first value is the error level of the rule and can be one of these values:
89
89
 
90
- * `"off"` or `0` - turn the rule off
91
- * `"warn"` or `1` - turn the rule on as a warning (doesn't affect exit code)
92
- * `"error"` or `2` - turn the rule on as an error (exit code will be 1)
90
+ - `"off"` or `0` - turn the rule off
91
+ - `"warn"` or `1` - turn the rule on as a warning (doesn't affect exit code)
92
+ - `"error"` or `2` - turn the rule on as an error (exit code will be 1)
93
93
 
94
94
  The three error levels allow you fine-grained control over how ESLint applies rules (for more configuration options and details, see the [configuration docs](https://eslint.org/docs/latest/use/configure)).
95
95
 
@@ -109,16 +109,16 @@ ESLint adheres to the [OpenJS Foundation Code of Conduct](https://eslint.org/con
109
109
 
110
110
  Before filing an issue, please be sure to read the guidelines for what you're reporting:
111
111
 
112
- * [Bug Report](https://eslint.org/docs/latest/contribute/report-bugs)
113
- * [Propose a New Rule](https://eslint.org/docs/latest/contribute/propose-new-rule)
114
- * [Proposing a Rule Change](https://eslint.org/docs/latest/contribute/propose-rule-change)
115
- * [Request a Change](https://eslint.org/docs/latest/contribute/request-change)
112
+ - [Bug Report](https://eslint.org/docs/latest/contribute/report-bugs)
113
+ - [Propose a New Rule](https://eslint.org/docs/latest/contribute/propose-new-rule)
114
+ - [Proposing a Rule Change](https://eslint.org/docs/latest/contribute/propose-rule-change)
115
+ - [Request a Change](https://eslint.org/docs/latest/contribute/request-change)
116
116
 
117
117
  ## Frequently Asked Questions
118
118
 
119
119
  ### Does ESLint support JSX?
120
120
 
121
- Yes, ESLint natively supports parsing JSX syntax (this must be enabled in [configuration](https://eslint.org/docs/latest/use/configure)). Please note that supporting JSX syntax *is not* the same as supporting React. React applies specific semantics to JSX syntax that ESLint doesn't recognize. We recommend using [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) if you are using React and want React semantics.
121
+ Yes, ESLint natively supports parsing JSX syntax (this must be enabled in [configuration](https://eslint.org/docs/latest/use/configure)). Please note that supporting JSX syntax _is not_ the same as supporting React. React applies specific semantics to JSX syntax that ESLint doesn't recognize. We recommend using [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) if you are using React and want React semantics.
122
122
 
123
123
  ### Does Prettier replace ESLint?
124
124
 
@@ -174,32 +174,32 @@ ESLint takes security seriously. We work hard to ensure that ESLint is safe for
174
174
 
175
175
  ESLint follows [semantic versioning](https://semver.org). However, due to the nature of ESLint as a code quality tool, it's not always clear when a minor or major version bump occurs. To help clarify this for everyone, we've defined the following semantic versioning policy for ESLint:
176
176
 
177
- * Patch release (intended to not break your lint build)
178
- * A bug fix in a rule that results in ESLint reporting fewer linting errors.
179
- * A bug fix to the CLI or core (including formatters).
180
- * Improvements to documentation.
181
- * Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.
182
- * Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone).
183
- * Minor release (might break your lint build)
184
- * A bug fix in a rule that results in ESLint reporting more linting errors.
185
- * A new rule is created.
186
- * A new option to an existing rule that does not result in ESLint reporting more linting errors by default.
187
- * A new addition to an existing rule to support a newly-added language feature (within the last 12 months) that will result in ESLint reporting more linting errors by default.
188
- * An existing rule is deprecated.
189
- * A new CLI capability is created.
190
- * New capabilities to the public API are added (new classes, new methods, new arguments to existing methods, etc.).
191
- * A new formatter is created.
192
- * `eslint:recommended` is updated and will result in strictly fewer linting errors (e.g., rule removals).
193
- * Major release (likely to break your lint build)
194
- * `eslint:recommended` is updated and may result in new linting errors (e.g., rule additions, most rule option updates).
195
- * A new option to an existing rule that results in ESLint reporting more linting errors by default.
196
- * An existing formatter is removed.
197
- * Part of the public API is removed or changed in an incompatible way. The public API includes:
198
- * Rule schemas
199
- * Configuration schema
200
- * Command-line options
201
- * Node.js API
202
- * Rule, formatter, parser, plugin APIs
177
+ - Patch release (intended to not break your lint build)
178
+ - A bug fix in a rule that results in ESLint reporting fewer linting errors.
179
+ - A bug fix to the CLI or core (including formatters).
180
+ - Improvements to documentation.
181
+ - Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.
182
+ - Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone).
183
+ - Minor release (might break your lint build)
184
+ - A bug fix in a rule that results in ESLint reporting more linting errors.
185
+ - A new rule is created.
186
+ - A new option to an existing rule that does not result in ESLint reporting more linting errors by default.
187
+ - A new addition to an existing rule to support a newly-added language feature (within the last 12 months) that will result in ESLint reporting more linting errors by default.
188
+ - An existing rule is deprecated.
189
+ - A new CLI capability is created.
190
+ - New capabilities to the public API are added (new classes, new methods, new arguments to existing methods, etc.).
191
+ - A new formatter is created.
192
+ - `eslint:recommended` is updated and will result in strictly fewer linting errors (e.g., rule removals).
193
+ - Major release (likely to break your lint build)
194
+ - `eslint:recommended` is updated and may result in new linting errors (e.g., rule additions, most rule option updates).
195
+ - A new option to an existing rule that results in ESLint reporting more linting errors by default.
196
+ - An existing formatter is removed.
197
+ - Part of the public API is removed or changed in an incompatible way. The public API includes:
198
+ - Rule schemas
199
+ - Configuration schema
200
+ - Command-line options
201
+ - Node.js API
202
+ - Rule, formatter, parser, plugin APIs
203
203
 
204
204
  According to our policy, any minor update may report more linting errors than the previous release (ex: from a bug fix). As such, we recommend using the tilde (`~`) in `package.json` e.g. `"eslint": "~3.1.0"` to guarantee the results of your builds.
205
205
 
@@ -313,6 +313,7 @@ Percy Ma
313
313
 
314
314
  <!-- NOTE: This section is autogenerated. Do not manually edit.-->
315
315
  <!--sponsorsstart-->
316
+
316
317
  ## Sponsors
317
318
 
318
319
  The following companies, organizations, and individuals support ESLint's ongoing maintenance and development. [Become a Sponsor](https://eslint.org/donate)
@@ -320,12 +321,13 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
320
321
 
321
322
  <h3>Platinum Sponsors</h3>
322
323
  <p><a href="https://automattic.com"><img src="https://images.opencollective.com/automattic/d0ef3e1/logo.png" alt="Automattic" height="128"></a> <a href="https://www.airbnb.com/"><img src="https://images.opencollective.com/airbnb/d327d66/logo.png" alt="Airbnb" height="128"></a></p><h3>Gold Sponsors</h3>
323
- <p><a href="https://qlty.sh/"><img src="https://images.opencollective.com/qltysh/33d157d/logo.png" alt="Qlty Software" height="96"></a> <a href="https://trunk.io/"><img src="https://images.opencollective.com/trunkio/fb92d60/avatar.png" alt="trunk.io" height="96"></a> <a href="https://shopify.engineering/"><img src="https://avatars.githubusercontent.com/u/8085" alt="Shopify" height="96"></a></p><h3>Silver Sponsors</h3>
324
- <p><a href="https://vite.dev/"><img src="https://images.opencollective.com/vite/e6d15e1/logo.png" alt="Vite" height="64"></a> <a href="https://www.jetbrains.com/"><img src="https://images.opencollective.com/jetbrains/fe76f99/logo.png" alt="JetBrains" height="64"></a> <a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a> <a href="https://stackblitz.com"><img src="https://avatars.githubusercontent.com/u/28635252" alt="StackBlitz" height="64"></a></p><h3>Bronze Sponsors</h3>
324
+ <p><a href="https://qlty.sh/"><img src="https://images.opencollective.com/qltysh/33d157d/logo.png" alt="Qlty Software" height="96"></a> <a href="https://trunk.io/"><img src="https://images.opencollective.com/trunkio/fb92d60/avatar.png" alt="trunk.io" height="96"></a></p><h3>Silver Sponsors</h3>
325
+ <p><a href="https://vite.dev/"><img src="https://images.opencollective.com/vite/e6d15e1/logo.png" alt="Vite" height="64"></a> <a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a> <a href="https://stackblitz.com"><img src="https://avatars.githubusercontent.com/u/28635252" alt="StackBlitz" height="64"></a></p><h3>Bronze Sponsors</h3>
325
326
  <p><a href="https://cybozu.co.jp/"><img src="https://images.opencollective.com/cybozu/933e46d/logo.png" alt="Cybozu" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="https://icons8.com/"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8" height="32"></a> <a href="https://discord.com"><img src="https://images.opencollective.com/discordapp/f9645d9/logo.png" alt="Discord" height="32"></a> <a href="https://www.gitbook.com"><img src="https://avatars.githubusercontent.com/u/7111340" alt="GitBook" height="32"></a> <a href="https://nolebase.ayaka.io"><img src="https://avatars.githubusercontent.com/u/11081491" alt="Neko" height="32"></a> <a href="https://nx.dev"><img src="https://avatars.githubusercontent.com/u/23692104" alt="Nx" height="32"></a> <a href="https://opensource.mercedes-benz.com/"><img src="https://avatars.githubusercontent.com/u/34240465" alt="Mercedes-Benz Group" height="32"></a> <a href="https://herocoders.com"><img src="https://avatars.githubusercontent.com/u/37549774" alt="HeroCoders" height="32"></a> <a href="https://www.lambdatest.com"><img src="https://avatars.githubusercontent.com/u/171592363" alt="LambdaTest" height="32"></a></p>
326
327
  <h3>Technology Sponsors</h3>
327
328
  Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.
328
329
  <p><a href="https://netlify.com"><img src="https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/netlify-icon.svg" alt="Netlify" height="32"></a> <a href="https://algolia.com"><img src="https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/algolia-icon.svg" alt="Algolia" height="32"></a> <a href="https://1password.com"><img src="https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/1password-icon.svg" alt="1Password" height="32"></a></p>
330
+
329
331
  <!--sponsorsend-->
330
332
 
331
333
  [tidelift]: https://tidelift.com/funding/github/npm/eslint
package/bin/eslint.js CHANGED
@@ -16,7 +16,7 @@ mod.enableCompileCache?.();
16
16
 
17
17
  // must do this initialization *before* other requires in order to work
18
18
  if (process.argv.includes("--debug")) {
19
- require("debug").enable("eslint:*,-eslint:code-path,eslintrc:*");
19
+ require("debug").enable("eslint:*,-eslint:code-path,eslintrc:*");
20
20
  }
21
21
 
22
22
  //------------------------------------------------------------------------------
@@ -45,20 +45,20 @@ if (process.argv.includes("--debug")) {
45
45
  * @returns {Promise<string>} The read text.
46
46
  */
47
47
  function readStdin() {
48
- return new Promise((resolve, reject) => {
49
- let content = "";
50
- let chunk = "";
51
-
52
- process.stdin
53
- .setEncoding("utf8")
54
- .on("readable", () => {
55
- while ((chunk = process.stdin.read()) !== null) {
56
- content += chunk;
57
- }
58
- })
59
- .on("end", () => resolve(content))
60
- .on("error", reject);
61
- });
48
+ return new Promise((resolve, reject) => {
49
+ let content = "";
50
+ let chunk = "";
51
+
52
+ process.stdin
53
+ .setEncoding("utf8")
54
+ .on("readable", () => {
55
+ while ((chunk = process.stdin.read()) !== null) {
56
+ content += chunk;
57
+ }
58
+ })
59
+ .on("end", () => resolve(content))
60
+ .on("error", reject);
61
+ });
62
62
  }
63
63
 
64
64
  /**
@@ -67,34 +67,32 @@ function readStdin() {
67
67
  * @returns {string} The error message.
68
68
  */
69
69
  function getErrorMessage(error) {
70
-
71
- // Lazy loading because this is used only if an error happened.
72
- const util = require("node:util");
73
-
74
- // Foolproof -- third-party module might throw non-object.
75
- if (typeof error !== "object" || error === null) {
76
- return String(error);
77
- }
78
-
79
- // Use templates if `error.messageTemplate` is present.
80
- if (typeof error.messageTemplate === "string") {
81
- try {
82
- const template = require(`../messages/${error.messageTemplate}.js`);
83
-
84
- return template(error.messageData || {});
85
- } catch {
86
-
87
- // Ignore template error then fallback to use `error.stack`.
88
- }
89
- }
90
-
91
- // Use the stacktrace if it's an error object.
92
- if (typeof error.stack === "string") {
93
- return error.stack;
94
- }
95
-
96
- // Otherwise, dump the object.
97
- return util.format("%o", error);
70
+ // Lazy loading because this is used only if an error happened.
71
+ const util = require("node:util");
72
+
73
+ // Foolproof -- third-party module might throw non-object.
74
+ if (typeof error !== "object" || error === null) {
75
+ return String(error);
76
+ }
77
+
78
+ // Use templates if `error.messageTemplate` is present.
79
+ if (typeof error.messageTemplate === "string") {
80
+ try {
81
+ const template = require(`../messages/${error.messageTemplate}.js`);
82
+
83
+ return template(error.messageData || {});
84
+ } catch {
85
+ // Ignore template error then fallback to use `error.stack`.
86
+ }
87
+ }
88
+
89
+ // Use the stacktrace if it's an error object.
90
+ if (typeof error.stack === "string") {
91
+ return error.stack;
92
+ }
93
+
94
+ // Otherwise, dump the object.
95
+ return util.format("%o", error);
98
96
  }
99
97
 
100
98
  /**
@@ -116,21 +114,21 @@ let hadFatalError = false;
116
114
  * @returns {void}
117
115
  */
118
116
  function onFatalError(error) {
119
- process.exitCode = 2;
120
- hadFatalError = true;
117
+ process.exitCode = 2;
118
+ hadFatalError = true;
121
119
 
122
- const { version } = require("../package.json");
123
- const message = `
120
+ const { version } = require("../package.json");
121
+ const message = `
124
122
  Oops! Something went wrong! :(
125
123
 
126
124
  ESLint: ${version}
127
125
 
128
126
  ${getErrorMessage(error)}`;
129
127
 
130
- if (!displayedErrors.has(message)) {
131
- console.error(message);
132
- displayedErrors.add(message);
133
- }
128
+ if (!displayedErrors.has(message)) {
129
+ console.error(message);
130
+ displayedErrors.add(message);
131
+ }
134
132
  }
135
133
 
136
134
  //------------------------------------------------------------------------------
@@ -138,42 +136,46 @@ ${getErrorMessage(error)}`;
138
136
  //------------------------------------------------------------------------------
139
137
 
140
138
  (async function main() {
141
- process.on("uncaughtException", onFatalError);
142
- process.on("unhandledRejection", onFatalError);
143
-
144
- // Call the config initializer if `--init` is present.
145
- if (process.argv.includes("--init")) {
146
-
147
- // `eslint --init` has been moved to `@eslint/create-config`
148
- console.warn("You can also run this command directly using 'npm init @eslint/config@latest'.");
149
-
150
- const spawn = require("cross-spawn");
151
-
152
- spawn.sync("npm", ["init", "@eslint/config@latest"], { encoding: "utf8", stdio: "inherit" });
153
- return;
154
- }
155
-
156
- // Otherwise, call the CLI.
157
- const cli = require("../lib/cli");
158
- const exitCode = await cli.execute(
159
- process.argv,
160
- process.argv.includes("--stdin") ? await readStdin() : null,
161
- true
162
- );
163
-
164
- /*
165
- * If an uncaught exception or unhandled rejection was detected in the meantime,
166
- * keep the fatal exit code 2 that is already assigned to `process.exitCode`.
167
- * Without this condition, exit code 2 (unsuccessful execution) could be overwritten with
168
- * 1 (successful execution, lint problems found) or even 0 (successful execution, no lint problems found).
169
- * This ensures that unexpected errors that seemingly don't affect the success
170
- * of the execution will still cause a non-zero exit code, as it's a common
171
- * practice and the default behavior of Node.js to exit with non-zero
172
- * in case of an uncaught exception or unhandled rejection.
173
- *
174
- * Otherwise, assign the exit code returned from CLI.
175
- */
176
- if (!hadFatalError) {
177
- process.exitCode = exitCode;
178
- }
179
- }()).catch(onFatalError);
139
+ process.on("uncaughtException", onFatalError);
140
+ process.on("unhandledRejection", onFatalError);
141
+
142
+ // Call the config initializer if `--init` is present.
143
+ if (process.argv.includes("--init")) {
144
+ // `eslint --init` has been moved to `@eslint/create-config`
145
+ console.warn(
146
+ "You can also run this command directly using 'npm init @eslint/config@latest'.",
147
+ );
148
+
149
+ const spawn = require("cross-spawn");
150
+
151
+ spawn.sync("npm", ["init", "@eslint/config@latest"], {
152
+ encoding: "utf8",
153
+ stdio: "inherit",
154
+ });
155
+ return;
156
+ }
157
+
158
+ // Otherwise, call the CLI.
159
+ const cli = require("../lib/cli");
160
+ const exitCode = await cli.execute(
161
+ process.argv,
162
+ process.argv.includes("--stdin") ? await readStdin() : null,
163
+ true,
164
+ );
165
+
166
+ /*
167
+ * If an uncaught exception or unhandled rejection was detected in the meantime,
168
+ * keep the fatal exit code 2 that is already assigned to `process.exitCode`.
169
+ * Without this condition, exit code 2 (unsuccessful execution) could be overwritten with
170
+ * 1 (successful execution, lint problems found) or even 0 (successful execution, no lint problems found).
171
+ * This ensures that unexpected errors that seemingly don't affect the success
172
+ * of the execution will still cause a non-zero exit code, as it's a common
173
+ * practice and the default behavior of Node.js to exit with non-zero
174
+ * in case of an uncaught exception or unhandled rejection.
175
+ *
176
+ * Otherwise, assign the exit code returned from CLI.
177
+ */
178
+ if (!hadFatalError) {
179
+ process.exitCode = exitCode;
180
+ }
181
+ })().catch(onFatalError);
@@ -6,27 +6,27 @@
6
6
  "use strict";
7
7
 
8
8
  module.exports = {
9
- configFile: null,
10
- baseConfig: false,
11
- rulePaths: [],
12
- useEslintrc: true,
13
- envs: [],
14
- globals: [],
15
- extensions: null,
16
- ignore: true,
17
- ignorePath: void 0,
18
- cache: false,
9
+ configFile: null,
10
+ baseConfig: false,
11
+ rulePaths: [],
12
+ useEslintrc: true,
13
+ envs: [],
14
+ globals: [],
15
+ extensions: null,
16
+ ignore: true,
17
+ ignorePath: void 0,
18
+ cache: false,
19
19
 
20
- /*
21
- * in order to honor the cacheFile option if specified
22
- * this option should not have a default value otherwise
23
- * it will always be used
24
- */
25
- cacheLocation: "",
26
- cacheFile: ".eslintcache",
27
- cacheStrategy: "metadata",
28
- fix: false,
29
- allowInlineConfig: true,
30
- reportUnusedDisableDirectives: void 0,
31
- globInputPaths: true
20
+ /*
21
+ * in order to honor the cacheFile option if specified
22
+ * this option should not have a default value otherwise
23
+ * it will always be used
24
+ */
25
+ cacheLocation: "",
26
+ cacheFile: ".eslintcache",
27
+ cacheStrategy: "metadata",
28
+ fix: false,
29
+ allowInlineConfig: true,
30
+ reportUnusedDisableDirectives: void 0,
31
+ globInputPaths: true,
32
32
  };
@@ -12,5 +12,5 @@
12
12
  const LATEST_ECMA_VERSION = 2025;
13
13
 
14
14
  module.exports = {
15
- LATEST_ECMA_VERSION
15
+ LATEST_ECMA_VERSION,
16
16
  };