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
@@ -27,1388 +27,1819 @@
27
27
 
28
28
  import * as ESTree from "estree";
29
29
  import type {
30
- RuleVisitor,
31
- TextSourceCode,
32
- Language,
33
- SourceRange,
34
- TraversalStep,
35
- LanguageOptions as GenericLanguageOptions,
36
- RuleDefinition,
37
- RuleContext as CoreRuleContext,
38
- RuleContextTypeOptions,
39
- DeprecatedInfo
30
+ RuleVisitor,
31
+ TextSourceCode,
32
+ Language,
33
+ SourceRange,
34
+ TraversalStep,
35
+ LanguageOptions as GenericLanguageOptions,
36
+ RuleDefinition,
37
+ RuleContext as CoreRuleContext,
38
+ RuleContextTypeOptions,
39
+ DeprecatedInfo,
40
40
  } from "@eslint/core";
41
41
  import { JSONSchema4 } from "json-schema";
42
42
  import { LegacyESLint } from "./use-at-your-own-risk.js";
43
43
 
44
- /*
45
- * Need to extend the `RuleContext` interface to include the
46
- * deprecated methods that have not yet been removed.
47
- * TODO: Remove in v10.0.0.
48
- */
49
- declare module "@eslint/core" {
50
- interface RuleContext {
51
-
52
- /** @deprecated Use `sourceCode.getAncestors()` instead */
53
- getAncestors(): ESTree.Node[];
54
-
55
- /** @deprecated Use `sourceCode.getDeclaredVariables()` instead */
56
- getDeclaredVariables(node: ESTree.Node): Scope.Variable[];
57
-
58
- /** @deprecated Use `sourceCode.getScope()` instead */
59
- getScope(): Scope.Scope;
60
-
61
- /** @deprecated Use `sourceCode.markVariableAsUsed()` instead */
62
- markVariableAsUsed(name: string): boolean;
63
- }
64
- }
65
-
66
44
  export namespace AST {
67
- type TokenType =
68
- | "Boolean"
69
- | "Null"
70
- | "Identifier"
71
- | "Keyword"
72
- | "Punctuator"
73
- | "JSXIdentifier"
74
- | "JSXText"
75
- | "Numeric"
76
- | "String"
77
- | "RegularExpression";
78
-
79
- interface Token {
80
- type: TokenType;
81
- value: string;
82
- range: Range;
83
- loc: SourceLocation;
84
- }
85
-
86
- interface SourceLocation {
87
- start: ESTree.Position;
88
- end: ESTree.Position;
89
- }
90
-
91
- type Range = [number, number];
92
-
93
- interface Program extends ESTree.Program {
94
- comments: ESTree.Comment[];
95
- tokens: Token[];
96
- loc: SourceLocation;
97
- range: Range;
98
- }
45
+ type TokenType =
46
+ | "Boolean"
47
+ | "Null"
48
+ | "Identifier"
49
+ | "Keyword"
50
+ | "Punctuator"
51
+ | "JSXIdentifier"
52
+ | "JSXText"
53
+ | "Numeric"
54
+ | "String"
55
+ | "RegularExpression";
56
+
57
+ interface Token {
58
+ type: TokenType;
59
+ value: string;
60
+ range: Range;
61
+ loc: SourceLocation;
62
+ }
63
+
64
+ interface SourceLocation {
65
+ start: ESTree.Position;
66
+ end: ESTree.Position;
67
+ }
68
+
69
+ type Range = [number, number];
70
+
71
+ interface Program extends ESTree.Program {
72
+ comments: ESTree.Comment[];
73
+ tokens: Token[];
74
+ loc: SourceLocation;
75
+ range: Range;
76
+ }
99
77
  }
100
78
 
101
79
  export namespace Scope {
102
- interface ScopeManager {
103
- scopes: Scope[];
104
- globalScope: Scope | null;
105
-
106
- acquire(node: ESTree.Node, inner?: boolean): Scope | null;
107
-
108
- getDeclaredVariables(node: ESTree.Node): Variable[];
109
- }
110
-
111
- interface Scope {
112
- type:
113
- | "block"
114
- | "catch"
115
- | "class"
116
- | "for"
117
- | "function"
118
- | "function-expression-name"
119
- | "global"
120
- | "module"
121
- | "switch"
122
- | "with"
123
- | "TDZ";
124
- isStrict: boolean;
125
- upper: Scope | null;
126
- childScopes: Scope[];
127
- variableScope: Scope;
128
- block: ESTree.Node;
129
- variables: Variable[];
130
- set: Map<string, Variable>;
131
- references: Reference[];
132
- through: Reference[];
133
- functionExpressionScope: boolean;
134
- }
135
-
136
- interface Variable {
137
- name: string;
138
- scope: Scope;
139
- identifiers: ESTree.Identifier[];
140
- references: Reference[];
141
- defs: Definition[];
142
- }
143
-
144
- interface Reference {
145
- identifier: ESTree.Identifier;
146
- from: Scope;
147
- resolved: Variable | null;
148
- writeExpr: ESTree.Node | null;
149
- init: boolean;
150
-
151
- isWrite(): boolean;
152
-
153
- isRead(): boolean;
154
-
155
- isWriteOnly(): boolean;
156
-
157
- isReadOnly(): boolean;
158
-
159
- isReadWrite(): boolean;
160
- }
161
-
162
- type DefinitionType =
163
- | { type: "CatchClause"; node: ESTree.CatchClause; parent: null }
164
- | { type: "ClassName"; node: ESTree.ClassDeclaration | ESTree.ClassExpression; parent: null }
165
- | { type: "FunctionName"; node: ESTree.FunctionDeclaration | ESTree.FunctionExpression; parent: null }
166
- | { type: "ImplicitGlobalVariable"; node: ESTree.Program; parent: null }
167
- | {
168
- type: "ImportBinding";
169
- node: ESTree.ImportSpecifier | ESTree.ImportDefaultSpecifier | ESTree.ImportNamespaceSpecifier;
170
- parent: ESTree.ImportDeclaration;
171
- }
172
- | {
173
- type: "Parameter";
174
- node: ESTree.FunctionDeclaration | ESTree.FunctionExpression | ESTree.ArrowFunctionExpression;
175
- parent: null;
176
- }
177
- | { type: "TDZ"; node: any; parent: null }
178
- | { type: "Variable"; node: ESTree.VariableDeclarator; parent: ESTree.VariableDeclaration };
179
-
180
- type Definition = DefinitionType & { name: ESTree.Identifier };
80
+ interface ScopeManager {
81
+ scopes: Scope[];
82
+ globalScope: Scope | null;
83
+
84
+ acquire(node: ESTree.Node, inner?: boolean): Scope | null;
85
+
86
+ getDeclaredVariables(node: ESTree.Node): Variable[];
87
+ }
88
+
89
+ interface Scope {
90
+ type:
91
+ | "block"
92
+ | "catch"
93
+ | "class"
94
+ | "for"
95
+ | "function"
96
+ | "function-expression-name"
97
+ | "global"
98
+ | "module"
99
+ | "switch"
100
+ | "with"
101
+ | "TDZ";
102
+ isStrict: boolean;
103
+ upper: Scope | null;
104
+ childScopes: Scope[];
105
+ variableScope: Scope;
106
+ block: ESTree.Node;
107
+ variables: Variable[];
108
+ set: Map<string, Variable>;
109
+ references: Reference[];
110
+ through: Reference[];
111
+ functionExpressionScope: boolean;
112
+ }
113
+
114
+ interface Variable {
115
+ name: string;
116
+ scope: Scope;
117
+ identifiers: ESTree.Identifier[];
118
+ references: Reference[];
119
+ defs: Definition[];
120
+ }
121
+
122
+ interface Reference {
123
+ identifier: ESTree.Identifier;
124
+ from: Scope;
125
+ resolved: Variable | null;
126
+ writeExpr: ESTree.Node | null;
127
+ init: boolean;
128
+
129
+ isWrite(): boolean;
130
+
131
+ isRead(): boolean;
132
+
133
+ isWriteOnly(): boolean;
134
+
135
+ isReadOnly(): boolean;
136
+
137
+ isReadWrite(): boolean;
138
+ }
139
+
140
+ type DefinitionType =
141
+ | { type: "CatchClause"; node: ESTree.CatchClause; parent: null }
142
+ | {
143
+ type: "ClassName";
144
+ node: ESTree.ClassDeclaration | ESTree.ClassExpression;
145
+ parent: null;
146
+ }
147
+ | {
148
+ type: "FunctionName";
149
+ node: ESTree.FunctionDeclaration | ESTree.FunctionExpression;
150
+ parent: null;
151
+ }
152
+ | { type: "ImplicitGlobalVariable"; node: ESTree.Program; parent: null }
153
+ | {
154
+ type: "ImportBinding";
155
+ node:
156
+ | ESTree.ImportSpecifier
157
+ | ESTree.ImportDefaultSpecifier
158
+ | ESTree.ImportNamespaceSpecifier;
159
+ parent: ESTree.ImportDeclaration;
160
+ }
161
+ | {
162
+ type: "Parameter";
163
+ node:
164
+ | ESTree.FunctionDeclaration
165
+ | ESTree.FunctionExpression
166
+ | ESTree.ArrowFunctionExpression;
167
+ parent: null;
168
+ }
169
+ | { type: "TDZ"; node: any; parent: null }
170
+ | {
171
+ type: "Variable";
172
+ node: ESTree.VariableDeclarator;
173
+ parent: ESTree.VariableDeclaration;
174
+ };
175
+
176
+ type Definition = DefinitionType & { name: ESTree.Identifier };
181
177
  }
182
178
 
183
179
  // #region SourceCode
184
180
 
185
- export class SourceCode implements TextSourceCode<{
186
- LangOptions: Linter.LanguageOptions;
187
- RootNode: AST.Program;
188
- SyntaxElementWithLoc: AST.Token | ESTree.Node;
189
- ConfigNode: ESTree.Comment;
190
- }> {
191
- text: string;
192
- ast: AST.Program;
193
- lines: string[];
194
- hasBOM: boolean;
195
- parserServices: SourceCode.ParserServices;
196
- scopeManager: Scope.ScopeManager;
197
- visitorKeys: SourceCode.VisitorKeys;
181
+ export class SourceCode
182
+ implements
183
+ TextSourceCode<{
184
+ LangOptions: Linter.LanguageOptions;
185
+ RootNode: AST.Program;
186
+ SyntaxElementWithLoc: AST.Token | ESTree.Node;
187
+ ConfigNode: ESTree.Comment;
188
+ }>
189
+ {
190
+ text: string;
191
+ ast: AST.Program;
192
+ lines: string[];
193
+ hasBOM: boolean;
194
+ parserServices: SourceCode.ParserServices;
195
+ scopeManager: Scope.ScopeManager;
196
+ visitorKeys: SourceCode.VisitorKeys;
198
197
 
199
- constructor(text: string, ast: AST.Program);
200
- constructor(config: SourceCode.Config);
198
+ constructor(text: string, ast: AST.Program);
199
+ constructor(config: SourceCode.Config);
201
200
 
202
- static splitLines(text: string): string[];
201
+ static splitLines(text: string): string[];
203
202
 
204
- getLoc(syntaxElement: AST.Token | ESTree.Node): ESTree.SourceLocation;
205
- getRange(syntaxElement: AST.Token | ESTree.Node): SourceRange;
203
+ getLoc(syntaxElement: AST.Token | ESTree.Node): ESTree.SourceLocation;
204
+ getRange(syntaxElement: AST.Token | ESTree.Node): SourceRange;
206
205
 
207
- getText(node?: ESTree.Node, beforeCount?: number, afterCount?: number): string;
206
+ getText(
207
+ node?: ESTree.Node,
208
+ beforeCount?: number,
209
+ afterCount?: number,
210
+ ): string;
208
211
 
209
- getLines(): string[];
212
+ getLines(): string[];
210
213
 
211
- getAllComments(): ESTree.Comment[];
214
+ getAllComments(): ESTree.Comment[];
212
215
 
213
- getAncestors(node: ESTree.Node): ESTree.Node[];
216
+ getAncestors(node: ESTree.Node): ESTree.Node[];
214
217
 
215
- getDeclaredVariables(node: ESTree.Node): Scope.Variable[];
218
+ getDeclaredVariables(node: ESTree.Node): Scope.Variable[];
216
219
 
217
- getJSDocComment(node: ESTree.Node): ESTree.Comment | null;
220
+ getJSDocComment(node: ESTree.Node): ESTree.Comment | null;
218
221
 
219
- getNodeByRangeIndex(index: number): ESTree.Node | null;
222
+ getNodeByRangeIndex(index: number): ESTree.Node | null;
220
223
 
221
- isSpaceBetweenTokens(first: AST.Token, second: AST.Token): boolean;
224
+ isSpaceBetweenTokens(first: AST.Token, second: AST.Token): boolean;
222
225
 
223
- getLocFromIndex(index: number): ESTree.Position;
226
+ getLocFromIndex(index: number): ESTree.Position;
224
227
 
225
- getIndexFromLoc(location: ESTree.Position): number;
228
+ getIndexFromLoc(location: ESTree.Position): number;
226
229
 
227
- // Inherited methods from TokenStore
228
- // ---------------------------------
230
+ // Inherited methods from TokenStore
231
+ // ---------------------------------
229
232
 
230
- getTokenByRangeStart(offset: number, options?: { includeComments: false }): AST.Token | null;
231
- getTokenByRangeStart(offset: number, options: { includeComments: boolean }): AST.Token | ESTree.Comment | null;
233
+ getTokenByRangeStart(
234
+ offset: number,
235
+ options?: { includeComments: false },
236
+ ): AST.Token | null;
237
+ getTokenByRangeStart(
238
+ offset: number,
239
+ options: { includeComments: boolean },
240
+ ): AST.Token | ESTree.Comment | null;
232
241
 
233
- getFirstToken: SourceCode.UnaryNodeCursorWithSkipOptions;
242
+ getFirstToken: SourceCode.UnaryNodeCursorWithSkipOptions;
234
243
 
235
- getFirstTokens: SourceCode.UnaryNodeCursorWithCountOptions;
244
+ getFirstTokens: SourceCode.UnaryNodeCursorWithCountOptions;
236
245
 
237
- getLastToken: SourceCode.UnaryNodeCursorWithSkipOptions;
246
+ getLastToken: SourceCode.UnaryNodeCursorWithSkipOptions;
238
247
 
239
- getLastTokens: SourceCode.UnaryNodeCursorWithCountOptions;
248
+ getLastTokens: SourceCode.UnaryNodeCursorWithCountOptions;
240
249
 
241
- getTokenBefore: SourceCode.UnaryCursorWithSkipOptions;
250
+ getTokenBefore: SourceCode.UnaryCursorWithSkipOptions;
242
251
 
243
- getTokensBefore: SourceCode.UnaryCursorWithCountOptions;
252
+ getTokensBefore: SourceCode.UnaryCursorWithCountOptions;
244
253
 
245
- getTokenAfter: SourceCode.UnaryCursorWithSkipOptions;
254
+ getTokenAfter: SourceCode.UnaryCursorWithSkipOptions;
246
255
 
247
- getTokensAfter: SourceCode.UnaryCursorWithCountOptions;
256
+ getTokensAfter: SourceCode.UnaryCursorWithCountOptions;
248
257
 
249
- getFirstTokenBetween: SourceCode.BinaryCursorWithSkipOptions;
258
+ getFirstTokenBetween: SourceCode.BinaryCursorWithSkipOptions;
250
259
 
251
- getFirstTokensBetween: SourceCode.BinaryCursorWithCountOptions;
260
+ getFirstTokensBetween: SourceCode.BinaryCursorWithCountOptions;
252
261
 
253
- getLastTokenBetween: SourceCode.BinaryCursorWithSkipOptions;
262
+ getLastTokenBetween: SourceCode.BinaryCursorWithSkipOptions;
254
263
 
255
- getLastTokensBetween: SourceCode.BinaryCursorWithCountOptions;
264
+ getLastTokensBetween: SourceCode.BinaryCursorWithCountOptions;
256
265
 
257
- getTokensBetween: SourceCode.BinaryCursorWithCountOptions;
266
+ getTokensBetween: SourceCode.BinaryCursorWithCountOptions;
258
267
 
259
- getTokens:
260
- & ((node: ESTree.Node, beforeCount?: number, afterCount?: number) => AST.Token[])
261
- & SourceCode.UnaryNodeCursorWithCountOptions;
268
+ getTokens: ((
269
+ node: ESTree.Node,
270
+ beforeCount?: number,
271
+ afterCount?: number,
272
+ ) => AST.Token[]) &
273
+ SourceCode.UnaryNodeCursorWithCountOptions;
262
274
 
263
- commentsExistBetween(
264
- left: ESTree.Node | AST.Token | ESTree.Comment,
265
- right: ESTree.Node | AST.Token | ESTree.Comment,
266
- ): boolean;
275
+ commentsExistBetween(
276
+ left: ESTree.Node | AST.Token | ESTree.Comment,
277
+ right: ESTree.Node | AST.Token | ESTree.Comment,
278
+ ): boolean;
267
279
 
268
- getCommentsBefore(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];
280
+ getCommentsBefore(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];
269
281
 
270
- getCommentsAfter(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];
282
+ getCommentsAfter(nodeOrToken: ESTree.Node | AST.Token): ESTree.Comment[];
271
283
 
272
- getCommentsInside(node: ESTree.Node): ESTree.Comment[];
284
+ getCommentsInside(node: ESTree.Node): ESTree.Comment[];
273
285
 
274
- getScope(node: ESTree.Node): Scope.Scope;
286
+ getScope(node: ESTree.Node): Scope.Scope;
275
287
 
276
- isSpaceBetween(
277
- first: ESTree.Node | AST.Token,
278
- second: ESTree.Node | AST.Token,
279
- ): boolean;
288
+ isSpaceBetween(
289
+ first: ESTree.Node | AST.Token,
290
+ second: ESTree.Node | AST.Token,
291
+ ): boolean;
280
292
 
281
- markVariableAsUsed(name: string, refNode?: ESTree.Node): boolean;
293
+ markVariableAsUsed(name: string, refNode?: ESTree.Node): boolean;
282
294
 
283
- traverse(): Iterable<TraversalStep>;
295
+ traverse(): Iterable<TraversalStep>;
284
296
  }
285
297
 
286
298
  export namespace SourceCode {
287
- interface Config {
288
- text: string;
289
- ast: AST.Program;
290
- parserServices?: ParserServices | undefined;
291
- scopeManager?: Scope.ScopeManager | undefined;
292
- visitorKeys?: VisitorKeys | undefined;
293
- }
294
-
295
- type ParserServices = any;
296
-
297
- interface VisitorKeys {
298
- [nodeType: string]: string[];
299
- }
300
-
301
- interface UnaryNodeCursorWithSkipOptions {
302
- <T extends AST.Token>(
303
- node: ESTree.Node,
304
- options:
305
- | ((token: AST.Token) => token is T)
306
- | {
307
- filter: (token: AST.Token) => token is T;
308
- includeComments?: false | undefined;
309
- skip?: number | undefined;
310
- },
311
- ): T | null;
312
- <T extends AST.Token | ESTree.Comment>(
313
- node: ESTree.Node,
314
- options: {
315
- filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;
316
- includeComments: boolean;
317
- skip?: number | undefined;
318
- },
319
- ): T | null;
320
- (
321
- node: ESTree.Node,
322
- options?:
323
- | {
324
- filter?: ((token: AST.Token) => boolean) | undefined;
325
- includeComments?: false | undefined;
326
- skip?: number | undefined;
327
- }
328
- | ((token: AST.Token) => boolean)
329
- | number,
330
- ): AST.Token | null;
331
- (
332
- node: ESTree.Node,
333
- options: {
334
- filter?: ((token: AST.Token | ESTree.Comment) => boolean) | undefined;
335
- includeComments: boolean;
336
- skip?: number | undefined;
337
- },
338
- ): AST.Token | ESTree.Comment | null;
339
- }
340
-
341
- interface UnaryNodeCursorWithCountOptions {
342
- <T extends AST.Token>(
343
- node: ESTree.Node,
344
- options:
345
- | ((token: AST.Token) => token is T)
346
- | {
347
- filter: (token: AST.Token) => token is T;
348
- includeComments?: false | undefined;
349
- count?: number | undefined;
350
- },
351
- ): T[];
352
- <T extends AST.Token | ESTree.Comment>(
353
- node: ESTree.Node,
354
- options: {
355
- filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;
356
- includeComments: boolean;
357
- count?: number | undefined;
358
- },
359
- ): T[];
360
- (
361
- node: ESTree.Node,
362
- options?:
363
- | {
364
- filter?: ((token: AST.Token) => boolean) | undefined;
365
- includeComments?: false | undefined;
366
- count?: number | undefined;
367
- }
368
- | ((token: AST.Token) => boolean)
369
- | number,
370
- ): AST.Token[];
371
- (
372
- node: ESTree.Node,
373
- options: {
374
- filter?: ((token: AST.Token | ESTree.Comment) => boolean) | undefined;
375
- includeComments: boolean;
376
- count?: number | undefined;
377
- },
378
- ): Array<AST.Token | ESTree.Comment>;
379
- }
380
-
381
- interface UnaryCursorWithSkipOptions {
382
- <T extends AST.Token>(
383
- node: ESTree.Node | AST.Token | ESTree.Comment,
384
- options:
385
- | ((token: AST.Token) => token is T)
386
- | {
387
- filter: (token: AST.Token) => token is T;
388
- includeComments?: false | undefined;
389
- skip?: number | undefined;
390
- },
391
- ): T | null;
392
- <T extends AST.Token | ESTree.Comment>(
393
- node: ESTree.Node | AST.Token | ESTree.Comment,
394
- options: {
395
- filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;
396
- includeComments: boolean;
397
- skip?: number | undefined;
398
- },
399
- ): T | null;
400
- (
401
- node: ESTree.Node | AST.Token | ESTree.Comment,
402
- options?:
403
- | {
404
- filter?: ((token: AST.Token) => boolean) | undefined;
405
- includeComments?: false | undefined;
406
- skip?: number | undefined;
407
- }
408
- | ((token: AST.Token) => boolean)
409
- | number,
410
- ): AST.Token | null;
411
- (
412
- node: ESTree.Node | AST.Token | ESTree.Comment,
413
- options: {
414
- filter?: ((token: AST.Token | ESTree.Comment) => boolean) | undefined;
415
- includeComments: boolean;
416
- skip?: number | undefined;
417
- },
418
- ): AST.Token | ESTree.Comment | null;
419
- }
420
-
421
- interface UnaryCursorWithCountOptions {
422
- <T extends AST.Token>(
423
- node: ESTree.Node | AST.Token | ESTree.Comment,
424
- options:
425
- | ((token: AST.Token) => token is T)
426
- | {
427
- filter: (token: AST.Token) => token is T;
428
- includeComments?: false | undefined;
429
- count?: number | undefined;
430
- },
431
- ): T[];
432
- <T extends AST.Token | ESTree.Comment>(
433
- node: ESTree.Node | AST.Token | ESTree.Comment,
434
- options: {
435
- filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;
436
- includeComments: boolean;
437
- count?: number | undefined;
438
- },
439
- ): T[];
440
- (
441
- node: ESTree.Node | AST.Token | ESTree.Comment,
442
- options?:
443
- | {
444
- filter?: ((token: AST.Token) => boolean) | undefined;
445
- includeComments?: false | undefined;
446
- count?: number | undefined;
447
- }
448
- | ((token: AST.Token) => boolean)
449
- | number,
450
- ): AST.Token[];
451
- (
452
- node: ESTree.Node | AST.Token | ESTree.Comment,
453
- options: {
454
- filter?: ((token: AST.Token | ESTree.Comment) => boolean) | undefined;
455
- includeComments: boolean;
456
- count?: number | undefined;
457
- },
458
- ): Array<AST.Token | ESTree.Comment>;
459
- }
460
-
461
- interface BinaryCursorWithSkipOptions {
462
- <T extends AST.Token>(
463
- left: ESTree.Node | AST.Token | ESTree.Comment,
464
- right: ESTree.Node | AST.Token | ESTree.Comment,
465
- options:
466
- | ((token: AST.Token) => token is T)
467
- | {
468
- filter: (token: AST.Token) => token is T;
469
- includeComments?: false | undefined;
470
- skip?: number | undefined;
471
- },
472
- ): T | null;
473
- <T extends AST.Token | ESTree.Comment>(
474
- left: ESTree.Node | AST.Token | ESTree.Comment,
475
- right: ESTree.Node | AST.Token | ESTree.Comment,
476
- options: {
477
- filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;
478
- includeComments: boolean;
479
- skip?: number | undefined;
480
- },
481
- ): T | null;
482
- (
483
- left: ESTree.Node | AST.Token | ESTree.Comment,
484
- right: ESTree.Node | AST.Token | ESTree.Comment,
485
- options?:
486
- | {
487
- filter?: ((token: AST.Token) => boolean) | undefined;
488
- includeComments?: false | undefined;
489
- skip?: number | undefined;
490
- }
491
- | ((token: AST.Token) => boolean)
492
- | number,
493
- ): AST.Token | null;
494
- (
495
- left: ESTree.Node | AST.Token | ESTree.Comment,
496
- right: ESTree.Node | AST.Token | ESTree.Comment,
497
- options: {
498
- filter?: ((token: AST.Token | ESTree.Comment) => boolean) | undefined;
499
- includeComments: boolean;
500
- skip?: number | undefined;
501
- },
502
- ): AST.Token | ESTree.Comment | null;
503
- }
504
-
505
- interface BinaryCursorWithCountOptions {
506
- <T extends AST.Token>(
507
- left: ESTree.Node | AST.Token | ESTree.Comment,
508
- right: ESTree.Node | AST.Token | ESTree.Comment,
509
- options:
510
- | ((token: AST.Token) => token is T)
511
- | {
512
- filter: (token: AST.Token) => token is T;
513
- includeComments?: false | undefined;
514
- count?: number | undefined;
515
- },
516
- ): T[];
517
- <T extends AST.Token | ESTree.Comment>(
518
- left: ESTree.Node | AST.Token | ESTree.Comment,
519
- right: ESTree.Node | AST.Token | ESTree.Comment,
520
- options: {
521
- filter: (tokenOrComment: AST.Token | ESTree.Comment) => tokenOrComment is T;
522
- includeComments: boolean;
523
- count?: number | undefined;
524
- },
525
- ): T[];
526
- (
527
- left: ESTree.Node | AST.Token | ESTree.Comment,
528
- right: ESTree.Node | AST.Token | ESTree.Comment,
529
- options?:
530
- | {
531
- filter?: ((token: AST.Token) => boolean) | undefined;
532
- includeComments?: false | undefined;
533
- count?: number | undefined;
534
- }
535
- | ((token: AST.Token) => boolean)
536
- | number,
537
- ): AST.Token[];
538
- (
539
- left: ESTree.Node | AST.Token | ESTree.Comment,
540
- right: ESTree.Node | AST.Token | ESTree.Comment,
541
- options: {
542
- filter?: ((token: AST.Token | ESTree.Comment) => boolean) | undefined;
543
- includeComments: boolean;
544
- count?: number | undefined;
545
- },
546
- ): Array<AST.Token | ESTree.Comment>;
547
- }
299
+ interface Config {
300
+ text: string;
301
+ ast: AST.Program;
302
+ parserServices?: ParserServices | undefined;
303
+ scopeManager?: Scope.ScopeManager | undefined;
304
+ visitorKeys?: VisitorKeys | undefined;
305
+ }
306
+
307
+ type ParserServices = any;
308
+
309
+ interface VisitorKeys {
310
+ [nodeType: string]: string[];
311
+ }
312
+
313
+ interface UnaryNodeCursorWithSkipOptions {
314
+ <T extends AST.Token>(
315
+ node: ESTree.Node,
316
+ options:
317
+ | ((token: AST.Token) => token is T)
318
+ | {
319
+ filter: (token: AST.Token) => token is T;
320
+ includeComments?: false | undefined;
321
+ skip?: number | undefined;
322
+ },
323
+ ): T | null;
324
+ <T extends AST.Token | ESTree.Comment>(
325
+ node: ESTree.Node,
326
+ options: {
327
+ filter: (
328
+ tokenOrComment: AST.Token | ESTree.Comment,
329
+ ) => tokenOrComment is T;
330
+ includeComments: boolean;
331
+ skip?: number | undefined;
332
+ },
333
+ ): T | null;
334
+ (
335
+ node: ESTree.Node,
336
+ options?:
337
+ | {
338
+ filter?: ((token: AST.Token) => boolean) | undefined;
339
+ includeComments?: false | undefined;
340
+ skip?: number | undefined;
341
+ }
342
+ | ((token: AST.Token) => boolean)
343
+ | number,
344
+ ): AST.Token | null;
345
+ (
346
+ node: ESTree.Node,
347
+ options: {
348
+ filter?:
349
+ | ((token: AST.Token | ESTree.Comment) => boolean)
350
+ | undefined;
351
+ includeComments: boolean;
352
+ skip?: number | undefined;
353
+ },
354
+ ): AST.Token | ESTree.Comment | null;
355
+ }
356
+
357
+ interface UnaryNodeCursorWithCountOptions {
358
+ <T extends AST.Token>(
359
+ node: ESTree.Node,
360
+ options:
361
+ | ((token: AST.Token) => token is T)
362
+ | {
363
+ filter: (token: AST.Token) => token is T;
364
+ includeComments?: false | undefined;
365
+ count?: number | undefined;
366
+ },
367
+ ): T[];
368
+ <T extends AST.Token | ESTree.Comment>(
369
+ node: ESTree.Node,
370
+ options: {
371
+ filter: (
372
+ tokenOrComment: AST.Token | ESTree.Comment,
373
+ ) => tokenOrComment is T;
374
+ includeComments: boolean;
375
+ count?: number | undefined;
376
+ },
377
+ ): T[];
378
+ (
379
+ node: ESTree.Node,
380
+ options?:
381
+ | {
382
+ filter?: ((token: AST.Token) => boolean) | undefined;
383
+ includeComments?: false | undefined;
384
+ count?: number | undefined;
385
+ }
386
+ | ((token: AST.Token) => boolean)
387
+ | number,
388
+ ): AST.Token[];
389
+ (
390
+ node: ESTree.Node,
391
+ options: {
392
+ filter?:
393
+ | ((token: AST.Token | ESTree.Comment) => boolean)
394
+ | undefined;
395
+ includeComments: boolean;
396
+ count?: number | undefined;
397
+ },
398
+ ): Array<AST.Token | ESTree.Comment>;
399
+ }
400
+
401
+ interface UnaryCursorWithSkipOptions {
402
+ <T extends AST.Token>(
403
+ node: ESTree.Node | AST.Token | ESTree.Comment,
404
+ options:
405
+ | ((token: AST.Token) => token is T)
406
+ | {
407
+ filter: (token: AST.Token) => token is T;
408
+ includeComments?: false | undefined;
409
+ skip?: number | undefined;
410
+ },
411
+ ): T | null;
412
+ <T extends AST.Token | ESTree.Comment>(
413
+ node: ESTree.Node | AST.Token | ESTree.Comment,
414
+ options: {
415
+ filter: (
416
+ tokenOrComment: AST.Token | ESTree.Comment,
417
+ ) => tokenOrComment is T;
418
+ includeComments: boolean;
419
+ skip?: number | undefined;
420
+ },
421
+ ): T | null;
422
+ (
423
+ node: ESTree.Node | AST.Token | ESTree.Comment,
424
+ options?:
425
+ | {
426
+ filter?: ((token: AST.Token) => boolean) | undefined;
427
+ includeComments?: false | undefined;
428
+ skip?: number | undefined;
429
+ }
430
+ | ((token: AST.Token) => boolean)
431
+ | number,
432
+ ): AST.Token | null;
433
+ (
434
+ node: ESTree.Node | AST.Token | ESTree.Comment,
435
+ options: {
436
+ filter?:
437
+ | ((token: AST.Token | ESTree.Comment) => boolean)
438
+ | undefined;
439
+ includeComments: boolean;
440
+ skip?: number | undefined;
441
+ },
442
+ ): AST.Token | ESTree.Comment | null;
443
+ }
444
+
445
+ interface UnaryCursorWithCountOptions {
446
+ <T extends AST.Token>(
447
+ node: ESTree.Node | AST.Token | ESTree.Comment,
448
+ options:
449
+ | ((token: AST.Token) => token is T)
450
+ | {
451
+ filter: (token: AST.Token) => token is T;
452
+ includeComments?: false | undefined;
453
+ count?: number | undefined;
454
+ },
455
+ ): T[];
456
+ <T extends AST.Token | ESTree.Comment>(
457
+ node: ESTree.Node | AST.Token | ESTree.Comment,
458
+ options: {
459
+ filter: (
460
+ tokenOrComment: AST.Token | ESTree.Comment,
461
+ ) => tokenOrComment is T;
462
+ includeComments: boolean;
463
+ count?: number | undefined;
464
+ },
465
+ ): T[];
466
+ (
467
+ node: ESTree.Node | AST.Token | ESTree.Comment,
468
+ options?:
469
+ | {
470
+ filter?: ((token: AST.Token) => boolean) | undefined;
471
+ includeComments?: false | undefined;
472
+ count?: number | undefined;
473
+ }
474
+ | ((token: AST.Token) => boolean)
475
+ | number,
476
+ ): AST.Token[];
477
+ (
478
+ node: ESTree.Node | AST.Token | ESTree.Comment,
479
+ options: {
480
+ filter?:
481
+ | ((token: AST.Token | ESTree.Comment) => boolean)
482
+ | undefined;
483
+ includeComments: boolean;
484
+ count?: number | undefined;
485
+ },
486
+ ): Array<AST.Token | ESTree.Comment>;
487
+ }
488
+
489
+ interface BinaryCursorWithSkipOptions {
490
+ <T extends AST.Token>(
491
+ left: ESTree.Node | AST.Token | ESTree.Comment,
492
+ right: ESTree.Node | AST.Token | ESTree.Comment,
493
+ options:
494
+ | ((token: AST.Token) => token is T)
495
+ | {
496
+ filter: (token: AST.Token) => token is T;
497
+ includeComments?: false | undefined;
498
+ skip?: number | undefined;
499
+ },
500
+ ): T | null;
501
+ <T extends AST.Token | ESTree.Comment>(
502
+ left: ESTree.Node | AST.Token | ESTree.Comment,
503
+ right: ESTree.Node | AST.Token | ESTree.Comment,
504
+ options: {
505
+ filter: (
506
+ tokenOrComment: AST.Token | ESTree.Comment,
507
+ ) => tokenOrComment is T;
508
+ includeComments: boolean;
509
+ skip?: number | undefined;
510
+ },
511
+ ): T | null;
512
+ (
513
+ left: ESTree.Node | AST.Token | ESTree.Comment,
514
+ right: ESTree.Node | AST.Token | ESTree.Comment,
515
+ options?:
516
+ | {
517
+ filter?: ((token: AST.Token) => boolean) | undefined;
518
+ includeComments?: false | undefined;
519
+ skip?: number | undefined;
520
+ }
521
+ | ((token: AST.Token) => boolean)
522
+ | number,
523
+ ): AST.Token | null;
524
+ (
525
+ left: ESTree.Node | AST.Token | ESTree.Comment,
526
+ right: ESTree.Node | AST.Token | ESTree.Comment,
527
+ options: {
528
+ filter?:
529
+ | ((token: AST.Token | ESTree.Comment) => boolean)
530
+ | undefined;
531
+ includeComments: boolean;
532
+ skip?: number | undefined;
533
+ },
534
+ ): AST.Token | ESTree.Comment | null;
535
+ }
536
+
537
+ interface BinaryCursorWithCountOptions {
538
+ <T extends AST.Token>(
539
+ left: ESTree.Node | AST.Token | ESTree.Comment,
540
+ right: ESTree.Node | AST.Token | ESTree.Comment,
541
+ options:
542
+ | ((token: AST.Token) => token is T)
543
+ | {
544
+ filter: (token: AST.Token) => token is T;
545
+ includeComments?: false | undefined;
546
+ count?: number | undefined;
547
+ },
548
+ ): T[];
549
+ <T extends AST.Token | ESTree.Comment>(
550
+ left: ESTree.Node | AST.Token | ESTree.Comment,
551
+ right: ESTree.Node | AST.Token | ESTree.Comment,
552
+ options: {
553
+ filter: (
554
+ tokenOrComment: AST.Token | ESTree.Comment,
555
+ ) => tokenOrComment is T;
556
+ includeComments: boolean;
557
+ count?: number | undefined;
558
+ },
559
+ ): T[];
560
+ (
561
+ left: ESTree.Node | AST.Token | ESTree.Comment,
562
+ right: ESTree.Node | AST.Token | ESTree.Comment,
563
+ options?:
564
+ | {
565
+ filter?: ((token: AST.Token) => boolean) | undefined;
566
+ includeComments?: false | undefined;
567
+ count?: number | undefined;
568
+ }
569
+ | ((token: AST.Token) => boolean)
570
+ | number,
571
+ ): AST.Token[];
572
+ (
573
+ left: ESTree.Node | AST.Token | ESTree.Comment,
574
+ right: ESTree.Node | AST.Token | ESTree.Comment,
575
+ options: {
576
+ filter?:
577
+ | ((token: AST.Token | ESTree.Comment) => boolean)
578
+ | undefined;
579
+ includeComments: boolean;
580
+ count?: number | undefined;
581
+ },
582
+ ): Array<AST.Token | ESTree.Comment>;
583
+ }
548
584
  }
549
585
 
550
586
  // #endregion
551
587
 
552
588
  export namespace Rule {
553
-
554
- type RuleModule = RuleDefinition<{
555
- LangOptions: Linter.LanguageOptions,
556
- Code: SourceCode,
557
- RuleOptions: any[],
558
- Visitor: NodeListener,
559
- Node: ESTree.Node,
560
- MessageIds: string,
561
- ExtRuleDocs: {}
562
- }>;
563
-
564
- type NodeTypes = ESTree.Node["type"];
565
- interface NodeListener extends RuleVisitor {
566
- ArrayExpression?: ((node: ESTree.ArrayExpression & NodeParentExtension) => void) | undefined;
567
- "ArrayExpression:exit"?: ((node: ESTree.ArrayExpression & NodeParentExtension) => void) | undefined;
568
- ArrayPattern?: ((node: ESTree.ArrayPattern & NodeParentExtension) => void) | undefined;
569
- "ArrayPattern:exit"?: ((node: ESTree.ArrayPattern & NodeParentExtension) => void) | undefined;
570
- ArrowFunctionExpression?: ((node: ESTree.ArrowFunctionExpression & NodeParentExtension) => void) | undefined;
571
- "ArrowFunctionExpression:exit"?: ((node: ESTree.ArrowFunctionExpression & NodeParentExtension) => void) | undefined;
572
- AssignmentExpression?: ((node: ESTree.AssignmentExpression & NodeParentExtension) => void) | undefined;
573
- "AssignmentExpression:exit"?: ((node: ESTree.AssignmentExpression & NodeParentExtension) => void) | undefined;
574
- AssignmentPattern?: ((node: ESTree.AssignmentPattern & NodeParentExtension) => void) | undefined;
575
- "AssignmentPattern:exit"?: ((node: ESTree.AssignmentPattern & NodeParentExtension) => void) | undefined;
576
- AwaitExpression?: ((node: ESTree.AwaitExpression & NodeParentExtension) => void) | undefined;
577
- "AwaitExpression:exit"?: ((node: ESTree.AwaitExpression & NodeParentExtension) => void) | undefined;
578
- BinaryExpression?: ((node: ESTree.BinaryExpression & NodeParentExtension) => void) | undefined;
579
- "BinaryExpression:exit"?: ((node: ESTree.BinaryExpression & NodeParentExtension) => void) | undefined;
580
- BlockStatement?: ((node: ESTree.BlockStatement & NodeParentExtension) => void) | undefined;
581
- "BlockStatement:exit"?: ((node: ESTree.BlockStatement & NodeParentExtension) => void) | undefined;
582
- BreakStatement?: ((node: ESTree.BreakStatement & NodeParentExtension) => void) | undefined;
583
- "BreakStatement:exit"?: ((node: ESTree.BreakStatement & NodeParentExtension) => void) | undefined;
584
- CallExpression?: ((node: ESTree.CallExpression & NodeParentExtension) => void) | undefined;
585
- "CallExpression:exit"?: ((node: ESTree.CallExpression & NodeParentExtension) => void) | undefined;
586
- CatchClause?: ((node: ESTree.CatchClause & NodeParentExtension) => void) | undefined;
587
- "CatchClause:exit"?: ((node: ESTree.CatchClause & NodeParentExtension) => void) | undefined;
588
- ChainExpression?: ((node: ESTree.ChainExpression & NodeParentExtension) => void) | undefined;
589
- "ChainExpression:exit"?: ((node: ESTree.ChainExpression & NodeParentExtension) => void) | undefined;
590
- ClassBody?: ((node: ESTree.ClassBody & NodeParentExtension) => void) | undefined;
591
- "ClassBody:exit"?: ((node: ESTree.ClassBody & NodeParentExtension) => void) | undefined;
592
- ClassDeclaration?: ((node: ESTree.ClassDeclaration & NodeParentExtension) => void) | undefined;
593
- "ClassDeclaration:exit"?: ((node: ESTree.ClassDeclaration & NodeParentExtension) => void) | undefined;
594
- ClassExpression?: ((node: ESTree.ClassExpression & NodeParentExtension) => void) | undefined;
595
- "ClassExpression:exit"?: ((node: ESTree.ClassExpression & NodeParentExtension) => void) | undefined;
596
- ConditionalExpression?: ((node: ESTree.ConditionalExpression & NodeParentExtension) => void) | undefined;
597
- "ConditionalExpression:exit"?: ((node: ESTree.ConditionalExpression & NodeParentExtension) => void) | undefined;
598
- ContinueStatement?: ((node: ESTree.ContinueStatement & NodeParentExtension) => void) | undefined;
599
- "ContinueStatement:exit"?: ((node: ESTree.ContinueStatement & NodeParentExtension) => void) | undefined;
600
- DebuggerStatement?: ((node: ESTree.DebuggerStatement & NodeParentExtension) => void) | undefined;
601
- "DebuggerStatement:exit"?: ((node: ESTree.DebuggerStatement & NodeParentExtension) => void) | undefined;
602
- DoWhileStatement?: ((node: ESTree.DoWhileStatement & NodeParentExtension) => void) | undefined;
603
- "DoWhileStatement:exit"?: ((node: ESTree.DoWhileStatement & NodeParentExtension) => void) | undefined;
604
- EmptyStatement?: ((node: ESTree.EmptyStatement & NodeParentExtension) => void) | undefined;
605
- "EmptyStatement:exit"?: ((node: ESTree.EmptyStatement & NodeParentExtension) => void) | undefined;
606
- ExportAllDeclaration?: ((node: ESTree.ExportAllDeclaration & NodeParentExtension) => void) | undefined;
607
- "ExportAllDeclaration:exit"?: ((node: ESTree.ExportAllDeclaration & NodeParentExtension) => void) | undefined;
608
- ExportDefaultDeclaration?: ((node: ESTree.ExportDefaultDeclaration & NodeParentExtension) => void) | undefined;
609
- "ExportDefaultDeclaration:exit"?: ((node: ESTree.ExportDefaultDeclaration & NodeParentExtension) => void) | undefined;
610
- ExportNamedDeclaration?: ((node: ESTree.ExportNamedDeclaration & NodeParentExtension) => void) | undefined;
611
- "ExportNamedDeclaration:exit"?: ((node: ESTree.ExportNamedDeclaration & NodeParentExtension) => void) | undefined;
612
- ExportSpecifier?: ((node: ESTree.ExportSpecifier & NodeParentExtension) => void) | undefined;
613
- "ExportSpecifier:exit"?: ((node: ESTree.ExportSpecifier & NodeParentExtension) => void) | undefined;
614
- ExpressionStatement?: ((node: ESTree.ExpressionStatement & NodeParentExtension) => void) | undefined;
615
- "ExpressionStatement:exit"?: ((node: ESTree.ExpressionStatement & NodeParentExtension) => void) | undefined;
616
- ForInStatement?: ((node: ESTree.ForInStatement & NodeParentExtension) => void) | undefined;
617
- "ForInStatement:exit"?: ((node: ESTree.ForInStatement & NodeParentExtension) => void) | undefined;
618
- ForOfStatement?: ((node: ESTree.ForOfStatement & NodeParentExtension) => void) | undefined;
619
- "ForOfStatement:exit"?: ((node: ESTree.ForOfStatement & NodeParentExtension) => void) | undefined;
620
- ForStatement?: ((node: ESTree.ForStatement & NodeParentExtension) => void) | undefined;
621
- "ForStatement:exit"?: ((node: ESTree.ForStatement & NodeParentExtension) => void) | undefined;
622
- FunctionDeclaration?: ((node: ESTree.FunctionDeclaration & NodeParentExtension) => void) | undefined;
623
- "FunctionDeclaration:exit"?: ((node: ESTree.FunctionDeclaration & NodeParentExtension) => void) | undefined;
624
- FunctionExpression?: ((node: ESTree.FunctionExpression & NodeParentExtension) => void) | undefined;
625
- "FunctionExpression:exit"?: ((node: ESTree.FunctionExpression & NodeParentExtension) => void) | undefined;
626
- Identifier?: ((node: ESTree.Identifier & NodeParentExtension) => void) | undefined;
627
- "Identifier:exit"?: ((node: ESTree.Identifier & NodeParentExtension) => void) | undefined;
628
- IfStatement?: ((node: ESTree.IfStatement & NodeParentExtension) => void) | undefined;
629
- "IfStatement:exit"?: ((node: ESTree.IfStatement & NodeParentExtension) => void) | undefined;
630
- ImportDeclaration?: ((node: ESTree.ImportDeclaration & NodeParentExtension) => void) | undefined;
631
- "ImportDeclaration:exit"?: ((node: ESTree.ImportDeclaration & NodeParentExtension) => void) | undefined;
632
- ImportDefaultSpecifier?: ((node: ESTree.ImportDefaultSpecifier & NodeParentExtension) => void) | undefined;
633
- "ImportDefaultSpecifier:exit"?: ((node: ESTree.ImportDefaultSpecifier & NodeParentExtension) => void) | undefined;
634
- ImportExpression?: ((node: ESTree.ImportExpression & NodeParentExtension) => void) | undefined;
635
- "ImportExpression:exit"?: ((node: ESTree.ImportExpression & NodeParentExtension) => void) | undefined;
636
- ImportNamespaceSpecifier?: ((node: ESTree.ImportNamespaceSpecifier & NodeParentExtension) => void) | undefined;
637
- "ImportNamespaceSpecifier:exit"?: ((node: ESTree.ImportNamespaceSpecifier & NodeParentExtension) => void) | undefined;
638
- ImportSpecifier?: ((node: ESTree.ImportSpecifier & NodeParentExtension) => void) | undefined;
639
- "ImportSpecifier:exit"?: ((node: ESTree.ImportSpecifier & NodeParentExtension) => void) | undefined;
640
- LabeledStatement?: ((node: ESTree.LabeledStatement & NodeParentExtension) => void) | undefined;
641
- "LabeledStatement:exit"?: ((node: ESTree.LabeledStatement & NodeParentExtension) => void) | undefined;
642
- Literal?: ((node: ESTree.Literal & NodeParentExtension) => void) | undefined;
643
- "Literal:exit"?: ((node: ESTree.Literal & NodeParentExtension) => void) | undefined;
644
- LogicalExpression?: ((node: ESTree.LogicalExpression & NodeParentExtension) => void) | undefined;
645
- "LogicalExpression:exit"?: ((node: ESTree.LogicalExpression & NodeParentExtension) => void) | undefined;
646
- MemberExpression?: ((node: ESTree.MemberExpression & NodeParentExtension) => void) | undefined;
647
- "MemberExpression:exit"?: ((node: ESTree.MemberExpression & NodeParentExtension) => void) | undefined;
648
- MetaProperty?: ((node: ESTree.MetaProperty & NodeParentExtension) => void) | undefined;
649
- "MetaProperty:exit"?: ((node: ESTree.MetaProperty & NodeParentExtension) => void) | undefined;
650
- MethodDefinition?: ((node: ESTree.MethodDefinition & NodeParentExtension) => void) | undefined;
651
- "MethodDefinition:exit"?: ((node: ESTree.MethodDefinition & NodeParentExtension) => void) | undefined;
652
- NewExpression?: ((node: ESTree.NewExpression & NodeParentExtension) => void) | undefined;
653
- "NewExpression:exit"?: ((node: ESTree.NewExpression & NodeParentExtension) => void) | undefined;
654
- ObjectExpression?: ((node: ESTree.ObjectExpression & NodeParentExtension) => void) | undefined;
655
- "ObjectExpression:exit"?: ((node: ESTree.ObjectExpression & NodeParentExtension) => void) | undefined;
656
- ObjectPattern?: ((node: ESTree.ObjectPattern & NodeParentExtension) => void) | undefined;
657
- "ObjectPattern:exit"?: ((node: ESTree.ObjectPattern & NodeParentExtension) => void) | undefined;
658
- PrivateIdentifier?: ((node: ESTree.PrivateIdentifier & NodeParentExtension) => void) | undefined;
659
- "PrivateIdentifier:exit"?: ((node: ESTree.PrivateIdentifier & NodeParentExtension) => void) | undefined;
660
- Program?: ((node: ESTree.Program) => void) | undefined;
661
- "Program:exit"?: ((node: ESTree.Program) => void) | undefined;
662
- Property?: ((node: ESTree.Property & NodeParentExtension) => void) | undefined;
663
- "Property:exit"?: ((node: ESTree.Property & NodeParentExtension) => void) | undefined;
664
- PropertyDefinition?: ((node: ESTree.PropertyDefinition & NodeParentExtension) => void) | undefined;
665
- "PropertyDefinition:exit"?: ((node: ESTree.PropertyDefinition & NodeParentExtension) => void) | undefined;
666
- RestElement?: ((node: ESTree.RestElement & NodeParentExtension) => void) | undefined;
667
- "RestElement:exit"?: ((node: ESTree.RestElement & NodeParentExtension) => void) | undefined;
668
- ReturnStatement?: ((node: ESTree.ReturnStatement & NodeParentExtension) => void) | undefined;
669
- "ReturnStatement:exit"?: ((node: ESTree.ReturnStatement & NodeParentExtension) => void) | undefined;
670
- SequenceExpression?: ((node: ESTree.SequenceExpression & NodeParentExtension) => void) | undefined;
671
- "SequenceExpression:exit"?: ((node: ESTree.SequenceExpression & NodeParentExtension) => void) | undefined;
672
- SpreadElement?: ((node: ESTree.SpreadElement & NodeParentExtension) => void) | undefined;
673
- "SpreadElement:exit"?: ((node: ESTree.SpreadElement & NodeParentExtension) => void) | undefined;
674
- StaticBlock?: ((node: ESTree.StaticBlock & NodeParentExtension) => void) | undefined;
675
- "StaticBlock:exit"?: ((node: ESTree.StaticBlock & NodeParentExtension) => void) | undefined;
676
- Super?: ((node: ESTree.Super & NodeParentExtension) => void) | undefined;
677
- "Super:exit"?: ((node: ESTree.Super & NodeParentExtension) => void) | undefined;
678
- SwitchCase?: ((node: ESTree.SwitchCase & NodeParentExtension) => void) | undefined;
679
- "SwitchCase:exit"?: ((node: ESTree.SwitchCase & NodeParentExtension) => void) | undefined;
680
- SwitchStatement?: ((node: ESTree.SwitchStatement & NodeParentExtension) => void) | undefined;
681
- "SwitchStatement:exit"?: ((node: ESTree.SwitchStatement & NodeParentExtension) => void) | undefined;
682
- TaggedTemplateExpression?: ((node: ESTree.TaggedTemplateExpression & NodeParentExtension) => void) | undefined;
683
- "TaggedTemplateExpression:exit"?: ((node: ESTree.TaggedTemplateExpression & NodeParentExtension) => void) | undefined;
684
- TemplateElement?: ((node: ESTree.TemplateElement & NodeParentExtension) => void) | undefined;
685
- "TemplateElement:exit"?: ((node: ESTree.TemplateElement & NodeParentExtension) => void) | undefined;
686
- TemplateLiteral?: ((node: ESTree.TemplateLiteral & NodeParentExtension) => void) | undefined;
687
- "TemplateLiteral:exit"?: ((node: ESTree.TemplateLiteral & NodeParentExtension) => void) | undefined;
688
- ThisExpression?: ((node: ESTree.ThisExpression & NodeParentExtension) => void) | undefined;
689
- "ThisExpression:exit"?: ((node: ESTree.ThisExpression & NodeParentExtension) => void) | undefined;
690
- ThrowStatement?: ((node: ESTree.ThrowStatement & NodeParentExtension) => void) | undefined;
691
- "ThrowStatement:exit"?: ((node: ESTree.ThrowStatement & NodeParentExtension) => void) | undefined;
692
- TryStatement?: ((node: ESTree.TryStatement & NodeParentExtension) => void) | undefined;
693
- "TryStatement:exit"?: ((node: ESTree.TryStatement & NodeParentExtension) => void) | undefined;
694
- UnaryExpression?: ((node: ESTree.UnaryExpression & NodeParentExtension) => void) | undefined;
695
- "UnaryExpression:exit"?: ((node: ESTree.UnaryExpression & NodeParentExtension) => void) | undefined;
696
- UpdateExpression?: ((node: ESTree.UpdateExpression & NodeParentExtension) => void) | undefined;
697
- "UpdateExpression:exit"?: ((node: ESTree.UpdateExpression & NodeParentExtension) => void) | undefined;
698
- VariableDeclaration?: ((node: ESTree.VariableDeclaration & NodeParentExtension) => void) | undefined;
699
- "VariableDeclaration:exit"?: ((node: ESTree.VariableDeclaration & NodeParentExtension) => void) | undefined;
700
- VariableDeclarator?: ((node: ESTree.VariableDeclarator & NodeParentExtension) => void) | undefined;
701
- "VariableDeclarator:exit"?: ((node: ESTree.VariableDeclarator & NodeParentExtension) => void) | undefined;
702
- WhileStatement?: ((node: ESTree.WhileStatement & NodeParentExtension) => void) | undefined;
703
- "WhileStatement:exit"?: ((node: ESTree.WhileStatement & NodeParentExtension) => void) | undefined;
704
- WithStatement?: ((node: ESTree.WithStatement & NodeParentExtension) => void) | undefined;
705
- "WithStatement:exit"?: ((node: ESTree.WithStatement & NodeParentExtension) => void) | undefined;
706
- YieldExpression?: ((node: ESTree.YieldExpression & NodeParentExtension) => void) | undefined;
707
- "YieldExpression:exit"?: ((node: ESTree.YieldExpression & NodeParentExtension) => void) | undefined;
708
- }
709
-
710
- interface NodeParentExtension {
711
- parent: Node;
712
- }
713
- type Node = ESTree.Node & NodeParentExtension;
714
-
715
- interface RuleListener extends NodeListener {
716
- onCodePathStart?(codePath: CodePath, node: Node): void;
717
-
718
- onCodePathEnd?(codePath: CodePath, node: Node): void;
719
-
720
- onCodePathSegmentStart?(segment: CodePathSegment, node: Node): void;
721
-
722
- onCodePathSegmentEnd?(segment: CodePathSegment, node: Node): void;
723
-
724
- onCodePathSegmentLoop?(fromSegment: CodePathSegment, toSegment: CodePathSegment, node: Node): void;
725
-
726
- [key: string]:
727
- | ((codePath: CodePath, node: Node) => void)
728
- | ((segment: CodePathSegment, node: Node) => void)
729
- | ((fromSegment: CodePathSegment, toSegment: CodePathSegment, node: Node) => void)
730
- | ((node: Node) => void)
731
- | NodeListener[keyof NodeListener]
732
- | undefined;
733
- }
734
-
735
- type CodePathOrigin = "program" | "function" | "class-field-initializer" | "class-static-block";
736
-
737
- interface CodePath {
738
- id: string;
739
- origin: CodePathOrigin;
740
- initialSegment: CodePathSegment;
741
- finalSegments: CodePathSegment[];
742
- returnedSegments: CodePathSegment[];
743
- thrownSegments: CodePathSegment[];
744
- upper: CodePath | null;
745
- childCodePaths: CodePath[];
746
- }
747
-
748
- interface CodePathSegment {
749
- id: string;
750
- nextSegments: CodePathSegment[];
751
- prevSegments: CodePathSegment[];
752
- reachable: boolean;
753
- }
754
-
755
- interface RuleMetaData {
756
- /** Properties often used for documentation generation and tooling. */
757
- docs?: {
758
- /** Provides a short description of the rule. Commonly used when generating lists of rules. */
759
- description?: string | undefined;
760
- /** Historically used by some plugins that divide rules into categories in their documentation. */
761
- category?: string | undefined;
762
- /** Historically used by some plugins to indicate a rule belongs in their `recommended` configuration. */
763
- recommended?: boolean | undefined;
764
- /** Specifies the URL at which the full documentation can be accessed. Code editors often use this to provide a helpful link on highlighted rule violations. */
765
- url?: string | undefined;
766
- } | undefined;
767
- /** Violation and suggestion messages. */
768
- messages?: { [messageId: string]: string } | undefined;
769
- /**
770
- * Specifies if the `--fix` option on the command line automatically fixes problems reported by the rule.
771
- * Mandatory for fixable rules.
772
- */
773
- fixable?: "code" | "whitespace" | undefined;
774
- /**
775
- * Specifies the [options](https://eslint.org/docs/latest/extend/custom-rules#options-schemas)
776
- * so ESLint can prevent invalid [rule configurations](https://eslint.org/docs/latest/use/configure/rules#configuring-rules).
777
- * Mandatory for rules with options.
778
- */
779
- schema?: JSONSchema4 | JSONSchema4[] | false | undefined;
780
-
781
- /** Any default options to be recursively merged on top of any user-provided options. */
782
- defaultOptions?: unknown[];
783
-
784
- /** Indicates whether the rule has been deprecated or provides additional metadata about the deprecation. Omit if not deprecated. */
785
- deprecated?: boolean | DeprecatedInfo | undefined;
786
- /**
787
- * @deprecated Use deprecated.replacedBy instead.
788
- * The name of the rule(s) this rule was replaced by, if it was deprecated.
789
- */
790
- replacedBy?: readonly string[];
791
-
792
- /**
793
- * Indicates the type of rule:
794
- * - `"problem"` means the rule is identifying code that either will cause an error or may cause a confusing behavior. Developers should consider this a high priority to resolve.
795
- * - `"suggestion"` means the rule is identifying something that could be done in a better way but no errors will occur if the code isn’t changed.
796
- * - `"layout"` means the rule cares primarily about whitespace, semicolons, commas, and parentheses,
797
- * all the parts of the program that determine how the code looks rather than how it executes.
798
- * These rules work on parts of the code that aren’t specified in the AST.
799
- */
800
- type?: "problem" | "suggestion" | "layout" | undefined;
801
- /**
802
- * Specifies whether the rule can return suggestions (defaults to `false` if omitted).
803
- * Mandatory for rules that provide suggestions.
804
- */
805
- hasSuggestions?: boolean | undefined;
806
- }
807
-
808
- interface RuleContext extends CoreRuleContext<RuleContextTypeOptions & {
809
- LangOptions: Linter.LanguageOptions;
810
- Code: SourceCode;
811
- Node: ESTree.Node; }> {
812
- // report(descriptor: ReportDescriptor): void;
813
- }
814
-
815
- type ReportFixer = (fixer: RuleFixer) => null | Fix | IterableIterator<Fix> | Fix[];
816
-
817
- interface ReportDescriptorOptionsBase {
818
- data?: { [key: string]: string };
819
-
820
- fix?: null | ReportFixer;
821
- }
822
-
823
- interface SuggestionReportOptions {
824
- data?: { [key: string]: string };
825
-
826
- fix: ReportFixer;
827
- }
828
-
829
- type SuggestionDescriptorMessage = { desc: string } | { messageId: string };
830
- type SuggestionReportDescriptor = SuggestionDescriptorMessage & SuggestionReportOptions;
831
-
832
- interface ReportDescriptorOptions extends ReportDescriptorOptionsBase {
833
- suggest?: SuggestionReportDescriptor[] | null | undefined;
834
- }
835
-
836
- type ReportDescriptor = ReportDescriptorMessage & ReportDescriptorLocation & ReportDescriptorOptions;
837
- type ReportDescriptorMessage = { message: string } | { messageId: string };
838
- type ReportDescriptorLocation =
839
- | { node: ESTree.Node }
840
- | { loc: AST.SourceLocation | { line: number; column: number } };
841
-
842
- interface RuleFixer {
843
- insertTextAfter(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;
844
-
845
- insertTextAfterRange(range: AST.Range, text: string): Fix;
846
-
847
- insertTextBefore(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;
848
-
849
- insertTextBeforeRange(range: AST.Range, text: string): Fix;
850
-
851
- remove(nodeOrToken: ESTree.Node | AST.Token): Fix;
852
-
853
- removeRange(range: AST.Range): Fix;
854
-
855
- replaceText(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;
856
-
857
- replaceTextRange(range: AST.Range, text: string): Fix;
858
- }
859
-
860
- interface Fix {
861
- range: AST.Range;
862
- text: string;
863
- }
589
+ interface RuleModule
590
+ extends RuleDefinition<{
591
+ LangOptions: Linter.LanguageOptions;
592
+ Code: SourceCode;
593
+ RuleOptions: any[];
594
+ Visitor: NodeListener;
595
+ Node: ESTree.Node;
596
+ MessageIds: string;
597
+ ExtRuleDocs: {};
598
+ }> {
599
+ create(context: RuleContext): NodeListener;
600
+ }
601
+
602
+ type NodeTypes = ESTree.Node["type"];
603
+ interface NodeListener extends RuleVisitor {
604
+ ArrayExpression?:
605
+ | ((node: ESTree.ArrayExpression & NodeParentExtension) => void)
606
+ | undefined;
607
+ "ArrayExpression:exit"?:
608
+ | ((node: ESTree.ArrayExpression & NodeParentExtension) => void)
609
+ | undefined;
610
+ ArrayPattern?:
611
+ | ((node: ESTree.ArrayPattern & NodeParentExtension) => void)
612
+ | undefined;
613
+ "ArrayPattern:exit"?:
614
+ | ((node: ESTree.ArrayPattern & NodeParentExtension) => void)
615
+ | undefined;
616
+ ArrowFunctionExpression?:
617
+ | ((
618
+ node: ESTree.ArrowFunctionExpression & NodeParentExtension,
619
+ ) => void)
620
+ | undefined;
621
+ "ArrowFunctionExpression:exit"?:
622
+ | ((
623
+ node: ESTree.ArrowFunctionExpression & NodeParentExtension,
624
+ ) => void)
625
+ | undefined;
626
+ AssignmentExpression?:
627
+ | ((
628
+ node: ESTree.AssignmentExpression & NodeParentExtension,
629
+ ) => void)
630
+ | undefined;
631
+ "AssignmentExpression:exit"?:
632
+ | ((
633
+ node: ESTree.AssignmentExpression & NodeParentExtension,
634
+ ) => void)
635
+ | undefined;
636
+ AssignmentPattern?:
637
+ | ((node: ESTree.AssignmentPattern & NodeParentExtension) => void)
638
+ | undefined;
639
+ "AssignmentPattern:exit"?:
640
+ | ((node: ESTree.AssignmentPattern & NodeParentExtension) => void)
641
+ | undefined;
642
+ AwaitExpression?:
643
+ | ((node: ESTree.AwaitExpression & NodeParentExtension) => void)
644
+ | undefined;
645
+ "AwaitExpression:exit"?:
646
+ | ((node: ESTree.AwaitExpression & NodeParentExtension) => void)
647
+ | undefined;
648
+ BinaryExpression?:
649
+ | ((node: ESTree.BinaryExpression & NodeParentExtension) => void)
650
+ | undefined;
651
+ "BinaryExpression:exit"?:
652
+ | ((node: ESTree.BinaryExpression & NodeParentExtension) => void)
653
+ | undefined;
654
+ BlockStatement?:
655
+ | ((node: ESTree.BlockStatement & NodeParentExtension) => void)
656
+ | undefined;
657
+ "BlockStatement:exit"?:
658
+ | ((node: ESTree.BlockStatement & NodeParentExtension) => void)
659
+ | undefined;
660
+ BreakStatement?:
661
+ | ((node: ESTree.BreakStatement & NodeParentExtension) => void)
662
+ | undefined;
663
+ "BreakStatement:exit"?:
664
+ | ((node: ESTree.BreakStatement & NodeParentExtension) => void)
665
+ | undefined;
666
+ CallExpression?:
667
+ | ((node: ESTree.CallExpression & NodeParentExtension) => void)
668
+ | undefined;
669
+ "CallExpression:exit"?:
670
+ | ((node: ESTree.CallExpression & NodeParentExtension) => void)
671
+ | undefined;
672
+ CatchClause?:
673
+ | ((node: ESTree.CatchClause & NodeParentExtension) => void)
674
+ | undefined;
675
+ "CatchClause:exit"?:
676
+ | ((node: ESTree.CatchClause & NodeParentExtension) => void)
677
+ | undefined;
678
+ ChainExpression?:
679
+ | ((node: ESTree.ChainExpression & NodeParentExtension) => void)
680
+ | undefined;
681
+ "ChainExpression:exit"?:
682
+ | ((node: ESTree.ChainExpression & NodeParentExtension) => void)
683
+ | undefined;
684
+ ClassBody?:
685
+ | ((node: ESTree.ClassBody & NodeParentExtension) => void)
686
+ | undefined;
687
+ "ClassBody:exit"?:
688
+ | ((node: ESTree.ClassBody & NodeParentExtension) => void)
689
+ | undefined;
690
+ ClassDeclaration?:
691
+ | ((node: ESTree.ClassDeclaration & NodeParentExtension) => void)
692
+ | undefined;
693
+ "ClassDeclaration:exit"?:
694
+ | ((node: ESTree.ClassDeclaration & NodeParentExtension) => void)
695
+ | undefined;
696
+ ClassExpression?:
697
+ | ((node: ESTree.ClassExpression & NodeParentExtension) => void)
698
+ | undefined;
699
+ "ClassExpression:exit"?:
700
+ | ((node: ESTree.ClassExpression & NodeParentExtension) => void)
701
+ | undefined;
702
+ ConditionalExpression?:
703
+ | ((
704
+ node: ESTree.ConditionalExpression & NodeParentExtension,
705
+ ) => void)
706
+ | undefined;
707
+ "ConditionalExpression:exit"?:
708
+ | ((
709
+ node: ESTree.ConditionalExpression & NodeParentExtension,
710
+ ) => void)
711
+ | undefined;
712
+ ContinueStatement?:
713
+ | ((node: ESTree.ContinueStatement & NodeParentExtension) => void)
714
+ | undefined;
715
+ "ContinueStatement:exit"?:
716
+ | ((node: ESTree.ContinueStatement & NodeParentExtension) => void)
717
+ | undefined;
718
+ DebuggerStatement?:
719
+ | ((node: ESTree.DebuggerStatement & NodeParentExtension) => void)
720
+ | undefined;
721
+ "DebuggerStatement:exit"?:
722
+ | ((node: ESTree.DebuggerStatement & NodeParentExtension) => void)
723
+ | undefined;
724
+ DoWhileStatement?:
725
+ | ((node: ESTree.DoWhileStatement & NodeParentExtension) => void)
726
+ | undefined;
727
+ "DoWhileStatement:exit"?:
728
+ | ((node: ESTree.DoWhileStatement & NodeParentExtension) => void)
729
+ | undefined;
730
+ EmptyStatement?:
731
+ | ((node: ESTree.EmptyStatement & NodeParentExtension) => void)
732
+ | undefined;
733
+ "EmptyStatement:exit"?:
734
+ | ((node: ESTree.EmptyStatement & NodeParentExtension) => void)
735
+ | undefined;
736
+ ExportAllDeclaration?:
737
+ | ((
738
+ node: ESTree.ExportAllDeclaration & NodeParentExtension,
739
+ ) => void)
740
+ | undefined;
741
+ "ExportAllDeclaration:exit"?:
742
+ | ((
743
+ node: ESTree.ExportAllDeclaration & NodeParentExtension,
744
+ ) => void)
745
+ | undefined;
746
+ ExportDefaultDeclaration?:
747
+ | ((
748
+ node: ESTree.ExportDefaultDeclaration & NodeParentExtension,
749
+ ) => void)
750
+ | undefined;
751
+ "ExportDefaultDeclaration:exit"?:
752
+ | ((
753
+ node: ESTree.ExportDefaultDeclaration & NodeParentExtension,
754
+ ) => void)
755
+ | undefined;
756
+ ExportNamedDeclaration?:
757
+ | ((
758
+ node: ESTree.ExportNamedDeclaration & NodeParentExtension,
759
+ ) => void)
760
+ | undefined;
761
+ "ExportNamedDeclaration:exit"?:
762
+ | ((
763
+ node: ESTree.ExportNamedDeclaration & NodeParentExtension,
764
+ ) => void)
765
+ | undefined;
766
+ ExportSpecifier?:
767
+ | ((node: ESTree.ExportSpecifier & NodeParentExtension) => void)
768
+ | undefined;
769
+ "ExportSpecifier:exit"?:
770
+ | ((node: ESTree.ExportSpecifier & NodeParentExtension) => void)
771
+ | undefined;
772
+ ExpressionStatement?:
773
+ | ((node: ESTree.ExpressionStatement & NodeParentExtension) => void)
774
+ | undefined;
775
+ "ExpressionStatement:exit"?:
776
+ | ((node: ESTree.ExpressionStatement & NodeParentExtension) => void)
777
+ | undefined;
778
+ ForInStatement?:
779
+ | ((node: ESTree.ForInStatement & NodeParentExtension) => void)
780
+ | undefined;
781
+ "ForInStatement:exit"?:
782
+ | ((node: ESTree.ForInStatement & NodeParentExtension) => void)
783
+ | undefined;
784
+ ForOfStatement?:
785
+ | ((node: ESTree.ForOfStatement & NodeParentExtension) => void)
786
+ | undefined;
787
+ "ForOfStatement:exit"?:
788
+ | ((node: ESTree.ForOfStatement & NodeParentExtension) => void)
789
+ | undefined;
790
+ ForStatement?:
791
+ | ((node: ESTree.ForStatement & NodeParentExtension) => void)
792
+ | undefined;
793
+ "ForStatement:exit"?:
794
+ | ((node: ESTree.ForStatement & NodeParentExtension) => void)
795
+ | undefined;
796
+ FunctionDeclaration?:
797
+ | ((node: ESTree.FunctionDeclaration & NodeParentExtension) => void)
798
+ | undefined;
799
+ "FunctionDeclaration:exit"?:
800
+ | ((node: ESTree.FunctionDeclaration & NodeParentExtension) => void)
801
+ | undefined;
802
+ FunctionExpression?:
803
+ | ((node: ESTree.FunctionExpression & NodeParentExtension) => void)
804
+ | undefined;
805
+ "FunctionExpression:exit"?:
806
+ | ((node: ESTree.FunctionExpression & NodeParentExtension) => void)
807
+ | undefined;
808
+ Identifier?:
809
+ | ((node: ESTree.Identifier & NodeParentExtension) => void)
810
+ | undefined;
811
+ "Identifier:exit"?:
812
+ | ((node: ESTree.Identifier & NodeParentExtension) => void)
813
+ | undefined;
814
+ IfStatement?:
815
+ | ((node: ESTree.IfStatement & NodeParentExtension) => void)
816
+ | undefined;
817
+ "IfStatement:exit"?:
818
+ | ((node: ESTree.IfStatement & NodeParentExtension) => void)
819
+ | undefined;
820
+ ImportDeclaration?:
821
+ | ((node: ESTree.ImportDeclaration & NodeParentExtension) => void)
822
+ | undefined;
823
+ "ImportDeclaration:exit"?:
824
+ | ((node: ESTree.ImportDeclaration & NodeParentExtension) => void)
825
+ | undefined;
826
+ ImportDefaultSpecifier?:
827
+ | ((
828
+ node: ESTree.ImportDefaultSpecifier & NodeParentExtension,
829
+ ) => void)
830
+ | undefined;
831
+ "ImportDefaultSpecifier:exit"?:
832
+ | ((
833
+ node: ESTree.ImportDefaultSpecifier & NodeParentExtension,
834
+ ) => void)
835
+ | undefined;
836
+ ImportExpression?:
837
+ | ((node: ESTree.ImportExpression & NodeParentExtension) => void)
838
+ | undefined;
839
+ "ImportExpression:exit"?:
840
+ | ((node: ESTree.ImportExpression & NodeParentExtension) => void)
841
+ | undefined;
842
+ ImportNamespaceSpecifier?:
843
+ | ((
844
+ node: ESTree.ImportNamespaceSpecifier & NodeParentExtension,
845
+ ) => void)
846
+ | undefined;
847
+ "ImportNamespaceSpecifier:exit"?:
848
+ | ((
849
+ node: ESTree.ImportNamespaceSpecifier & NodeParentExtension,
850
+ ) => void)
851
+ | undefined;
852
+ ImportSpecifier?:
853
+ | ((node: ESTree.ImportSpecifier & NodeParentExtension) => void)
854
+ | undefined;
855
+ "ImportSpecifier:exit"?:
856
+ | ((node: ESTree.ImportSpecifier & NodeParentExtension) => void)
857
+ | undefined;
858
+ LabeledStatement?:
859
+ | ((node: ESTree.LabeledStatement & NodeParentExtension) => void)
860
+ | undefined;
861
+ "LabeledStatement:exit"?:
862
+ | ((node: ESTree.LabeledStatement & NodeParentExtension) => void)
863
+ | undefined;
864
+ Literal?:
865
+ | ((node: ESTree.Literal & NodeParentExtension) => void)
866
+ | undefined;
867
+ "Literal:exit"?:
868
+ | ((node: ESTree.Literal & NodeParentExtension) => void)
869
+ | undefined;
870
+ LogicalExpression?:
871
+ | ((node: ESTree.LogicalExpression & NodeParentExtension) => void)
872
+ | undefined;
873
+ "LogicalExpression:exit"?:
874
+ | ((node: ESTree.LogicalExpression & NodeParentExtension) => void)
875
+ | undefined;
876
+ MemberExpression?:
877
+ | ((node: ESTree.MemberExpression & NodeParentExtension) => void)
878
+ | undefined;
879
+ "MemberExpression:exit"?:
880
+ | ((node: ESTree.MemberExpression & NodeParentExtension) => void)
881
+ | undefined;
882
+ MetaProperty?:
883
+ | ((node: ESTree.MetaProperty & NodeParentExtension) => void)
884
+ | undefined;
885
+ "MetaProperty:exit"?:
886
+ | ((node: ESTree.MetaProperty & NodeParentExtension) => void)
887
+ | undefined;
888
+ MethodDefinition?:
889
+ | ((node: ESTree.MethodDefinition & NodeParentExtension) => void)
890
+ | undefined;
891
+ "MethodDefinition:exit"?:
892
+ | ((node: ESTree.MethodDefinition & NodeParentExtension) => void)
893
+ | undefined;
894
+ NewExpression?:
895
+ | ((node: ESTree.NewExpression & NodeParentExtension) => void)
896
+ | undefined;
897
+ "NewExpression:exit"?:
898
+ | ((node: ESTree.NewExpression & NodeParentExtension) => void)
899
+ | undefined;
900
+ ObjectExpression?:
901
+ | ((node: ESTree.ObjectExpression & NodeParentExtension) => void)
902
+ | undefined;
903
+ "ObjectExpression:exit"?:
904
+ | ((node: ESTree.ObjectExpression & NodeParentExtension) => void)
905
+ | undefined;
906
+ ObjectPattern?:
907
+ | ((node: ESTree.ObjectPattern & NodeParentExtension) => void)
908
+ | undefined;
909
+ "ObjectPattern:exit"?:
910
+ | ((node: ESTree.ObjectPattern & NodeParentExtension) => void)
911
+ | undefined;
912
+ PrivateIdentifier?:
913
+ | ((node: ESTree.PrivateIdentifier & NodeParentExtension) => void)
914
+ | undefined;
915
+ "PrivateIdentifier:exit"?:
916
+ | ((node: ESTree.PrivateIdentifier & NodeParentExtension) => void)
917
+ | undefined;
918
+ Program?: ((node: ESTree.Program) => void) | undefined;
919
+ "Program:exit"?: ((node: ESTree.Program) => void) | undefined;
920
+ Property?:
921
+ | ((node: ESTree.Property & NodeParentExtension) => void)
922
+ | undefined;
923
+ "Property:exit"?:
924
+ | ((node: ESTree.Property & NodeParentExtension) => void)
925
+ | undefined;
926
+ PropertyDefinition?:
927
+ | ((node: ESTree.PropertyDefinition & NodeParentExtension) => void)
928
+ | undefined;
929
+ "PropertyDefinition:exit"?:
930
+ | ((node: ESTree.PropertyDefinition & NodeParentExtension) => void)
931
+ | undefined;
932
+ RestElement?:
933
+ | ((node: ESTree.RestElement & NodeParentExtension) => void)
934
+ | undefined;
935
+ "RestElement:exit"?:
936
+ | ((node: ESTree.RestElement & NodeParentExtension) => void)
937
+ | undefined;
938
+ ReturnStatement?:
939
+ | ((node: ESTree.ReturnStatement & NodeParentExtension) => void)
940
+ | undefined;
941
+ "ReturnStatement:exit"?:
942
+ | ((node: ESTree.ReturnStatement & NodeParentExtension) => void)
943
+ | undefined;
944
+ SequenceExpression?:
945
+ | ((node: ESTree.SequenceExpression & NodeParentExtension) => void)
946
+ | undefined;
947
+ "SequenceExpression:exit"?:
948
+ | ((node: ESTree.SequenceExpression & NodeParentExtension) => void)
949
+ | undefined;
950
+ SpreadElement?:
951
+ | ((node: ESTree.SpreadElement & NodeParentExtension) => void)
952
+ | undefined;
953
+ "SpreadElement:exit"?:
954
+ | ((node: ESTree.SpreadElement & NodeParentExtension) => void)
955
+ | undefined;
956
+ StaticBlock?:
957
+ | ((node: ESTree.StaticBlock & NodeParentExtension) => void)
958
+ | undefined;
959
+ "StaticBlock:exit"?:
960
+ | ((node: ESTree.StaticBlock & NodeParentExtension) => void)
961
+ | undefined;
962
+ Super?:
963
+ | ((node: ESTree.Super & NodeParentExtension) => void)
964
+ | undefined;
965
+ "Super:exit"?:
966
+ | ((node: ESTree.Super & NodeParentExtension) => void)
967
+ | undefined;
968
+ SwitchCase?:
969
+ | ((node: ESTree.SwitchCase & NodeParentExtension) => void)
970
+ | undefined;
971
+ "SwitchCase:exit"?:
972
+ | ((node: ESTree.SwitchCase & NodeParentExtension) => void)
973
+ | undefined;
974
+ SwitchStatement?:
975
+ | ((node: ESTree.SwitchStatement & NodeParentExtension) => void)
976
+ | undefined;
977
+ "SwitchStatement:exit"?:
978
+ | ((node: ESTree.SwitchStatement & NodeParentExtension) => void)
979
+ | undefined;
980
+ TaggedTemplateExpression?:
981
+ | ((
982
+ node: ESTree.TaggedTemplateExpression & NodeParentExtension,
983
+ ) => void)
984
+ | undefined;
985
+ "TaggedTemplateExpression:exit"?:
986
+ | ((
987
+ node: ESTree.TaggedTemplateExpression & NodeParentExtension,
988
+ ) => void)
989
+ | undefined;
990
+ TemplateElement?:
991
+ | ((node: ESTree.TemplateElement & NodeParentExtension) => void)
992
+ | undefined;
993
+ "TemplateElement:exit"?:
994
+ | ((node: ESTree.TemplateElement & NodeParentExtension) => void)
995
+ | undefined;
996
+ TemplateLiteral?:
997
+ | ((node: ESTree.TemplateLiteral & NodeParentExtension) => void)
998
+ | undefined;
999
+ "TemplateLiteral:exit"?:
1000
+ | ((node: ESTree.TemplateLiteral & NodeParentExtension) => void)
1001
+ | undefined;
1002
+ ThisExpression?:
1003
+ | ((node: ESTree.ThisExpression & NodeParentExtension) => void)
1004
+ | undefined;
1005
+ "ThisExpression:exit"?:
1006
+ | ((node: ESTree.ThisExpression & NodeParentExtension) => void)
1007
+ | undefined;
1008
+ ThrowStatement?:
1009
+ | ((node: ESTree.ThrowStatement & NodeParentExtension) => void)
1010
+ | undefined;
1011
+ "ThrowStatement:exit"?:
1012
+ | ((node: ESTree.ThrowStatement & NodeParentExtension) => void)
1013
+ | undefined;
1014
+ TryStatement?:
1015
+ | ((node: ESTree.TryStatement & NodeParentExtension) => void)
1016
+ | undefined;
1017
+ "TryStatement:exit"?:
1018
+ | ((node: ESTree.TryStatement & NodeParentExtension) => void)
1019
+ | undefined;
1020
+ UnaryExpression?:
1021
+ | ((node: ESTree.UnaryExpression & NodeParentExtension) => void)
1022
+ | undefined;
1023
+ "UnaryExpression:exit"?:
1024
+ | ((node: ESTree.UnaryExpression & NodeParentExtension) => void)
1025
+ | undefined;
1026
+ UpdateExpression?:
1027
+ | ((node: ESTree.UpdateExpression & NodeParentExtension) => void)
1028
+ | undefined;
1029
+ "UpdateExpression:exit"?:
1030
+ | ((node: ESTree.UpdateExpression & NodeParentExtension) => void)
1031
+ | undefined;
1032
+ VariableDeclaration?:
1033
+ | ((node: ESTree.VariableDeclaration & NodeParentExtension) => void)
1034
+ | undefined;
1035
+ "VariableDeclaration:exit"?:
1036
+ | ((node: ESTree.VariableDeclaration & NodeParentExtension) => void)
1037
+ | undefined;
1038
+ VariableDeclarator?:
1039
+ | ((node: ESTree.VariableDeclarator & NodeParentExtension) => void)
1040
+ | undefined;
1041
+ "VariableDeclarator:exit"?:
1042
+ | ((node: ESTree.VariableDeclarator & NodeParentExtension) => void)
1043
+ | undefined;
1044
+ WhileStatement?:
1045
+ | ((node: ESTree.WhileStatement & NodeParentExtension) => void)
1046
+ | undefined;
1047
+ "WhileStatement:exit"?:
1048
+ | ((node: ESTree.WhileStatement & NodeParentExtension) => void)
1049
+ | undefined;
1050
+ WithStatement?:
1051
+ | ((node: ESTree.WithStatement & NodeParentExtension) => void)
1052
+ | undefined;
1053
+ "WithStatement:exit"?:
1054
+ | ((node: ESTree.WithStatement & NodeParentExtension) => void)
1055
+ | undefined;
1056
+ YieldExpression?:
1057
+ | ((node: ESTree.YieldExpression & NodeParentExtension) => void)
1058
+ | undefined;
1059
+ "YieldExpression:exit"?:
1060
+ | ((node: ESTree.YieldExpression & NodeParentExtension) => void)
1061
+ | undefined;
1062
+ }
1063
+
1064
+ interface NodeParentExtension {
1065
+ parent: Node;
1066
+ }
1067
+ type Node = ESTree.Node & NodeParentExtension;
1068
+
1069
+ interface RuleListener extends NodeListener {
1070
+ onCodePathStart?(codePath: CodePath, node: Node): void;
1071
+
1072
+ onCodePathEnd?(codePath: CodePath, node: Node): void;
1073
+
1074
+ onCodePathSegmentStart?(segment: CodePathSegment, node: Node): void;
1075
+
1076
+ onCodePathSegmentEnd?(segment: CodePathSegment, node: Node): void;
1077
+
1078
+ onCodePathSegmentLoop?(
1079
+ fromSegment: CodePathSegment,
1080
+ toSegment: CodePathSegment,
1081
+ node: Node,
1082
+ ): void;
1083
+
1084
+ [key: string]:
1085
+ | ((codePath: CodePath, node: Node) => void)
1086
+ | ((segment: CodePathSegment, node: Node) => void)
1087
+ | ((
1088
+ fromSegment: CodePathSegment,
1089
+ toSegment: CodePathSegment,
1090
+ node: Node,
1091
+ ) => void)
1092
+ | ((node: Node) => void)
1093
+ | NodeListener[keyof NodeListener]
1094
+ | undefined;
1095
+ }
1096
+
1097
+ type CodePathOrigin =
1098
+ | "program"
1099
+ | "function"
1100
+ | "class-field-initializer"
1101
+ | "class-static-block";
1102
+
1103
+ interface CodePath {
1104
+ id: string;
1105
+ origin: CodePathOrigin;
1106
+ initialSegment: CodePathSegment;
1107
+ finalSegments: CodePathSegment[];
1108
+ returnedSegments: CodePathSegment[];
1109
+ thrownSegments: CodePathSegment[];
1110
+ upper: CodePath | null;
1111
+ childCodePaths: CodePath[];
1112
+ }
1113
+
1114
+ interface CodePathSegment {
1115
+ id: string;
1116
+ nextSegments: CodePathSegment[];
1117
+ prevSegments: CodePathSegment[];
1118
+ reachable: boolean;
1119
+ }
1120
+
1121
+ interface RuleMetaData {
1122
+ /** Properties often used for documentation generation and tooling. */
1123
+ docs?:
1124
+ | {
1125
+ /** Provides a short description of the rule. Commonly used when generating lists of rules. */
1126
+ description?: string | undefined;
1127
+ /** Historically used by some plugins that divide rules into categories in their documentation. */
1128
+ category?: string | undefined;
1129
+ /** Historically used by some plugins to indicate a rule belongs in their `recommended` configuration. */
1130
+ recommended?: boolean | undefined;
1131
+ /** Specifies the URL at which the full documentation can be accessed. Code editors often use this to provide a helpful link on highlighted rule violations. */
1132
+ url?: string | undefined;
1133
+ }
1134
+ | undefined;
1135
+ /** Violation and suggestion messages. */
1136
+ messages?: { [messageId: string]: string } | undefined;
1137
+ /**
1138
+ * Specifies if the `--fix` option on the command line automatically fixes problems reported by the rule.
1139
+ * Mandatory for fixable rules.
1140
+ */
1141
+ fixable?: "code" | "whitespace" | undefined;
1142
+ /**
1143
+ * Specifies the [options](https://eslint.org/docs/latest/extend/custom-rules#options-schemas)
1144
+ * so ESLint can prevent invalid [rule configurations](https://eslint.org/docs/latest/use/configure/rules#configuring-rules).
1145
+ * Mandatory for rules with options.
1146
+ */
1147
+ schema?: JSONSchema4 | JSONSchema4[] | false | undefined;
1148
+
1149
+ /** Any default options to be recursively merged on top of any user-provided options. */
1150
+ defaultOptions?: unknown[];
1151
+
1152
+ /** Indicates whether the rule has been deprecated or provides additional metadata about the deprecation. Omit if not deprecated. */
1153
+ deprecated?: boolean | DeprecatedInfo | undefined;
1154
+ /**
1155
+ * @deprecated Use deprecated.replacedBy instead.
1156
+ * The name of the rule(s) this rule was replaced by, if it was deprecated.
1157
+ */
1158
+ replacedBy?: readonly string[];
1159
+
1160
+ /**
1161
+ * Indicates the type of rule:
1162
+ * - `"problem"` means the rule is identifying code that either will cause an error or may cause a confusing behavior. Developers should consider this a high priority to resolve.
1163
+ * - `"suggestion"` means the rule is identifying something that could be done in a better way but no errors will occur if the code isn’t changed.
1164
+ * - `"layout"` means the rule cares primarily about whitespace, semicolons, commas, and parentheses,
1165
+ * all the parts of the program that determine how the code looks rather than how it executes.
1166
+ * These rules work on parts of the code that aren’t specified in the AST.
1167
+ */
1168
+ type?: "problem" | "suggestion" | "layout" | undefined;
1169
+ /**
1170
+ * Specifies whether the rule can return suggestions (defaults to `false` if omitted).
1171
+ * Mandatory for rules that provide suggestions.
1172
+ */
1173
+ hasSuggestions?: boolean | undefined;
1174
+ }
1175
+
1176
+ interface RuleContext
1177
+ extends CoreRuleContext<{
1178
+ LangOptions: Linter.LanguageOptions;
1179
+ Code: SourceCode;
1180
+ RuleOptions: any[];
1181
+ Node: ESTree.Node;
1182
+ MessageIds: string;
1183
+ }> {
1184
+ /*
1185
+ * Need to extend the `RuleContext` interface to include the
1186
+ * deprecated methods that have not yet been removed.
1187
+ * TODO: Remove in v10.0.0.
1188
+ */
1189
+
1190
+ /** @deprecated Use `sourceCode.getAncestors()` instead */
1191
+ getAncestors(): ESTree.Node[];
1192
+
1193
+ /** @deprecated Use `sourceCode.getDeclaredVariables()` instead */
1194
+ getDeclaredVariables(node: ESTree.Node): Scope.Variable[];
1195
+
1196
+ /** @deprecated Use `sourceCode.getScope()` instead */
1197
+ getScope(): Scope.Scope;
1198
+
1199
+ /** @deprecated Use `sourceCode.markVariableAsUsed()` instead */
1200
+ markVariableAsUsed(name: string): boolean;
1201
+ }
1202
+
1203
+ type ReportFixer = (
1204
+ fixer: RuleFixer,
1205
+ ) => null | Fix | IterableIterator<Fix> | Fix[];
1206
+
1207
+ interface ReportDescriptorOptionsBase {
1208
+ data?: { [key: string]: string };
1209
+
1210
+ fix?: null | ReportFixer;
1211
+ }
1212
+
1213
+ interface SuggestionReportOptions {
1214
+ data?: { [key: string]: string };
1215
+
1216
+ fix: ReportFixer;
1217
+ }
1218
+
1219
+ type SuggestionDescriptorMessage = { desc: string } | { messageId: string };
1220
+ type SuggestionReportDescriptor = SuggestionDescriptorMessage &
1221
+ SuggestionReportOptions;
1222
+
1223
+ interface ReportDescriptorOptions extends ReportDescriptorOptionsBase {
1224
+ suggest?: SuggestionReportDescriptor[] | null | undefined;
1225
+ }
1226
+
1227
+ type ReportDescriptor = ReportDescriptorMessage &
1228
+ ReportDescriptorLocation &
1229
+ ReportDescriptorOptions;
1230
+ type ReportDescriptorMessage = { message: string } | { messageId: string };
1231
+ type ReportDescriptorLocation =
1232
+ | { node: ESTree.Node }
1233
+ | { loc: AST.SourceLocation | { line: number; column: number } };
1234
+
1235
+ interface RuleFixer {
1236
+ insertTextAfter(
1237
+ nodeOrToken: ESTree.Node | AST.Token,
1238
+ text: string,
1239
+ ): Fix;
1240
+
1241
+ insertTextAfterRange(range: AST.Range, text: string): Fix;
1242
+
1243
+ insertTextBefore(
1244
+ nodeOrToken: ESTree.Node | AST.Token,
1245
+ text: string,
1246
+ ): Fix;
1247
+
1248
+ insertTextBeforeRange(range: AST.Range, text: string): Fix;
1249
+
1250
+ remove(nodeOrToken: ESTree.Node | AST.Token): Fix;
1251
+
1252
+ removeRange(range: AST.Range): Fix;
1253
+
1254
+ replaceText(nodeOrToken: ESTree.Node | AST.Token, text: string): Fix;
1255
+
1256
+ replaceTextRange(range: AST.Range, text: string): Fix;
1257
+ }
1258
+
1259
+ interface Fix {
1260
+ range: AST.Range;
1261
+ text: string;
1262
+ }
864
1263
  }
865
1264
 
866
1265
  // #region Linter
867
1266
 
868
1267
  export class Linter {
869
- static readonly version: string;
1268
+ static readonly version: string;
870
1269
 
871
- version: string;
1270
+ version: string;
872
1271
 
873
- constructor(options?: { cwd?: string | undefined; configType?: "flat" | "eslintrc" });
1272
+ constructor(options?: {
1273
+ cwd?: string | undefined;
1274
+ configType?: "flat" | "eslintrc";
1275
+ });
874
1276
 
875
- verify(
876
- code: SourceCode | string,
877
- config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
878
- filename?: string,
879
- ): Linter.LintMessage[];
880
- verify(
881
- code: SourceCode | string,
882
- config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
883
- options: Linter.LintOptions,
884
- ): Linter.LintMessage[];
1277
+ verify(
1278
+ code: SourceCode | string,
1279
+ config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
1280
+ filename?: string,
1281
+ ): Linter.LintMessage[];
1282
+ verify(
1283
+ code: SourceCode | string,
1284
+ config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
1285
+ options: Linter.LintOptions,
1286
+ ): Linter.LintMessage[];
885
1287
 
886
- verifyAndFix(
887
- code: string,
888
- config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
889
- filename?: string,
890
- ): Linter.FixReport;
891
- verifyAndFix(
892
- code: string,
893
- config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
894
- options: Linter.FixOptions,
895
- ): Linter.FixReport;
1288
+ verifyAndFix(
1289
+ code: string,
1290
+ config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
1291
+ filename?: string,
1292
+ ): Linter.FixReport;
1293
+ verifyAndFix(
1294
+ code: string,
1295
+ config: Linter.LegacyConfig | Linter.Config | Linter.Config[],
1296
+ options: Linter.FixOptions,
1297
+ ): Linter.FixReport;
896
1298
 
897
- getSourceCode(): SourceCode;
1299
+ getSourceCode(): SourceCode;
898
1300
 
899
- defineRule(name: string, rule: Rule.RuleModule): void;
1301
+ defineRule(name: string, rule: Rule.RuleModule): void;
900
1302
 
901
- defineRules(rules: { [name: string]: Rule.RuleModule }): void;
1303
+ defineRules(rules: { [name: string]: Rule.RuleModule }): void;
902
1304
 
903
- getRules(): Map<string, Rule.RuleModule>;
1305
+ getRules(): Map<string, Rule.RuleModule>;
904
1306
 
905
- defineParser(name: string, parser: Linter.Parser): void;
1307
+ defineParser(name: string, parser: Linter.Parser): void;
906
1308
 
907
- getTimes(): Linter.Stats["times"];
1309
+ getTimes(): Linter.Stats["times"];
908
1310
 
909
- getFixPassCount(): Linter.Stats["fixPasses"];
1311
+ getFixPassCount(): Linter.Stats["fixPasses"];
910
1312
  }
911
1313
 
912
1314
  export namespace Linter {
913
- /**
914
- * The numeric severity level for a rule.
915
- *
916
- * - `0` means off.
917
- * - `1` means warn.
918
- * - `2` means error.
919
- *
920
- * @see [Rule Severities](https://eslint.org/docs/latest/use/configure/rules#rule-severities)
921
- */
922
- type Severity = 0 | 1 | 2;
923
-
924
- /**
925
- * The human readable severity level for a rule.
926
- *
927
- * @see [Rule Severities](https://eslint.org/docs/latest/use/configure/rules#rule-severities)
928
- */
929
- type StringSeverity = "off" | "warn" | "error";
930
-
931
- /**
932
- * The numeric or human readable severity level for a rule.
933
- *
934
- * @see [Rule Severities](https://eslint.org/docs/latest/use/configure/rules#rule-severities)
935
- */
936
- type RuleSeverity = Severity | StringSeverity;
937
-
938
- /**
939
- * An array containing the rule severity level, followed by the rule options.
940
- *
941
- * @see [Rules](https://eslint.org/docs/latest/use/configure/rules)
942
- */
943
- type RuleSeverityAndOptions<Options extends any[] = any[]> = [RuleSeverity, ...Partial<Options>];
944
-
945
- /**
946
- * The severity level for the rule or an array containing the rule severity level, followed by the rule options.
947
- *
948
- * @see [Rules](https://eslint.org/docs/latest/use/configure/rules)
949
- */
950
- type RuleEntry<Options extends any[] = any[]> = RuleSeverity | RuleSeverityAndOptions<Options>;
951
-
952
- /**
953
- * The rules config object is a key/value map of rule names and their severity and options.
954
- */
955
- interface RulesRecord {
956
- [rule: string]: RuleEntry;
957
- }
958
-
959
- /**
960
- * A configuration object that may have a `rules` block.
961
- */
962
- interface HasRules<Rules extends RulesRecord = RulesRecord> {
963
- rules?: Partial<Rules> | undefined;
964
- }
965
-
966
- /**
967
- * The ECMAScript version of the code being linted.
968
- */
969
- type EcmaVersion =
970
- | 3
971
- | 5
972
- | 6
973
- | 7
974
- | 8
975
- | 9
976
- | 10
977
- | 11
978
- | 12
979
- | 13
980
- | 14
981
- | 15
982
- | 16
983
- | 2015
984
- | 2016
985
- | 2017
986
- | 2018
987
- | 2019
988
- | 2020
989
- | 2021
990
- | 2022
991
- | 2023
992
- | 2024
993
- | 2025
994
- | "latest";
995
-
996
- /**
997
- * The type of JavaScript source code.
998
- */
999
- type SourceType = "script" | "module" | "commonjs";
1000
-
1001
- /**
1002
- * ESLint legacy configuration.
1003
- *
1004
- * @see [ESLint Legacy Configuration](https://eslint.org/docs/latest/use/configure/)
1005
- */
1006
- interface BaseConfig<Rules extends RulesRecord = RulesRecord, OverrideRules extends RulesRecord = Rules>
1007
- extends HasRules<Rules> {
1008
- $schema?: string | undefined;
1009
-
1010
- /**
1011
- * An environment provides predefined global variables.
1012
- *
1013
- * @see [Environments](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-environments)
1014
- */
1015
- env?: { [name: string]: boolean } | undefined;
1016
-
1017
- /**
1018
- * Extending configuration files.
1019
- *
1020
- * @see [Extends](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#extending-configuration-files)
1021
- */
1022
- extends?: string | string[] | undefined;
1023
-
1024
- /**
1025
- * Specifying globals.
1026
- *
1027
- * @see [Globals](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-globals)
1028
- */
1029
- globals?: Linter.Globals | undefined;
1030
-
1031
- /**
1032
- * Disable processing of inline comments.
1033
- *
1034
- * @see [Disabling Inline Comments](https://eslint.org/docs/latest/use/configure/rules-deprecated#disabling-inline-comments)
1035
- */
1036
- noInlineConfig?: boolean | undefined;
1037
-
1038
- /**
1039
- * Overrides can be used to use a differing configuration for matching sub-directories and files.
1040
- *
1041
- * @see [How do overrides work](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#how-do-overrides-work)
1042
- */
1043
- overrides?: Array<ConfigOverride<OverrideRules>> | undefined;
1044
-
1045
- /**
1046
- * Parser.
1047
- *
1048
- * @see [Working with Custom Parsers](https://eslint.org/docs/latest/extend/custom-parsers)
1049
- * @see [Specifying Parser](https://eslint.org/docs/latest/use/configure/parser-deprecated)
1050
- */
1051
- parser?: string | undefined;
1052
-
1053
- /**
1054
- * Parser options.
1055
- *
1056
- * @see [Working with Custom Parsers](https://eslint.org/docs/latest/extend/custom-parsers)
1057
- * @see [Specifying Parser Options](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options)
1058
- */
1059
- parserOptions?: ParserOptions | undefined;
1060
-
1061
- /**
1062
- * Which third-party plugins define additional rules, environments, configs, etc. for ESLint to use.
1063
- *
1064
- * @see [Configuring Plugins](https://eslint.org/docs/latest/use/configure/plugins-deprecated#configure-plugins)
1065
- */
1066
- plugins?: string[] | undefined;
1067
-
1068
- /**
1069
- * Specifying processor.
1070
- *
1071
- * @see [processor](https://eslint.org/docs/latest/use/configure/plugins-deprecated#specify-a-processor)
1072
- */
1073
- processor?: string | undefined;
1074
-
1075
- /**
1076
- * Report unused eslint-disable comments as warning.
1077
- *
1078
- * @see [Report unused eslint-disable comments](https://eslint.org/docs/latest/use/configure/rules-deprecated#report-unused-eslint-disable-comments)
1079
- */
1080
- reportUnusedDisableDirectives?: boolean | undefined;
1081
-
1082
- /**
1083
- * Settings.
1084
- *
1085
- * @see [Settings](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#adding-shared-settings)
1086
- */
1087
- settings?: { [name: string]: any } | undefined;
1088
- }
1089
-
1090
- /**
1091
- * The overwrites that apply more differing configuration to specific files or directories.
1092
- */
1093
- interface ConfigOverride<Rules extends RulesRecord = RulesRecord> extends BaseConfig<Rules> {
1094
- /**
1095
- * The glob patterns for excluded files.
1096
- */
1097
- excludedFiles?: string | string[] | undefined;
1098
-
1099
- /**
1100
- * The glob patterns for target files.
1101
- */
1102
- files: string | string[];
1103
- }
1104
-
1105
- /**
1106
- * ESLint legacy configuration.
1107
- *
1108
- * @see [ESLint Legacy Configuration](https://eslint.org/docs/latest/use/configure/)
1109
- */
1110
- // https://github.com/eslint/eslint/blob/v8.57.0/conf/config-schema.js
1111
- interface LegacyConfig<Rules extends RulesRecord = RulesRecord, OverrideRules extends RulesRecord = Rules>
1112
- extends BaseConfig<Rules, OverrideRules> {
1113
- /**
1114
- * Tell ESLint to ignore specific files and directories.
1115
- *
1116
- * @see [Ignore Patterns](https://eslint.org/docs/latest/use/configure/ignore-deprecated#ignorepatterns-in-config-files)
1117
- */
1118
- ignorePatterns?: string | string[] | undefined;
1119
-
1120
- /**
1121
- * @see [Using Configuration Files](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#using-configuration-files)
1122
- */
1123
- root?: boolean | undefined;
1124
- }
1125
-
1126
- /**
1127
- * Parser options.
1128
- *
1129
- * @see [Specifying Parser Options](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options)
1130
- */
1131
- interface ParserOptions {
1132
- /**
1133
- * Accepts any valid ECMAScript version number or `'latest'`:
1134
- *
1135
- * - A version: es3, es5, es6, es7, es8, es9, es10, es11, es12, es13, es14, ..., or
1136
- * - A year: es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, ..., or
1137
- * - `'latest'`
1138
- *
1139
- * When it's a version or a year, the value must be a number - so do not include the `es` prefix.
1140
- *
1141
- * Specifies the version of ECMAScript syntax you want to use. This is used by the parser to determine how to perform scope analysis, and it affects the default
1142
- *
1143
- * @default 5
1144
- */
1145
- ecmaVersion?: EcmaVersion | undefined;
1146
-
1147
- /**
1148
- * The type of JavaScript source code. Possible values are "script" for
1149
- * traditional script files, "module" for ECMAScript modules (ESM), and
1150
- * "commonjs" for CommonJS files.
1151
- *
1152
- * @default 'script'
1153
- *
1154
- * @see https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options
1155
- */
1156
- sourceType?: SourceType | undefined;
1157
-
1158
- /**
1159
- * An object indicating which additional language features you'd like to use.
1160
- *
1161
- * @see https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options
1162
- */
1163
- ecmaFeatures?: {
1164
- globalReturn?: boolean | undefined;
1165
- impliedStrict?: boolean | undefined;
1166
- jsx?: boolean | undefined;
1167
- experimentalObjectRestSpread?: boolean | undefined;
1168
- [key: string]: any;
1169
- } | undefined;
1170
- [key: string]: any;
1171
- }
1172
-
1173
- interface LintOptions {
1174
- filename?: string | undefined;
1175
- preprocess?: ((code: string) => string[]) | undefined;
1176
- postprocess?: ((problemLists: LintMessage[][]) => LintMessage[]) | undefined;
1177
- filterCodeBlock?: boolean | undefined;
1178
- disableFixes?: boolean | undefined;
1179
- allowInlineConfig?: boolean | undefined;
1180
- reportUnusedDisableDirectives?: boolean | undefined;
1181
- }
1182
-
1183
- interface LintSuggestion {
1184
- desc: string;
1185
- fix: Rule.Fix;
1186
- messageId?: string | undefined;
1187
- }
1188
-
1189
- interface LintMessage {
1190
- column: number;
1191
- line: number;
1192
- endColumn?: number | undefined;
1193
- endLine?: number | undefined;
1194
- ruleId: string | null;
1195
- message: string;
1196
- messageId?: string | undefined;
1197
- /**
1198
- * @deprecated `nodeType` is deprecated and will be removed in the next major version.
1199
- */
1200
- nodeType?: string | undefined;
1201
- fatal?: true | undefined;
1202
- severity: Exclude<Severity, 0>;
1203
- fix?: Rule.Fix | undefined;
1204
- suggestions?: LintSuggestion[] | undefined;
1205
- }
1206
-
1207
- interface LintSuppression {
1208
- kind: string;
1209
- justification: string;
1210
- }
1211
-
1212
- interface SuppressedLintMessage extends LintMessage {
1213
- suppressions: LintSuppression[];
1214
- }
1215
-
1216
- interface FixOptions extends LintOptions {
1217
- fix?: boolean | undefined;
1218
- }
1219
-
1220
- interface FixReport {
1221
- fixed: boolean;
1222
- output: string;
1223
- messages: LintMessage[];
1224
- }
1225
-
1226
- // Temporarily loosen type for just flat config files (see #68232)
1227
- type NonESTreeParser =
1228
- & Omit<ESTreeParser, "parseForESLint">
1229
- & ({
1230
- parse(text: string, options?: any): unknown;
1231
- } | {
1232
- parseForESLint(text: string, options?: any): Omit<ESLintParseResult, "ast" | "scopeManager"> & {
1233
- ast: unknown;
1234
- scopeManager?: unknown;
1235
- };
1236
- });
1237
-
1238
- type ESTreeParser =
1239
- & ESLint.ObjectMetaProperties
1240
- & (
1241
- | { parse(text: string, options?: any): AST.Program }
1242
- | { parseForESLint(text: string, options?: any): ESLintParseResult }
1243
- );
1244
-
1245
- type Parser = NonESTreeParser | ESTreeParser;
1246
-
1247
- interface ESLintParseResult {
1248
- ast: AST.Program;
1249
- parserServices?: SourceCode.ParserServices | undefined;
1250
- scopeManager?: Scope.ScopeManager | undefined;
1251
- visitorKeys?: SourceCode.VisitorKeys | undefined;
1252
- }
1253
-
1254
- interface ProcessorFile {
1255
- text: string;
1256
- filename: string;
1257
- }
1258
-
1259
- // https://eslint.org/docs/latest/extend/plugins#processors-in-plugins
1260
- interface Processor<T extends string | ProcessorFile = string | ProcessorFile> extends ESLint.ObjectMetaProperties {
1261
- supportsAutofix?: boolean | undefined;
1262
- preprocess?(text: string, filename: string): T[];
1263
- postprocess?(messages: LintMessage[][], filename: string): LintMessage[];
1264
- }
1265
-
1266
- interface Config<Rules extends RulesRecord = RulesRecord> {
1267
- /**
1268
- * An string to identify the configuration object. Used in error messages and
1269
- * inspection tools.
1270
- */
1271
- name?: string;
1272
-
1273
- /**
1274
- * An array of glob patterns indicating the files that the configuration
1275
- * object should apply to. If not specified, the configuration object applies
1276
- * to all files
1277
- */
1278
- files?: Array<string | string[]>;
1279
-
1280
- /**
1281
- * An array of glob patterns indicating the files that the configuration
1282
- * object should not apply to. If not specified, the configuration object
1283
- * applies to all files matched by files
1284
- */
1285
- ignores?: string[];
1286
-
1287
- /**
1288
- * The name of the language used for linting. This is used to determine the
1289
- * parser and other language-specific settings.
1290
- * @since 9.7.0
1291
- */
1292
- language?: string;
1293
-
1294
- /**
1295
- * An object containing settings related to how JavaScript is configured for
1296
- * linting.
1297
- */
1298
- languageOptions?: LanguageOptions;
1299
-
1300
- /**
1301
- * An object containing settings related to the linting process
1302
- */
1303
- linterOptions?: LinterOptions;
1304
-
1305
- /**
1306
- * Either an object containing preprocess() and postprocess() methods or a
1307
- * string indicating the name of a processor inside of a plugin
1308
- * (i.e., "pluginName/processorName").
1309
- */
1310
- processor?: string | Processor;
1311
-
1312
- /**
1313
- * An object containing a name-value mapping of plugin names to plugin objects.
1314
- * When files is specified, these plugins are only available to the matching files.
1315
- */
1316
- plugins?: Record<string, ESLint.Plugin>;
1317
-
1318
- /**
1319
- * An object containing the configured rules. When files or ignores are specified,
1320
- * these rule configurations are only available to the matching files.
1321
- */
1322
- rules?: Partial<Rules>;
1323
-
1324
- /**
1325
- * An object containing name-value pairs of information that should be
1326
- * available to all rules.
1327
- */
1328
- settings?: Record<string, unknown>;
1329
- }
1330
-
1331
- /** @deprecated Use `Config` instead of `FlatConfig` */
1332
- type FlatConfig = Config;
1333
-
1334
- type GlobalConf = boolean | "off" | "readable" | "readonly" | "writable" | "writeable";
1335
-
1336
- interface Globals {
1337
- [name: string]: GlobalConf;
1338
- }
1339
-
1340
- interface LanguageOptions extends GenericLanguageOptions {
1341
- /**
1342
- * The version of ECMAScript to support. May be any year (i.e., 2022) or
1343
- * version (i.e., 5). Set to "latest" for the most recent supported version.
1344
- * @default "latest"
1345
- */
1346
- ecmaVersion?: EcmaVersion | undefined;
1347
-
1348
- /**
1349
- * The type of JavaScript source code. Possible values are "script" for
1350
- * traditional script files, "module" for ECMAScript modules (ESM), and
1351
- * "commonjs" for CommonJS files. (default: "module" for .js and .mjs
1352
- * files; "commonjs" for .cjs files)
1353
- */
1354
- sourceType?: SourceType | undefined;
1355
-
1356
- /**
1357
- * An object specifying additional objects that should be added to the
1358
- * global scope during linting.
1359
- */
1360
- globals?: Globals | undefined;
1361
-
1362
- /**
1363
- * An object containing a parse() or parseForESLint() method.
1364
- * If not configured, the default ESLint parser (Espree) will be used.
1365
- */
1366
- parser?: Parser | undefined;
1367
-
1368
- /**
1369
- * An object specifying additional options that are passed directly to the
1370
- * parser() method on the parser. The available options are parser-dependent
1371
- */
1372
- parserOptions?: Linter.ParserOptions | undefined;
1373
- }
1374
-
1375
- interface LinterOptions {
1376
- /**
1377
- * A boolean value indicating if inline configuration is allowed.
1378
- */
1379
- noInlineConfig?: boolean;
1380
-
1381
- /**
1382
- * A severity value indicating if and how unused disable directives should be
1383
- * tracked and reported.
1384
- */
1385
- reportUnusedDisableDirectives?: Severity | StringSeverity | boolean;
1386
-
1387
- /**
1388
- * A severity value indicating if and how unused inline configs should be
1389
- * tracked and reported.
1390
- */
1391
- reportUnusedInlineConfigs?: Severity | StringSeverity;
1392
- }
1393
-
1394
- interface Stats {
1395
- /**
1396
- * The number of times ESLint has applied at least one fix after linting.
1397
- */
1398
- fixPasses: number;
1399
-
1400
- /**
1401
- * The times spent on (parsing, fixing, linting) a file, where the linting refers to the timing information for each rule.
1402
- */
1403
- times: { passes: TimePass[] };
1404
- }
1405
-
1406
- interface TimePass {
1407
- parse: { total: number };
1408
- rules?: Record<string, { total: number }>;
1409
- fix: { total: number };
1410
- total: number;
1411
- }
1315
+ /**
1316
+ * The numeric severity level for a rule.
1317
+ *
1318
+ * - `0` means off.
1319
+ * - `1` means warn.
1320
+ * - `2` means error.
1321
+ *
1322
+ * @see [Rule Severities](https://eslint.org/docs/latest/use/configure/rules#rule-severities)
1323
+ */
1324
+ type Severity = 0 | 1 | 2;
1325
+
1326
+ /**
1327
+ * The human readable severity level for a rule.
1328
+ *
1329
+ * @see [Rule Severities](https://eslint.org/docs/latest/use/configure/rules#rule-severities)
1330
+ */
1331
+ type StringSeverity = "off" | "warn" | "error";
1332
+
1333
+ /**
1334
+ * The numeric or human readable severity level for a rule.
1335
+ *
1336
+ * @see [Rule Severities](https://eslint.org/docs/latest/use/configure/rules#rule-severities)
1337
+ */
1338
+ type RuleSeverity = Severity | StringSeverity;
1339
+
1340
+ /**
1341
+ * An array containing the rule severity level, followed by the rule options.
1342
+ *
1343
+ * @see [Rules](https://eslint.org/docs/latest/use/configure/rules)
1344
+ */
1345
+ type RuleSeverityAndOptions<Options extends any[] = any[]> = [
1346
+ RuleSeverity,
1347
+ ...Partial<Options>,
1348
+ ];
1349
+
1350
+ /**
1351
+ * The severity level for the rule or an array containing the rule severity level, followed by the rule options.
1352
+ *
1353
+ * @see [Rules](https://eslint.org/docs/latest/use/configure/rules)
1354
+ */
1355
+ type RuleEntry<Options extends any[] = any[]> =
1356
+ | RuleSeverity
1357
+ | RuleSeverityAndOptions<Options>;
1358
+
1359
+ /**
1360
+ * The rules config object is a key/value map of rule names and their severity and options.
1361
+ */
1362
+ interface RulesRecord {
1363
+ [rule: string]: RuleEntry;
1364
+ }
1365
+
1366
+ /**
1367
+ * A configuration object that may have a `rules` block.
1368
+ */
1369
+ interface HasRules<Rules extends RulesRecord = RulesRecord> {
1370
+ rules?: Partial<Rules> | undefined;
1371
+ }
1372
+
1373
+ /**
1374
+ * The ECMAScript version of the code being linted.
1375
+ */
1376
+ type EcmaVersion =
1377
+ | 3
1378
+ | 5
1379
+ | 6
1380
+ | 7
1381
+ | 8
1382
+ | 9
1383
+ | 10
1384
+ | 11
1385
+ | 12
1386
+ | 13
1387
+ | 14
1388
+ | 15
1389
+ | 16
1390
+ | 2015
1391
+ | 2016
1392
+ | 2017
1393
+ | 2018
1394
+ | 2019
1395
+ | 2020
1396
+ | 2021
1397
+ | 2022
1398
+ | 2023
1399
+ | 2024
1400
+ | 2025
1401
+ | "latest";
1402
+
1403
+ /**
1404
+ * The type of JavaScript source code.
1405
+ */
1406
+ type SourceType = "script" | "module" | "commonjs";
1407
+
1408
+ /**
1409
+ * ESLint legacy configuration.
1410
+ *
1411
+ * @see [ESLint Legacy Configuration](https://eslint.org/docs/latest/use/configure/)
1412
+ */
1413
+ interface BaseConfig<
1414
+ Rules extends RulesRecord = RulesRecord,
1415
+ OverrideRules extends RulesRecord = Rules,
1416
+ > extends HasRules<Rules> {
1417
+ $schema?: string | undefined;
1418
+
1419
+ /**
1420
+ * An environment provides predefined global variables.
1421
+ *
1422
+ * @see [Environments](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-environments)
1423
+ */
1424
+ env?: { [name: string]: boolean } | undefined;
1425
+
1426
+ /**
1427
+ * Extending configuration files.
1428
+ *
1429
+ * @see [Extends](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#extending-configuration-files)
1430
+ */
1431
+ extends?: string | string[] | undefined;
1432
+
1433
+ /**
1434
+ * Specifying globals.
1435
+ *
1436
+ * @see [Globals](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-globals)
1437
+ */
1438
+ globals?: Linter.Globals | undefined;
1439
+
1440
+ /**
1441
+ * Disable processing of inline comments.
1442
+ *
1443
+ * @see [Disabling Inline Comments](https://eslint.org/docs/latest/use/configure/rules-deprecated#disabling-inline-comments)
1444
+ */
1445
+ noInlineConfig?: boolean | undefined;
1446
+
1447
+ /**
1448
+ * Overrides can be used to use a differing configuration for matching sub-directories and files.
1449
+ *
1450
+ * @see [How do overrides work](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#how-do-overrides-work)
1451
+ */
1452
+ overrides?: Array<ConfigOverride<OverrideRules>> | undefined;
1453
+
1454
+ /**
1455
+ * Parser.
1456
+ *
1457
+ * @see [Working with Custom Parsers](https://eslint.org/docs/latest/extend/custom-parsers)
1458
+ * @see [Specifying Parser](https://eslint.org/docs/latest/use/configure/parser-deprecated)
1459
+ */
1460
+ parser?: string | undefined;
1461
+
1462
+ /**
1463
+ * Parser options.
1464
+ *
1465
+ * @see [Working with Custom Parsers](https://eslint.org/docs/latest/extend/custom-parsers)
1466
+ * @see [Specifying Parser Options](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options)
1467
+ */
1468
+ parserOptions?: ParserOptions | undefined;
1469
+
1470
+ /**
1471
+ * Which third-party plugins define additional rules, environments, configs, etc. for ESLint to use.
1472
+ *
1473
+ * @see [Configuring Plugins](https://eslint.org/docs/latest/use/configure/plugins-deprecated#configure-plugins)
1474
+ */
1475
+ plugins?: string[] | undefined;
1476
+
1477
+ /**
1478
+ * Specifying processor.
1479
+ *
1480
+ * @see [processor](https://eslint.org/docs/latest/use/configure/plugins-deprecated#specify-a-processor)
1481
+ */
1482
+ processor?: string | undefined;
1483
+
1484
+ /**
1485
+ * Report unused eslint-disable comments as warning.
1486
+ *
1487
+ * @see [Report unused eslint-disable comments](https://eslint.org/docs/latest/use/configure/rules-deprecated#report-unused-eslint-disable-comments)
1488
+ */
1489
+ reportUnusedDisableDirectives?: boolean | undefined;
1490
+
1491
+ /**
1492
+ * Settings.
1493
+ *
1494
+ * @see [Settings](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#adding-shared-settings)
1495
+ */
1496
+ settings?: { [name: string]: any } | undefined;
1497
+ }
1498
+
1499
+ /**
1500
+ * The overwrites that apply more differing configuration to specific files or directories.
1501
+ */
1502
+ interface ConfigOverride<Rules extends RulesRecord = RulesRecord>
1503
+ extends BaseConfig<Rules> {
1504
+ /**
1505
+ * The glob patterns for excluded files.
1506
+ */
1507
+ excludedFiles?: string | string[] | undefined;
1508
+
1509
+ /**
1510
+ * The glob patterns for target files.
1511
+ */
1512
+ files: string | string[];
1513
+ }
1514
+
1515
+ /**
1516
+ * ESLint legacy configuration.
1517
+ *
1518
+ * @see [ESLint Legacy Configuration](https://eslint.org/docs/latest/use/configure/)
1519
+ */
1520
+ // https://github.com/eslint/eslint/blob/v8.57.0/conf/config-schema.js
1521
+ interface LegacyConfig<
1522
+ Rules extends RulesRecord = RulesRecord,
1523
+ OverrideRules extends RulesRecord = Rules,
1524
+ > extends BaseConfig<Rules, OverrideRules> {
1525
+ /**
1526
+ * Tell ESLint to ignore specific files and directories.
1527
+ *
1528
+ * @see [Ignore Patterns](https://eslint.org/docs/latest/use/configure/ignore-deprecated#ignorepatterns-in-config-files)
1529
+ */
1530
+ ignorePatterns?: string | string[] | undefined;
1531
+
1532
+ /**
1533
+ * @see [Using Configuration Files](https://eslint.org/docs/latest/use/configure/configuration-files-deprecated#using-configuration-files)
1534
+ */
1535
+ root?: boolean | undefined;
1536
+ }
1537
+
1538
+ /**
1539
+ * Parser options.
1540
+ *
1541
+ * @see [Specifying Parser Options](https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options)
1542
+ */
1543
+ interface ParserOptions {
1544
+ /**
1545
+ * Accepts any valid ECMAScript version number or `'latest'`:
1546
+ *
1547
+ * - A version: es3, es5, es6, es7, es8, es9, es10, es11, es12, es13, es14, ..., or
1548
+ * - A year: es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, ..., or
1549
+ * - `'latest'`
1550
+ *
1551
+ * When it's a version or a year, the value must be a number - so do not include the `es` prefix.
1552
+ *
1553
+ * Specifies the version of ECMAScript syntax you want to use. This is used by the parser to determine how to perform scope analysis, and it affects the default
1554
+ *
1555
+ * @default 5
1556
+ */
1557
+ ecmaVersion?: EcmaVersion | undefined;
1558
+
1559
+ /**
1560
+ * The type of JavaScript source code. Possible values are "script" for
1561
+ * traditional script files, "module" for ECMAScript modules (ESM), and
1562
+ * "commonjs" for CommonJS files.
1563
+ *
1564
+ * @default 'script'
1565
+ *
1566
+ * @see https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options
1567
+ */
1568
+ sourceType?: SourceType | undefined;
1569
+
1570
+ /**
1571
+ * An object indicating which additional language features you'd like to use.
1572
+ *
1573
+ * @see https://eslint.org/docs/latest/use/configure/language-options-deprecated#specifying-parser-options
1574
+ */
1575
+ ecmaFeatures?:
1576
+ | {
1577
+ globalReturn?: boolean | undefined;
1578
+ impliedStrict?: boolean | undefined;
1579
+ jsx?: boolean | undefined;
1580
+ experimentalObjectRestSpread?: boolean | undefined;
1581
+ [key: string]: any;
1582
+ }
1583
+ | undefined;
1584
+ [key: string]: any;
1585
+ }
1586
+
1587
+ interface LintOptions {
1588
+ filename?: string | undefined;
1589
+ preprocess?: ((code: string) => string[]) | undefined;
1590
+ postprocess?:
1591
+ | ((problemLists: LintMessage[][]) => LintMessage[])
1592
+ | undefined;
1593
+ filterCodeBlock?: boolean | undefined;
1594
+ disableFixes?: boolean | undefined;
1595
+ allowInlineConfig?: boolean | undefined;
1596
+ reportUnusedDisableDirectives?: boolean | undefined;
1597
+ }
1598
+
1599
+ interface LintSuggestion {
1600
+ desc: string;
1601
+ fix: Rule.Fix;
1602
+ messageId?: string | undefined;
1603
+ }
1604
+
1605
+ interface LintMessage {
1606
+ column: number;
1607
+ line: number;
1608
+ endColumn?: number | undefined;
1609
+ endLine?: number | undefined;
1610
+ ruleId: string | null;
1611
+ message: string;
1612
+ messageId?: string | undefined;
1613
+ /**
1614
+ * @deprecated `nodeType` is deprecated and will be removed in the next major version.
1615
+ */
1616
+ nodeType?: string | undefined;
1617
+ fatal?: true | undefined;
1618
+ severity: Exclude<Severity, 0>;
1619
+ fix?: Rule.Fix | undefined;
1620
+ suggestions?: LintSuggestion[] | undefined;
1621
+ }
1622
+
1623
+ interface LintSuppression {
1624
+ kind: string;
1625
+ justification: string;
1626
+ }
1627
+
1628
+ interface SuppressedLintMessage extends LintMessage {
1629
+ suppressions: LintSuppression[];
1630
+ }
1631
+
1632
+ interface FixOptions extends LintOptions {
1633
+ fix?: boolean | undefined;
1634
+ }
1635
+
1636
+ interface FixReport {
1637
+ fixed: boolean;
1638
+ output: string;
1639
+ messages: LintMessage[];
1640
+ }
1641
+
1642
+ // Temporarily loosen type for just flat config files (see #68232)
1643
+ type NonESTreeParser = Omit<ESTreeParser, "parseForESLint"> &
1644
+ (
1645
+ | {
1646
+ parse(text: string, options?: any): unknown;
1647
+ }
1648
+ | {
1649
+ parseForESLint(
1650
+ text: string,
1651
+ options?: any,
1652
+ ): Omit<ESLintParseResult, "ast" | "scopeManager"> & {
1653
+ ast: unknown;
1654
+ scopeManager?: unknown;
1655
+ };
1656
+ }
1657
+ );
1658
+
1659
+ type ESTreeParser = ESLint.ObjectMetaProperties &
1660
+ (
1661
+ | { parse(text: string, options?: any): AST.Program }
1662
+ | { parseForESLint(text: string, options?: any): ESLintParseResult }
1663
+ );
1664
+
1665
+ type Parser = NonESTreeParser | ESTreeParser;
1666
+
1667
+ interface ESLintParseResult {
1668
+ ast: AST.Program;
1669
+ parserServices?: SourceCode.ParserServices | undefined;
1670
+ scopeManager?: Scope.ScopeManager | undefined;
1671
+ visitorKeys?: SourceCode.VisitorKeys | undefined;
1672
+ }
1673
+
1674
+ interface ProcessorFile {
1675
+ text: string;
1676
+ filename: string;
1677
+ }
1678
+
1679
+ // https://eslint.org/docs/latest/extend/plugins#processors-in-plugins
1680
+ interface Processor<
1681
+ T extends string | ProcessorFile = string | ProcessorFile,
1682
+ > extends ESLint.ObjectMetaProperties {
1683
+ supportsAutofix?: boolean | undefined;
1684
+ preprocess?(text: string, filename: string): T[];
1685
+ postprocess?(
1686
+ messages: LintMessage[][],
1687
+ filename: string,
1688
+ ): LintMessage[];
1689
+ }
1690
+
1691
+ interface Config<Rules extends RulesRecord = RulesRecord> {
1692
+ /**
1693
+ * An string to identify the configuration object. Used in error messages and
1694
+ * inspection tools.
1695
+ */
1696
+ name?: string;
1697
+
1698
+ /**
1699
+ * An array of glob patterns indicating the files that the configuration
1700
+ * object should apply to. If not specified, the configuration object applies
1701
+ * to all files
1702
+ */
1703
+ files?: Array<string | string[]>;
1704
+
1705
+ /**
1706
+ * An array of glob patterns indicating the files that the configuration
1707
+ * object should not apply to. If not specified, the configuration object
1708
+ * applies to all files matched by files
1709
+ */
1710
+ ignores?: string[];
1711
+
1712
+ /**
1713
+ * The name of the language used for linting. This is used to determine the
1714
+ * parser and other language-specific settings.
1715
+ * @since 9.7.0
1716
+ */
1717
+ language?: string;
1718
+
1719
+ /**
1720
+ * An object containing settings related to how JavaScript is configured for
1721
+ * linting.
1722
+ */
1723
+ languageOptions?: LanguageOptions;
1724
+
1725
+ /**
1726
+ * An object containing settings related to the linting process
1727
+ */
1728
+ linterOptions?: LinterOptions;
1729
+
1730
+ /**
1731
+ * Either an object containing preprocess() and postprocess() methods or a
1732
+ * string indicating the name of a processor inside of a plugin
1733
+ * (i.e., "pluginName/processorName").
1734
+ */
1735
+ processor?: string | Processor;
1736
+
1737
+ /**
1738
+ * An object containing a name-value mapping of plugin names to plugin objects.
1739
+ * When files is specified, these plugins are only available to the matching files.
1740
+ */
1741
+ plugins?: Record<string, ESLint.Plugin>;
1742
+
1743
+ /**
1744
+ * An object containing the configured rules. When files or ignores are specified,
1745
+ * these rule configurations are only available to the matching files.
1746
+ */
1747
+ rules?: Partial<Rules>;
1748
+
1749
+ /**
1750
+ * An object containing name-value pairs of information that should be
1751
+ * available to all rules.
1752
+ */
1753
+ settings?: Record<string, unknown>;
1754
+ }
1755
+
1756
+ /** @deprecated Use `Config` instead of `FlatConfig` */
1757
+ type FlatConfig = Config;
1758
+
1759
+ type GlobalConf =
1760
+ | boolean
1761
+ | "off"
1762
+ | "readable"
1763
+ | "readonly"
1764
+ | "writable"
1765
+ | "writeable";
1766
+
1767
+ interface Globals {
1768
+ [name: string]: GlobalConf;
1769
+ }
1770
+
1771
+ interface LanguageOptions extends GenericLanguageOptions {
1772
+ /**
1773
+ * The version of ECMAScript to support. May be any year (i.e., 2022) or
1774
+ * version (i.e., 5). Set to "latest" for the most recent supported version.
1775
+ * @default "latest"
1776
+ */
1777
+ ecmaVersion?: EcmaVersion | undefined;
1778
+
1779
+ /**
1780
+ * The type of JavaScript source code. Possible values are "script" for
1781
+ * traditional script files, "module" for ECMAScript modules (ESM), and
1782
+ * "commonjs" for CommonJS files. (default: "module" for .js and .mjs
1783
+ * files; "commonjs" for .cjs files)
1784
+ */
1785
+ sourceType?: SourceType | undefined;
1786
+
1787
+ /**
1788
+ * An object specifying additional objects that should be added to the
1789
+ * global scope during linting.
1790
+ */
1791
+ globals?: Globals | undefined;
1792
+
1793
+ /**
1794
+ * An object containing a parse() or parseForESLint() method.
1795
+ * If not configured, the default ESLint parser (Espree) will be used.
1796
+ */
1797
+ parser?: Parser | undefined;
1798
+
1799
+ /**
1800
+ * An object specifying additional options that are passed directly to the
1801
+ * parser() method on the parser. The available options are parser-dependent
1802
+ */
1803
+ parserOptions?: Linter.ParserOptions | undefined;
1804
+ }
1805
+
1806
+ interface LinterOptions {
1807
+ /**
1808
+ * A boolean value indicating if inline configuration is allowed.
1809
+ */
1810
+ noInlineConfig?: boolean;
1811
+
1812
+ /**
1813
+ * A severity value indicating if and how unused disable directives should be
1814
+ * tracked and reported.
1815
+ */
1816
+ reportUnusedDisableDirectives?: Severity | StringSeverity | boolean;
1817
+
1818
+ /**
1819
+ * A severity value indicating if and how unused inline configs should be
1820
+ * tracked and reported.
1821
+ */
1822
+ reportUnusedInlineConfigs?: Severity | StringSeverity;
1823
+ }
1824
+
1825
+ interface Stats {
1826
+ /**
1827
+ * The number of times ESLint has applied at least one fix after linting.
1828
+ */
1829
+ fixPasses: number;
1830
+
1831
+ /**
1832
+ * The times spent on (parsing, fixing, linting) a file, where the linting refers to the timing information for each rule.
1833
+ */
1834
+ times: { passes: TimePass[] };
1835
+ }
1836
+
1837
+ interface TimePass {
1838
+ parse: { total: number };
1839
+ rules?: Record<string, { total: number }>;
1840
+ fix: { total: number };
1841
+ total: number;
1842
+ }
1412
1843
  }
1413
1844
 
1414
1845
  // #endregion
@@ -1416,286 +1847,306 @@ export namespace Linter {
1416
1847
  // #region ESLint
1417
1848
 
1418
1849
  export class ESLint {
1419
- static configType: "flat";
1850
+ static configType: "flat";
1420
1851
 
1421
- static readonly version: string;
1852
+ static readonly version: string;
1422
1853
 
1423
- /**
1424
- * The default configuration that ESLint uses internally. This is provided for tooling that wants to calculate configurations using the same defaults as ESLint.
1425
- * Keep in mind that the default configuration may change from version to version, so you shouldn't rely on any particular keys or values to be present.
1426
- */
1427
- static readonly defaultConfig: Linter.Config[];
1854
+ /**
1855
+ * The default configuration that ESLint uses internally. This is provided for tooling that wants to calculate configurations using the same defaults as ESLint.
1856
+ * Keep in mind that the default configuration may change from version to version, so you shouldn't rely on any particular keys or values to be present.
1857
+ */
1858
+ static readonly defaultConfig: Linter.Config[];
1428
1859
 
1429
- static outputFixes(results: ESLint.LintResult[]): Promise<void>;
1860
+ static outputFixes(results: ESLint.LintResult[]): Promise<void>;
1430
1861
 
1431
- static getErrorResults(results: ESLint.LintResult[]): ESLint.LintResult[];
1862
+ static getErrorResults(results: ESLint.LintResult[]): ESLint.LintResult[];
1432
1863
 
1433
- constructor(options?: ESLint.Options);
1864
+ constructor(options?: ESLint.Options);
1434
1865
 
1435
- lintFiles(patterns: string | string[]): Promise<ESLint.LintResult[]>;
1866
+ lintFiles(patterns: string | string[]): Promise<ESLint.LintResult[]>;
1436
1867
 
1437
- lintText(
1438
- code: string,
1439
- options?: { filePath?: string | undefined; warnIgnored?: boolean | undefined },
1440
- ): Promise<ESLint.LintResult[]>;
1868
+ lintText(
1869
+ code: string,
1870
+ options?: {
1871
+ filePath?: string | undefined;
1872
+ warnIgnored?: boolean | undefined;
1873
+ },
1874
+ ): Promise<ESLint.LintResult[]>;
1441
1875
 
1442
- getRulesMetaForResults(results: ESLint.LintResult[]): ESLint.LintResultData["rulesMeta"];
1876
+ getRulesMetaForResults(
1877
+ results: ESLint.LintResult[],
1878
+ ): ESLint.LintResultData["rulesMeta"];
1443
1879
 
1444
- hasFlag(flag: string): boolean;
1880
+ hasFlag(flag: string): boolean;
1445
1881
 
1446
- calculateConfigForFile(filePath: string): Promise<any>;
1882
+ calculateConfigForFile(filePath: string): Promise<any>;
1447
1883
 
1448
- findConfigFile(): Promise<string | undefined>;
1884
+ findConfigFile(): Promise<string | undefined>;
1449
1885
 
1450
- isPathIgnored(filePath: string): Promise<boolean>;
1886
+ isPathIgnored(filePath: string): Promise<boolean>;
1451
1887
 
1452
- loadFormatter(nameOrPath?: string): Promise<ESLint.LoadedFormatter>;
1888
+ loadFormatter(nameOrPath?: string): Promise<ESLint.LoadedFormatter>;
1453
1889
  }
1454
1890
 
1455
1891
  export namespace ESLint {
1456
- type ConfigData<Rules extends Linter.RulesRecord = Linter.RulesRecord> = Omit<
1457
- Linter.LegacyConfig<Rules>,
1458
- "$schema"
1459
- >;
1460
-
1461
- interface Environment {
1462
- globals?: Linter.Globals | undefined;
1463
- parserOptions?: Linter.ParserOptions | undefined;
1464
- }
1465
-
1466
- interface ObjectMetaProperties {
1467
- /** @deprecated Use `meta.name` instead. */
1468
- name?: string | undefined;
1469
-
1470
- /** @deprecated Use `meta.version` instead. */
1471
- version?: string | undefined;
1472
-
1473
- meta?: {
1474
- name?: string | undefined;
1475
- version?: string | undefined;
1476
- };
1477
- }
1478
-
1479
- interface Plugin extends ObjectMetaProperties {
1480
- configs?: Record<string, Linter.LegacyConfig | Linter.Config | Linter.Config[]> | undefined;
1481
- environments?: Record<string, Environment> | undefined;
1482
- languages?: Record<string, Language> | undefined;
1483
- processors?: Record<string, Linter.Processor> | undefined;
1484
- rules?: Record<string, RuleDefinition> | undefined;
1485
- }
1486
-
1487
- type FixType = "directive" | "problem" | "suggestion" | "layout";
1488
-
1489
- type CacheStrategy = "content" | "metadata";
1490
-
1491
- interface Options {
1492
- // File enumeration
1493
- cwd?: string | undefined;
1494
- errorOnUnmatchedPattern?: boolean | undefined;
1495
- globInputPaths?: boolean | undefined;
1496
- ignore?: boolean | undefined;
1497
- ignorePatterns?: string[] | null | undefined;
1498
- passOnNoPatterns?: boolean | undefined;
1499
- warnIgnored?: boolean | undefined;
1500
-
1501
- // Linting
1502
- allowInlineConfig?: boolean | undefined;
1503
- baseConfig?: Linter.Config | Linter.Config[] | null | undefined;
1504
- overrideConfig?: Linter.Config | Linter.Config[] | null | undefined;
1505
- overrideConfigFile?: string | true | null | undefined;
1506
- plugins?: Record<string, Plugin> | null | undefined;
1507
- ruleFilter?: ((arg: { ruleId: string; severity: Exclude<Linter.Severity, 0> }) => boolean) | undefined;
1508
- stats?: boolean | undefined;
1509
-
1510
- // Autofix
1511
- fix?: boolean | ((message: Linter.LintMessage) => boolean) | undefined;
1512
- fixTypes?: FixType[] | undefined;
1513
-
1514
- // Cache-related
1515
- cache?: boolean | undefined;
1516
- cacheLocation?: string | undefined;
1517
- cacheStrategy?: CacheStrategy | undefined;
1518
-
1519
- // Other Options
1520
- flags?: string[] | undefined;
1521
- }
1522
-
1523
- interface LegacyOptions {
1524
- // File enumeration
1525
- cwd?: string | undefined;
1526
- errorOnUnmatchedPattern?: boolean | undefined;
1527
- extensions?: string[] | undefined;
1528
- globInputPaths?: boolean | undefined;
1529
- ignore?: boolean | undefined;
1530
- ignorePath?: string | undefined;
1531
-
1532
- // Linting
1533
- allowInlineConfig?: boolean | undefined;
1534
- baseConfig?: Linter.LegacyConfig | undefined;
1535
- overrideConfig?: Linter.LegacyConfig | undefined;
1536
- overrideConfigFile?: string | undefined;
1537
- plugins?: Record<string, Plugin> | undefined;
1538
- reportUnusedDisableDirectives?: Linter.StringSeverity | undefined;
1539
- resolvePluginsRelativeTo?: string | undefined;
1540
- rulePaths?: string[] | undefined;
1541
- useEslintrc?: boolean | undefined;
1542
-
1543
- // Autofix
1544
- fix?: boolean | ((message: Linter.LintMessage) => boolean) | undefined;
1545
- fixTypes?: FixType[] | undefined;
1546
-
1547
- // Cache-related
1548
- cache?: boolean | undefined;
1549
- cacheLocation?: string | undefined;
1550
- cacheStrategy?: CacheStrategy | undefined;
1551
-
1552
- // Other Options
1553
- flags?: string[] | undefined;
1554
- }
1555
-
1556
- interface LintResult {
1557
- filePath: string;
1558
- messages: Linter.LintMessage[];
1559
- suppressedMessages: Linter.SuppressedLintMessage[];
1560
- errorCount: number;
1561
- fatalErrorCount: number;
1562
- warningCount: number;
1563
- fixableErrorCount: number;
1564
- fixableWarningCount: number;
1565
- output?: string | undefined;
1566
- source?: string | undefined;
1567
- stats?: Linter.Stats | undefined;
1568
- usedDeprecatedRules: DeprecatedRuleUse[];
1569
- }
1570
-
1571
- interface MaxWarningsExceeded {
1572
-
1573
- /**
1574
- * Number of warnings to trigger nonzero exit code.
1575
- */
1576
- maxWarnings: number;
1577
-
1578
- /**
1579
- * Number of warnings found while linting.
1580
- */
1581
- foundWarnings: number;
1582
- }
1583
-
1584
- interface LintResultData {
1585
- cwd: string;
1586
- maxWarningsExceeded?: MaxWarningsExceeded | undefined;
1587
- rulesMeta: {
1588
- [ruleId: string]: Rule.RuleMetaData;
1589
- };
1590
- }
1591
-
1592
- interface DeprecatedRuleUse {
1593
- ruleId: string;
1594
- replacedBy: string[];
1595
- }
1596
-
1597
- interface ResultsMeta {
1598
- maxWarningsExceeded?: MaxWarningsExceeded | undefined;
1599
- }
1600
-
1601
- /** The type of an object resolved by {@link ESLint.loadFormatter}. */
1602
- interface LoadedFormatter {
1603
-
1604
- /**
1605
- * Used to call the underlying formatter.
1606
- * @param results An array of lint results to format.
1607
- * @param resultsMeta An object with an optional `maxWarningsExceeded` property that will be
1608
- * passed to the underlying formatter function along with other properties set by ESLint.
1609
- * This argument can be omitted if `maxWarningsExceeded` is not needed.
1610
- * @return The formatter output.
1611
- */
1612
- format(results: LintResult[], resultsMeta?: ResultsMeta): string | Promise<string>;
1613
- }
1614
-
1615
- // The documented type name is `LoadedFormatter`, but `Formatter` has been historically more used.
1616
- type Formatter = LoadedFormatter;
1617
-
1618
- /**
1619
- * The expected signature of a custom formatter.
1620
- * @param results An array of lint results to format.
1621
- * @param context Additional information for the formatter.
1622
- * @return The formatter output.
1623
- */
1624
- type FormatterFunction =
1625
- (results: LintResult[], context: LintResultData) => string | Promise<string>;
1626
-
1627
- // Docs reference the types by those name
1628
- type EditInfo = Rule.Fix;
1892
+ type ConfigData<Rules extends Linter.RulesRecord = Linter.RulesRecord> =
1893
+ Omit<Linter.LegacyConfig<Rules>, "$schema">;
1894
+
1895
+ interface Environment {
1896
+ globals?: Linter.Globals | undefined;
1897
+ parserOptions?: Linter.ParserOptions | undefined;
1898
+ }
1899
+
1900
+ interface ObjectMetaProperties {
1901
+ /** @deprecated Use `meta.name` instead. */
1902
+ name?: string | undefined;
1903
+
1904
+ /** @deprecated Use `meta.version` instead. */
1905
+ version?: string | undefined;
1906
+
1907
+ meta?: {
1908
+ name?: string | undefined;
1909
+ version?: string | undefined;
1910
+ };
1911
+ }
1912
+
1913
+ interface Plugin extends ObjectMetaProperties {
1914
+ configs?:
1915
+ | Record<
1916
+ string,
1917
+ Linter.LegacyConfig | Linter.Config | Linter.Config[]
1918
+ >
1919
+ | undefined;
1920
+ environments?: Record<string, Environment> | undefined;
1921
+ languages?: Record<string, Language> | undefined;
1922
+ processors?: Record<string, Linter.Processor> | undefined;
1923
+ rules?: Record<string, RuleDefinition> | undefined;
1924
+ }
1925
+
1926
+ type FixType = "directive" | "problem" | "suggestion" | "layout";
1927
+
1928
+ type CacheStrategy = "content" | "metadata";
1929
+
1930
+ interface Options {
1931
+ // File enumeration
1932
+ cwd?: string | undefined;
1933
+ errorOnUnmatchedPattern?: boolean | undefined;
1934
+ globInputPaths?: boolean | undefined;
1935
+ ignore?: boolean | undefined;
1936
+ ignorePatterns?: string[] | null | undefined;
1937
+ passOnNoPatterns?: boolean | undefined;
1938
+ warnIgnored?: boolean | undefined;
1939
+
1940
+ // Linting
1941
+ allowInlineConfig?: boolean | undefined;
1942
+ baseConfig?: Linter.Config | Linter.Config[] | null | undefined;
1943
+ overrideConfig?: Linter.Config | Linter.Config[] | null | undefined;
1944
+ overrideConfigFile?: string | true | null | undefined;
1945
+ plugins?: Record<string, Plugin> | null | undefined;
1946
+ ruleFilter?:
1947
+ | ((arg: {
1948
+ ruleId: string;
1949
+ severity: Exclude<Linter.Severity, 0>;
1950
+ }) => boolean)
1951
+ | undefined;
1952
+ stats?: boolean | undefined;
1953
+
1954
+ // Autofix
1955
+ fix?: boolean | ((message: Linter.LintMessage) => boolean) | undefined;
1956
+ fixTypes?: FixType[] | undefined;
1957
+
1958
+ // Cache-related
1959
+ cache?: boolean | undefined;
1960
+ cacheLocation?: string | undefined;
1961
+ cacheStrategy?: CacheStrategy | undefined;
1962
+
1963
+ // Other Options
1964
+ flags?: string[] | undefined;
1965
+ }
1966
+
1967
+ interface LegacyOptions {
1968
+ // File enumeration
1969
+ cwd?: string | undefined;
1970
+ errorOnUnmatchedPattern?: boolean | undefined;
1971
+ extensions?: string[] | undefined;
1972
+ globInputPaths?: boolean | undefined;
1973
+ ignore?: boolean | undefined;
1974
+ ignorePath?: string | undefined;
1975
+
1976
+ // Linting
1977
+ allowInlineConfig?: boolean | undefined;
1978
+ baseConfig?: Linter.LegacyConfig | undefined;
1979
+ overrideConfig?: Linter.LegacyConfig | undefined;
1980
+ overrideConfigFile?: string | undefined;
1981
+ plugins?: Record<string, Plugin> | undefined;
1982
+ reportUnusedDisableDirectives?: Linter.StringSeverity | undefined;
1983
+ resolvePluginsRelativeTo?: string | undefined;
1984
+ rulePaths?: string[] | undefined;
1985
+ useEslintrc?: boolean | undefined;
1986
+
1987
+ // Autofix
1988
+ fix?: boolean | ((message: Linter.LintMessage) => boolean) | undefined;
1989
+ fixTypes?: FixType[] | undefined;
1990
+
1991
+ // Cache-related
1992
+ cache?: boolean | undefined;
1993
+ cacheLocation?: string | undefined;
1994
+ cacheStrategy?: CacheStrategy | undefined;
1995
+
1996
+ // Other Options
1997
+ flags?: string[] | undefined;
1998
+ }
1999
+
2000
+ interface LintResult {
2001
+ filePath: string;
2002
+ messages: Linter.LintMessage[];
2003
+ suppressedMessages: Linter.SuppressedLintMessage[];
2004
+ errorCount: number;
2005
+ fatalErrorCount: number;
2006
+ warningCount: number;
2007
+ fixableErrorCount: number;
2008
+ fixableWarningCount: number;
2009
+ output?: string | undefined;
2010
+ source?: string | undefined;
2011
+ stats?: Linter.Stats | undefined;
2012
+ usedDeprecatedRules: DeprecatedRuleUse[];
2013
+ }
2014
+
2015
+ interface MaxWarningsExceeded {
2016
+ /**
2017
+ * Number of warnings to trigger nonzero exit code.
2018
+ */
2019
+ maxWarnings: number;
2020
+
2021
+ /**
2022
+ * Number of warnings found while linting.
2023
+ */
2024
+ foundWarnings: number;
2025
+ }
2026
+
2027
+ interface LintResultData {
2028
+ cwd: string;
2029
+ maxWarningsExceeded?: MaxWarningsExceeded | undefined;
2030
+ rulesMeta: {
2031
+ [ruleId: string]: Rule.RuleMetaData;
2032
+ };
2033
+ }
2034
+
2035
+ interface DeprecatedRuleUse {
2036
+ ruleId: string;
2037
+ replacedBy: string[];
2038
+ }
2039
+
2040
+ interface ResultsMeta {
2041
+ maxWarningsExceeded?: MaxWarningsExceeded | undefined;
2042
+ }
2043
+
2044
+ /** The type of an object resolved by {@link ESLint.loadFormatter}. */
2045
+ interface LoadedFormatter {
2046
+ /**
2047
+ * Used to call the underlying formatter.
2048
+ * @param results An array of lint results to format.
2049
+ * @param resultsMeta An object with an optional `maxWarningsExceeded` property that will be
2050
+ * passed to the underlying formatter function along with other properties set by ESLint.
2051
+ * This argument can be omitted if `maxWarningsExceeded` is not needed.
2052
+ * @return The formatter output.
2053
+ */
2054
+ format(
2055
+ results: LintResult[],
2056
+ resultsMeta?: ResultsMeta,
2057
+ ): string | Promise<string>;
2058
+ }
2059
+
2060
+ // The documented type name is `LoadedFormatter`, but `Formatter` has been historically more used.
2061
+ type Formatter = LoadedFormatter;
2062
+
2063
+ /**
2064
+ * The expected signature of a custom formatter.
2065
+ * @param results An array of lint results to format.
2066
+ * @param context Additional information for the formatter.
2067
+ * @return The formatter output.
2068
+ */
2069
+ type FormatterFunction = (
2070
+ results: LintResult[],
2071
+ context: LintResultData,
2072
+ ) => string | Promise<string>;
2073
+
2074
+ // Docs reference the types by those name
2075
+ type EditInfo = Rule.Fix;
1629
2076
  }
1630
2077
 
1631
2078
  // #endregion
1632
2079
 
1633
- export function loadESLint(options: { useFlatConfig: true }): Promise<typeof ESLint>;
1634
- export function loadESLint(options: { useFlatConfig: false }): Promise<typeof LegacyESLint>;
1635
- export function loadESLint(
1636
- options?: { useFlatConfig?: boolean | undefined },
1637
- ): Promise<typeof ESLint | typeof LegacyESLint>;
2080
+ export function loadESLint(options: {
2081
+ useFlatConfig: true;
2082
+ }): Promise<typeof ESLint>;
2083
+ export function loadESLint(options: {
2084
+ useFlatConfig: false;
2085
+ }): Promise<typeof LegacyESLint>;
2086
+ export function loadESLint(options?: {
2087
+ useFlatConfig?: boolean | undefined;
2088
+ }): Promise<typeof ESLint | typeof LegacyESLint>;
1638
2089
 
1639
2090
  // #region RuleTester
1640
2091
 
1641
2092
  export class RuleTester {
1642
- static describe: ((...args: any) => any) | null;
1643
- static it: ((...args: any) => any) | null;
1644
- static itOnly: ((...args: any) => any) | null;
1645
-
1646
- constructor(config?: Linter.Config);
1647
-
1648
- run(
1649
- name: string,
1650
- rule: Rule.RuleModule,
1651
- tests: {
1652
- valid: Array<string | RuleTester.ValidTestCase>;
1653
- invalid: RuleTester.InvalidTestCase[];
1654
- },
1655
- ): void;
1656
-
1657
- static only(
1658
- item: string | RuleTester.ValidTestCase | RuleTester.InvalidTestCase,
1659
- ): RuleTester.ValidTestCase | RuleTester.InvalidTestCase;
2093
+ static describe: ((...args: any) => any) | null;
2094
+ static it: ((...args: any) => any) | null;
2095
+ static itOnly: ((...args: any) => any) | null;
2096
+
2097
+ constructor(config?: Linter.Config);
2098
+
2099
+ run(
2100
+ name: string,
2101
+ rule: Rule.RuleModule,
2102
+ tests: {
2103
+ valid: Array<string | RuleTester.ValidTestCase>;
2104
+ invalid: RuleTester.InvalidTestCase[];
2105
+ },
2106
+ ): void;
2107
+
2108
+ static only(
2109
+ item: string | RuleTester.ValidTestCase | RuleTester.InvalidTestCase,
2110
+ ): RuleTester.ValidTestCase | RuleTester.InvalidTestCase;
1660
2111
  }
1661
2112
 
1662
2113
  export namespace RuleTester {
1663
- interface ValidTestCase {
1664
- name?: string;
1665
- code: string;
1666
- options?: any;
1667
- filename?: string | undefined;
1668
- only?: boolean;
1669
- languageOptions?: Linter.LanguageOptions | undefined;
1670
- settings?: { [name: string]: any } | undefined;
1671
- }
1672
-
1673
- interface SuggestionOutput {
1674
- messageId?: string;
1675
- desc?: string;
1676
- data?: Record<string, unknown> | undefined;
1677
- output: string;
1678
- }
1679
-
1680
- interface InvalidTestCase extends ValidTestCase {
1681
- errors: number | Array<TestCaseError | string>;
1682
- output?: string | null | undefined;
1683
- }
1684
-
1685
- interface TestCaseError {
1686
- message?: string | RegExp;
1687
- messageId?: string;
1688
- /**
1689
- * @deprecated `type` is deprecated and will be removed in the next major version.
1690
- */
1691
- type?: string | undefined;
1692
- data?: any;
1693
- line?: number | undefined;
1694
- column?: number | undefined;
1695
- endLine?: number | undefined;
1696
- endColumn?: number | undefined;
1697
- suggestions?: SuggestionOutput[] | undefined;
1698
- }
2114
+ interface ValidTestCase {
2115
+ name?: string;
2116
+ code: string;
2117
+ options?: any;
2118
+ filename?: string | undefined;
2119
+ only?: boolean;
2120
+ languageOptions?: Linter.LanguageOptions | undefined;
2121
+ settings?: { [name: string]: any } | undefined;
2122
+ }
2123
+
2124
+ interface SuggestionOutput {
2125
+ messageId?: string;
2126
+ desc?: string;
2127
+ data?: Record<string, unknown> | undefined;
2128
+ output: string;
2129
+ }
2130
+
2131
+ interface InvalidTestCase extends ValidTestCase {
2132
+ errors: number | Array<TestCaseError | string>;
2133
+ output?: string | null | undefined;
2134
+ }
2135
+
2136
+ interface TestCaseError {
2137
+ message?: string | RegExp;
2138
+ messageId?: string;
2139
+ /**
2140
+ * @deprecated `type` is deprecated and will be removed in the next major version.
2141
+ */
2142
+ type?: string | undefined;
2143
+ data?: any;
2144
+ line?: number | undefined;
2145
+ column?: number | undefined;
2146
+ endLine?: number | undefined;
2147
+ endColumn?: number | undefined;
2148
+ suggestions?: SuggestionOutput[] | undefined;
2149
+ }
1699
2150
  }
1700
2151
 
1701
2152
  // #endregion