eslint 9.21.0 → 9.23.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 (425) hide show
  1. package/README.md +52 -48
  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 +828 -808
  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 +541 -457
  21. package/lib/config/config-loader.js +648 -618
  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 +65 -68
  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 +12 -0
  29. package/lib/eslint/eslint-helpers.js +709 -679
  30. package/lib/eslint/eslint.js +944 -886
  31. package/lib/eslint/index.js +2 -2
  32. package/lib/eslint/legacy-eslint.js +576 -532
  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 +1129 -1054
  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 +2402 -2044
  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 +35 -35
  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 +375 -361
  71. package/lib/rule-tester/index.js +1 -1
  72. package/lib/rule-tester/rule-tester.js +1307 -1045
  73. package/lib/rules/accessor-pairs.js +297 -262
  74. package/lib/rules/array-bracket-newline.js +249 -237
  75. package/lib/rules/array-bracket-spacing.js +262 -223
  76. package/lib/rules/array-callback-return.js +401 -355
  77. package/lib/rules/array-element-newline.js +357 -312
  78. package/lib/rules/arrow-body-style.js +399 -280
  79. package/lib/rules/arrow-parens.js +205 -172
  80. package/lib/rules/arrow-spacing.js +168 -162
  81. package/lib/rules/block-scoped-var.js +124 -122
  82. package/lib/rules/block-spacing.js +185 -175
  83. package/lib/rules/brace-style.js +261 -198
  84. package/lib/rules/callback-return.js +202 -189
  85. package/lib/rules/camelcase.js +402 -391
  86. package/lib/rules/capitalized-comments.js +252 -231
  87. package/lib/rules/class-methods-use-this.js +179 -171
  88. package/lib/rules/comma-dangle.js +378 -345
  89. package/lib/rules/comma-spacing.js +192 -194
  90. package/lib/rules/comma-style.js +374 -315
  91. package/lib/rules/complexity.js +172 -168
  92. package/lib/rules/computed-property-spacing.js +235 -210
  93. package/lib/rules/consistent-return.js +180 -169
  94. package/lib/rules/consistent-this.js +166 -146
  95. package/lib/rules/constructor-super.js +411 -403
  96. package/lib/rules/curly.js +406 -331
  97. package/lib/rules/default-case-last.js +37 -30
  98. package/lib/rules/default-case.js +88 -84
  99. package/lib/rules/default-param-last.js +68 -53
  100. package/lib/rules/dot-location.js +121 -109
  101. package/lib/rules/dot-notation.js +191 -155
  102. package/lib/rules/eol-last.js +121 -119
  103. package/lib/rules/eqeqeq.js +167 -154
  104. package/lib/rules/for-direction.js +145 -120
  105. package/lib/rules/func-call-spacing.js +260 -230
  106. package/lib/rules/func-name-matching.js +292 -208
  107. package/lib/rules/func-names.js +164 -163
  108. package/lib/rules/func-style.js +158 -126
  109. package/lib/rules/function-call-argument-newline.js +151 -128
  110. package/lib/rules/function-paren-newline.js +348 -290
  111. package/lib/rules/generator-star-spacing.js +228 -209
  112. package/lib/rules/getter-return.js +207 -171
  113. package/lib/rules/global-require.js +84 -73
  114. package/lib/rules/grouped-accessor-pairs.js +169 -149
  115. package/lib/rules/guard-for-in.js +71 -62
  116. package/lib/rules/handle-callback-err.js +107 -102
  117. package/lib/rules/id-blacklist.js +181 -198
  118. package/lib/rules/id-denylist.js +167 -186
  119. package/lib/rules/id-length.js +196 -170
  120. package/lib/rules/id-match.js +343 -288
  121. package/lib/rules/implicit-arrow-linebreak.js +101 -78
  122. package/lib/rules/indent-legacy.js +1343 -1117
  123. package/lib/rules/indent.js +2271 -1758
  124. package/lib/rules/index.js +317 -292
  125. package/lib/rules/init-declarations.js +115 -106
  126. package/lib/rules/jsx-quotes.js +93 -81
  127. package/lib/rules/key-spacing.js +749 -632
  128. package/lib/rules/keyword-spacing.js +647 -604
  129. package/lib/rules/line-comment-position.js +141 -127
  130. package/lib/rules/linebreak-style.js +106 -105
  131. package/lib/rules/lines-around-comment.js +539 -447
  132. package/lib/rules/lines-around-directive.js +232 -202
  133. package/lib/rules/lines-between-class-members.js +304 -233
  134. package/lib/rules/logical-assignment-operators.js +581 -398
  135. package/lib/rules/max-classes-per-file.js +68 -67
  136. package/lib/rules/max-depth.js +145 -142
  137. package/lib/rules/max-len.js +472 -433
  138. package/lib/rules/max-lines-per-function.js +200 -175
  139. package/lib/rules/max-lines.js +157 -161
  140. package/lib/rules/max-nested-callbacks.js +101 -103
  141. package/lib/rules/max-params.js +77 -75
  142. package/lib/rules/max-statements-per-line.js +204 -197
  143. package/lib/rules/max-statements.js +167 -163
  144. package/lib/rules/multiline-comment-style.js +636 -478
  145. package/lib/rules/multiline-ternary.js +240 -175
  146. package/lib/rules/new-cap.js +232 -212
  147. package/lib/rules/new-parens.js +87 -78
  148. package/lib/rules/newline-after-var.js +286 -249
  149. package/lib/rules/newline-before-return.js +228 -221
  150. package/lib/rules/newline-per-chained-call.js +141 -126
  151. package/lib/rules/no-alert.js +89 -78
  152. package/lib/rules/no-array-constructor.js +121 -112
  153. package/lib/rules/no-async-promise-executor.js +29 -23
  154. package/lib/rules/no-await-in-loop.js +68 -70
  155. package/lib/rules/no-bitwise.js +123 -99
  156. package/lib/rules/no-buffer-constructor.js +54 -46
  157. package/lib/rules/no-caller.js +38 -32
  158. package/lib/rules/no-case-declarations.js +60 -56
  159. package/lib/rules/no-catch-shadow.js +75 -72
  160. package/lib/rules/no-class-assign.js +50 -47
  161. package/lib/rules/no-compare-neg-zero.js +61 -47
  162. package/lib/rules/no-cond-assign.js +147 -131
  163. package/lib/rules/no-confusing-arrow.js +97 -80
  164. package/lib/rules/no-console.js +201 -190
  165. package/lib/rules/no-const-assign.js +46 -40
  166. package/lib/rules/no-constant-binary-expression.js +499 -404
  167. package/lib/rules/no-constant-condition.js +157 -142
  168. package/lib/rules/no-constructor-return.js +48 -48
  169. package/lib/rules/no-continue.js +24 -26
  170. package/lib/rules/no-control-regex.js +124 -120
  171. package/lib/rules/no-debugger.js +27 -29
  172. package/lib/rules/no-delete-var.js +28 -28
  173. package/lib/rules/no-div-regex.js +46 -40
  174. package/lib/rules/no-dupe-args.js +67 -68
  175. package/lib/rules/no-dupe-class-members.js +92 -88
  176. package/lib/rules/no-dupe-else-if.js +99 -76
  177. package/lib/rules/no-dupe-keys.js +132 -109
  178. package/lib/rules/no-duplicate-case.js +49 -42
  179. package/lib/rules/no-duplicate-imports.js +178 -175
  180. package/lib/rules/no-else-return.js +429 -384
  181. package/lib/rules/no-empty-character-class.js +56 -49
  182. package/lib/rules/no-empty-function.js +126 -127
  183. package/lib/rules/no-empty-pattern.js +62 -57
  184. package/lib/rules/no-empty-static-block.js +36 -34
  185. package/lib/rules/no-empty.js +97 -85
  186. package/lib/rules/no-eq-null.js +36 -31
  187. package/lib/rules/no-eval.js +255 -249
  188. package/lib/rules/no-ex-assign.js +41 -38
  189. package/lib/rules/no-extend-native.js +160 -158
  190. package/lib/rules/no-extra-bind.js +200 -189
  191. package/lib/rules/no-extra-boolean-cast.js +397 -347
  192. package/lib/rules/no-extra-label.js +149 -130
  193. package/lib/rules/no-extra-parens.js +1653 -1324
  194. package/lib/rules/no-extra-semi.js +145 -143
  195. package/lib/rules/no-fallthrough.js +198 -156
  196. package/lib/rules/no-floating-decimal.js +73 -65
  197. package/lib/rules/no-func-assign.js +53 -54
  198. package/lib/rules/no-global-assign.js +77 -72
  199. package/lib/rules/no-implicit-coercion.js +348 -292
  200. package/lib/rules/no-implicit-globals.js +157 -134
  201. package/lib/rules/no-implied-eval.js +139 -111
  202. package/lib/rules/no-import-assign.js +144 -158
  203. package/lib/rules/no-inline-comments.js +100 -94
  204. package/lib/rules/no-inner-declarations.js +114 -100
  205. package/lib/rules/no-invalid-regexp.js +221 -189
  206. package/lib/rules/no-invalid-this.js +122 -116
  207. package/lib/rules/no-irregular-whitespace.js +265 -251
  208. package/lib/rules/no-iterator.js +28 -32
  209. package/lib/rules/no-label-var.js +58 -61
  210. package/lib/rules/no-labels.js +137 -132
  211. package/lib/rules/no-lone-blocks.js +126 -122
  212. package/lib/rules/no-lonely-if.js +107 -76
  213. package/lib/rules/no-loop-func.js +233 -212
  214. package/lib/rules/no-loss-of-precision.js +215 -200
  215. package/lib/rules/no-magic-numbers.js +245 -217
  216. package/lib/rules/no-misleading-character-class.js +498 -445
  217. package/lib/rules/no-mixed-operators.js +187 -181
  218. package/lib/rules/no-mixed-requires.js +252 -239
  219. package/lib/rules/no-mixed-spaces-and-tabs.js +133 -120
  220. package/lib/rules/no-multi-assign.js +45 -43
  221. package/lib/rules/no-multi-spaces.js +162 -142
  222. package/lib/rules/no-multi-str.js +41 -40
  223. package/lib/rules/no-multiple-empty-lines.js +195 -157
  224. package/lib/rules/no-native-reassign.js +89 -84
  225. package/lib/rules/no-negated-condition.js +78 -74
  226. package/lib/rules/no-negated-in-lhs.js +44 -42
  227. package/lib/rules/no-nested-ternary.js +32 -31
  228. package/lib/rules/no-new-func.js +70 -61
  229. package/lib/rules/no-new-native-nonconstructor.js +42 -38
  230. package/lib/rules/no-new-object.js +47 -47
  231. package/lib/rules/no-new-require.js +47 -46
  232. package/lib/rules/no-new-symbol.js +51 -49
  233. package/lib/rules/no-new-wrappers.js +42 -40
  234. package/lib/rules/no-new.js +27 -28
  235. package/lib/rules/no-nonoctal-decimal-escape.js +140 -120
  236. package/lib/rules/no-obj-calls.js +65 -52
  237. package/lib/rules/no-object-constructor.js +103 -96
  238. package/lib/rules/no-octal-escape.js +39 -42
  239. package/lib/rules/no-octal.js +31 -31
  240. package/lib/rules/no-param-reassign.js +234 -216
  241. package/lib/rules/no-path-concat.js +65 -66
  242. package/lib/rules/no-plusplus.js +59 -60
  243. package/lib/rules/no-process-env.js +48 -47
  244. package/lib/rules/no-process-exit.js +53 -49
  245. package/lib/rules/no-promise-executor-return.js +213 -181
  246. package/lib/rules/no-proto.js +25 -28
  247. package/lib/rules/no-prototype-builtins.js +145 -123
  248. package/lib/rules/no-redeclare.js +153 -151
  249. package/lib/rules/no-regex-spaces.js +182 -160
  250. package/lib/rules/no-restricted-exports.js +207 -184
  251. package/lib/rules/no-restricted-globals.js +110 -111
  252. package/lib/rules/no-restricted-imports.js +656 -536
  253. package/lib/rules/no-restricted-modules.js +221 -201
  254. package/lib/rules/no-restricted-properties.js +180 -152
  255. package/lib/rules/no-restricted-syntax.js +55 -51
  256. package/lib/rules/no-return-assign.js +54 -49
  257. package/lib/rules/no-return-await.js +147 -123
  258. package/lib/rules/no-script-url.js +51 -44
  259. package/lib/rules/no-self-assign.js +147 -145
  260. package/lib/rules/no-self-compare.js +62 -45
  261. package/lib/rules/no-sequences.js +134 -115
  262. package/lib/rules/no-setter-return.js +184 -151
  263. package/lib/rules/no-shadow-restricted-names.js +60 -45
  264. package/lib/rules/no-shadow.js +341 -315
  265. package/lib/rules/no-spaced-func.js +81 -76
  266. package/lib/rules/no-sparse-arrays.js +53 -58
  267. package/lib/rules/no-sync.js +60 -59
  268. package/lib/rules/no-tabs.js +82 -71
  269. package/lib/rules/no-template-curly-in-string.js +32 -31
  270. package/lib/rules/no-ternary.js +24 -28
  271. package/lib/rules/no-this-before-super.js +320 -318
  272. package/lib/rules/no-throw-literal.js +30 -35
  273. package/lib/rules/no-trailing-spaces.js +198 -190
  274. package/lib/rules/no-undef-init.js +75 -60
  275. package/lib/rules/no-undef.js +50 -47
  276. package/lib/rules/no-undefined.js +72 -74
  277. package/lib/rules/no-underscore-dangle.js +369 -326
  278. package/lib/rules/no-unexpected-multiline.js +111 -101
  279. package/lib/rules/no-unmodified-loop-condition.js +253 -253
  280. package/lib/rules/no-unneeded-ternary.js +211 -146
  281. package/lib/rules/no-unreachable-loop.js +144 -141
  282. package/lib/rules/no-unreachable.js +254 -247
  283. package/lib/rules/no-unsafe-finally.js +92 -84
  284. package/lib/rules/no-unsafe-negation.js +104 -82
  285. package/lib/rules/no-unsafe-optional-chaining.js +191 -177
  286. package/lib/rules/no-unused-expressions.js +177 -161
  287. package/lib/rules/no-unused-labels.js +138 -123
  288. package/lib/rules/no-unused-private-class-members.js +205 -181
  289. package/lib/rules/no-unused-vars.js +1668 -1448
  290. package/lib/rules/no-use-before-define.js +228 -230
  291. package/lib/rules/no-useless-assignment.js +589 -510
  292. package/lib/rules/no-useless-backreference.js +211 -192
  293. package/lib/rules/no-useless-call.js +57 -52
  294. package/lib/rules/no-useless-catch.js +39 -39
  295. package/lib/rules/no-useless-computed-key.js +143 -114
  296. package/lib/rules/no-useless-concat.js +64 -59
  297. package/lib/rules/no-useless-constructor.js +157 -110
  298. package/lib/rules/no-useless-escape.js +341 -290
  299. package/lib/rules/no-useless-rename.js +182 -155
  300. package/lib/rules/no-useless-return.js +343 -311
  301. package/lib/rules/no-var.js +232 -211
  302. package/lib/rules/no-void.js +49 -47
  303. package/lib/rules/no-warning-comments.js +190 -185
  304. package/lib/rules/no-whitespace-before-property.js +130 -114
  305. package/lib/rules/no-with.js +23 -25
  306. package/lib/rules/nonblock-statement-body-position.js +148 -129
  307. package/lib/rules/object-curly-newline.js +305 -264
  308. package/lib/rules/object-curly-spacing.js +359 -313
  309. package/lib/rules/object-property-newline.js +136 -105
  310. package/lib/rules/object-shorthand.js +606 -501
  311. package/lib/rules/one-var-declaration-per-line.js +103 -99
  312. package/lib/rules/one-var.js +652 -536
  313. package/lib/rules/operator-assignment.js +218 -160
  314. package/lib/rules/operator-linebreak.js +294 -250
  315. package/lib/rules/padded-blocks.js +345 -307
  316. package/lib/rules/padding-line-between-statements.js +442 -438
  317. package/lib/rules/prefer-arrow-callback.js +361 -312
  318. package/lib/rules/prefer-const.js +417 -376
  319. package/lib/rules/prefer-destructuring.js +300 -278
  320. package/lib/rules/prefer-exponentiation-operator.js +175 -132
  321. package/lib/rules/prefer-named-capture-group.js +152 -139
  322. package/lib/rules/prefer-numeric-literals.js +120 -112
  323. package/lib/rules/prefer-object-has-own.js +115 -81
  324. package/lib/rules/prefer-object-spread.js +212 -192
  325. package/lib/rules/prefer-promise-reject-errors.js +139 -121
  326. package/lib/rules/prefer-reflect.js +126 -106
  327. package/lib/rules/prefer-regex-literals.js +577 -465
  328. package/lib/rules/prefer-rest-params.js +78 -79
  329. package/lib/rules/prefer-spread.js +46 -43
  330. package/lib/rules/prefer-template.js +265 -194
  331. package/lib/rules/quote-props.js +372 -306
  332. package/lib/rules/quotes.js +373 -325
  333. package/lib/rules/radix.js +151 -135
  334. package/lib/rules/require-atomic-updates.js +315 -284
  335. package/lib/rules/require-await.js +143 -115
  336. package/lib/rules/require-unicode-regexp.js +281 -176
  337. package/lib/rules/require-yield.js +52 -53
  338. package/lib/rules/rest-spread-spacing.js +127 -115
  339. package/lib/rules/semi-spacing.js +280 -249
  340. package/lib/rules/semi-style.js +175 -133
  341. package/lib/rules/semi.js +455 -435
  342. package/lib/rules/sort-imports.js +305 -232
  343. package/lib/rules/sort-keys.js +218 -187
  344. package/lib/rules/sort-vars.js +126 -92
  345. package/lib/rules/space-before-blocks.js +198 -188
  346. package/lib/rules/space-before-function-paren.js +185 -165
  347. package/lib/rules/space-in-parens.js +358 -287
  348. package/lib/rules/space-infix-ops.js +236 -200
  349. package/lib/rules/space-unary-ops.js +355 -297
  350. package/lib/rules/spaced-comment.js +362 -318
  351. package/lib/rules/strict.js +264 -229
  352. package/lib/rules/switch-colon-spacing.js +129 -121
  353. package/lib/rules/symbol-description.js +44 -47
  354. package/lib/rules/template-curly-spacing.js +147 -141
  355. package/lib/rules/template-tag-spacing.js +97 -87
  356. package/lib/rules/unicode-bom.js +53 -55
  357. package/lib/rules/use-isnan.js +236 -205
  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 +152 -110
  370. package/lib/rules/vars-on-top.js +151 -144
  371. package/lib/rules/wrap-iife.js +203 -190
  372. package/lib/rules/wrap-regex.js +69 -57
  373. package/lib/rules/yield-star-spacing.js +144 -133
  374. package/lib/rules/yoda.js +282 -271
  375. package/lib/services/parser-service.js +35 -35
  376. package/lib/services/processor-service.js +66 -73
  377. package/lib/shared/ajv.js +14 -14
  378. package/lib/shared/assert.js +3 -4
  379. package/lib/shared/ast-utils.js +7 -6
  380. package/lib/shared/deep-merge-arrays.js +24 -22
  381. package/lib/shared/directives.js +3 -2
  382. package/lib/shared/flags.js +46 -17
  383. package/lib/shared/logging.js +24 -25
  384. package/lib/shared/option-utils.js +43 -36
  385. package/lib/shared/runtime-info.js +136 -127
  386. package/lib/shared/serialization.js +27 -27
  387. package/lib/shared/severity.js +22 -22
  388. package/lib/shared/stats.js +5 -5
  389. package/lib/shared/string-utils.js +16 -16
  390. package/lib/shared/text-table.js +28 -27
  391. package/lib/shared/traverser.js +153 -146
  392. package/lib/types/config-api.d.ts +8 -0
  393. package/lib/types/index.d.ts +2010 -1559
  394. package/lib/types/rules.d.ts +5312 -0
  395. package/lib/types/use-at-your-own-risk.d.ts +32 -30
  396. package/lib/unsupported-api.js +5 -5
  397. package/messages/all-files-ignored.js +3 -3
  398. package/messages/all-matched-files-ignored.js +3 -3
  399. package/messages/config-file-missing.js +2 -2
  400. package/messages/config-plugin-missing.js +3 -3
  401. package/messages/config-serialize-function.js +9 -7
  402. package/messages/eslintrc-incompat.js +13 -15
  403. package/messages/eslintrc-plugins.js +3 -4
  404. package/messages/extend-config-missing.js +3 -3
  405. package/messages/failed-to-read-json.js +3 -3
  406. package/messages/file-not-found.js +3 -3
  407. package/messages/invalid-rule-options.js +2 -2
  408. package/messages/invalid-rule-severity.js +2 -2
  409. package/messages/no-config-found.js +3 -3
  410. package/messages/plugin-conflict.js +8 -8
  411. package/messages/plugin-invalid.js +3 -3
  412. package/messages/plugin-missing.js +3 -3
  413. package/messages/print-config-with-directory-path.js +2 -2
  414. package/messages/shared.js +6 -1
  415. package/messages/whitespace-found.js +3 -3
  416. package/package.json +22 -20
  417. package/lib/types/rules/best-practices.d.ts +0 -1143
  418. package/lib/types/rules/deprecated.d.ts +0 -252
  419. package/lib/types/rules/ecmascript-6.d.ts +0 -647
  420. package/lib/types/rules/index.d.ts +0 -50
  421. package/lib/types/rules/node-commonjs.d.ts +0 -171
  422. package/lib/types/rules/possible-errors.d.ts +0 -685
  423. package/lib/types/rules/strict-mode.d.ts +0 -38
  424. package/lib/types/rules/stylistic-issues.d.ts +0 -2043
  425. package/lib/types/rules/variables.d.ts +0 -234
@@ -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
+ RuleContextTypeOptions & {
1179
+ LangOptions: Linter.LanguageOptions;
1180
+ Code: SourceCode;
1181
+ Node: ESTree.Node;
1182
+ }
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