bahlint 28.58.6934

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 (420) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +370 -0
  3. package/bin/eslint.js +195 -0
  4. package/conf/ecma-version.js +16 -0
  5. package/conf/globals.js +169 -0
  6. package/conf/replacements.json +26 -0
  7. package/conf/rule-type-list.json +91 -0
  8. package/lib/api.js +39 -0
  9. package/lib/cli-engine/formatters/formatters-meta.json +22 -0
  10. package/lib/cli-engine/formatters/gasoline.js +168 -0
  11. package/lib/cli-engine/formatters/html.js +359 -0
  12. package/lib/cli-engine/formatters/json-with-metadata.js +16 -0
  13. package/lib/cli-engine/formatters/json.js +13 -0
  14. package/lib/cli-engine/formatters/stylish.js +153 -0
  15. package/lib/cli-engine/hash.js +35 -0
  16. package/lib/cli-engine/lint-result-cache.js +220 -0
  17. package/lib/cli.js +607 -0
  18. package/lib/config/config-loader.js +683 -0
  19. package/lib/config/config.js +674 -0
  20. package/lib/config/default-config.js +78 -0
  21. package/lib/config/flat-config-array.js +217 -0
  22. package/lib/config/flat-config-schema.js +598 -0
  23. package/lib/config-api.js +12 -0
  24. package/lib/eslint/eslint-helpers.js +1462 -0
  25. package/lib/eslint/eslint.js +1364 -0
  26. package/lib/eslint/index.js +7 -0
  27. package/lib/eslint/worker.js +173 -0
  28. package/lib/languages/js/index.js +336 -0
  29. package/lib/languages/js/source-code/index.js +7 -0
  30. package/lib/languages/js/source-code/source-code.js +1178 -0
  31. package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +61 -0
  32. package/lib/languages/js/source-code/token-store/backward-token-cursor.js +57 -0
  33. package/lib/languages/js/source-code/token-store/cursor.js +76 -0
  34. package/lib/languages/js/source-code/token-store/cursors.js +120 -0
  35. package/lib/languages/js/source-code/token-store/decorative-cursor.js +38 -0
  36. package/lib/languages/js/source-code/token-store/filter-cursor.js +42 -0
  37. package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +65 -0
  38. package/lib/languages/js/source-code/token-store/forward-token-cursor.js +62 -0
  39. package/lib/languages/js/source-code/token-store/index.js +695 -0
  40. package/lib/languages/js/source-code/token-store/limit-cursor.js +39 -0
  41. package/lib/languages/js/source-code/token-store/padded-token-cursor.js +45 -0
  42. package/lib/languages/js/source-code/token-store/skip-cursor.js +41 -0
  43. package/lib/languages/js/source-code/token-store/utils.js +131 -0
  44. package/lib/languages/js/validate-language-options.js +196 -0
  45. package/lib/linter/apply-disable-directives.js +583 -0
  46. package/lib/linter/code-path-analysis/code-path-analyzer.js +828 -0
  47. package/lib/linter/code-path-analysis/code-path-segment.js +262 -0
  48. package/lib/linter/code-path-analysis/code-path-state.js +2370 -0
  49. package/lib/linter/code-path-analysis/code-path.js +332 -0
  50. package/lib/linter/code-path-analysis/debug-helpers.js +223 -0
  51. package/lib/linter/code-path-analysis/fork-context.js +374 -0
  52. package/lib/linter/code-path-analysis/id-generator.js +44 -0
  53. package/lib/linter/esquery.js +332 -0
  54. package/lib/linter/file-context.js +88 -0
  55. package/lib/linter/file-report.js +604 -0
  56. package/lib/linter/index.js +11 -0
  57. package/lib/linter/interpolate.js +50 -0
  58. package/lib/linter/linter.js +1614 -0
  59. package/lib/linter/rule-fixer.js +199 -0
  60. package/lib/linter/source-code-fixer.js +154 -0
  61. package/lib/linter/source-code-traverser.js +333 -0
  62. package/lib/linter/source-code-visitor.js +81 -0
  63. package/lib/linter/timing.js +209 -0
  64. package/lib/linter/vfile.js +115 -0
  65. package/lib/options.js +416 -0
  66. package/lib/rule-tester/index.js +7 -0
  67. package/lib/rule-tester/rule-tester.js +1817 -0
  68. package/lib/rules/accessor-pairs.js +420 -0
  69. package/lib/rules/array-bracket-newline.js +291 -0
  70. package/lib/rules/array-bracket-spacing.js +301 -0
  71. package/lib/rules/array-callback-return.js +493 -0
  72. package/lib/rules/array-element-newline.js +374 -0
  73. package/lib/rules/arrow-body-style.js +418 -0
  74. package/lib/rules/arrow-parens.js +237 -0
  75. package/lib/rules/arrow-spacing.js +188 -0
  76. package/lib/rules/block-scoped-var.js +137 -0
  77. package/lib/rules/block-spacing.js +202 -0
  78. package/lib/rules/brace-style.js +278 -0
  79. package/lib/rules/callback-return.js +216 -0
  80. package/lib/rules/camelcase.js +422 -0
  81. package/lib/rules/capitalized-comments.js +325 -0
  82. package/lib/rules/class-methods-use-this.js +250 -0
  83. package/lib/rules/comma-dangle.js +424 -0
  84. package/lib/rules/comma-spacing.js +205 -0
  85. package/lib/rules/comma-style.js +391 -0
  86. package/lib/rules/complexity.js +201 -0
  87. package/lib/rules/computed-property-spacing.js +251 -0
  88. package/lib/rules/consistent-return.js +221 -0
  89. package/lib/rules/consistent-this.js +179 -0
  90. package/lib/rules/constructor-super.js +453 -0
  91. package/lib/rules/curly.js +425 -0
  92. package/lib/rules/default-case-last.js +51 -0
  93. package/lib/rules/default-case.js +103 -0
  94. package/lib/rules/default-param-last.js +78 -0
  95. package/lib/rules/dot-location.js +138 -0
  96. package/lib/rules/dot-notation.js +216 -0
  97. package/lib/rules/eol-last.js +135 -0
  98. package/lib/rules/eqeqeq.js +210 -0
  99. package/lib/rules/for-direction.js +168 -0
  100. package/lib/rules/func-call-spacing.js +281 -0
  101. package/lib/rules/func-name-matching.js +338 -0
  102. package/lib/rules/func-names.js +194 -0
  103. package/lib/rules/func-style.js +221 -0
  104. package/lib/rules/function-call-argument-newline.js +166 -0
  105. package/lib/rules/function-paren-newline.js +368 -0
  106. package/lib/rules/generator-star-spacing.js +246 -0
  107. package/lib/rules/getter-return.js +242 -0
  108. package/lib/rules/global-require.js +117 -0
  109. package/lib/rules/grouped-accessor-pairs.js +268 -0
  110. package/lib/rules/guard-for-in.js +85 -0
  111. package/lib/rules/handle-callback-err.js +122 -0
  112. package/lib/rules/id-blacklist.js +241 -0
  113. package/lib/rules/id-denylist.js +223 -0
  114. package/lib/rules/id-length.js +217 -0
  115. package/lib/rules/id-match.js +363 -0
  116. package/lib/rules/implicit-arrow-linebreak.js +125 -0
  117. package/lib/rules/indent-legacy.js +1369 -0
  118. package/lib/rules/indent.js +2334 -0
  119. package/lib/rules/index.js +332 -0
  120. package/lib/rules/init-declarations.js +172 -0
  121. package/lib/rules/jsx-quotes.js +128 -0
  122. package/lib/rules/key-spacing.js +822 -0
  123. package/lib/rules/keyword-spacing.js +701 -0
  124. package/lib/rules/line-comment-position.js +157 -0
  125. package/lib/rules/linebreak-style.js +135 -0
  126. package/lib/rules/lines-around-comment.js +581 -0
  127. package/lib/rules/lines-around-directive.js +249 -0
  128. package/lib/rules/lines-between-class-members.js +358 -0
  129. package/lib/rules/logical-assignment-operators.js +688 -0
  130. package/lib/rules/max-classes-per-file.js +90 -0
  131. package/lib/rules/max-depth.js +159 -0
  132. package/lib/rules/max-len.js +497 -0
  133. package/lib/rules/max-lines-per-function.js +238 -0
  134. package/lib/rules/max-lines.js +189 -0
  135. package/lib/rules/max-nested-callbacks.js +115 -0
  136. package/lib/rules/max-params.js +148 -0
  137. package/lib/rules/max-statements-per-line.js +224 -0
  138. package/lib/rules/max-statements.js +188 -0
  139. package/lib/rules/multiline-comment-style.js +652 -0
  140. package/lib/rules/multiline-ternary.js +257 -0
  141. package/lib/rules/new-cap.js +277 -0
  142. package/lib/rules/new-parens.js +120 -0
  143. package/lib/rules/newline-after-var.js +307 -0
  144. package/lib/rules/newline-before-return.js +242 -0
  145. package/lib/rules/newline-per-chained-call.js +159 -0
  146. package/lib/rules/no-alert.js +149 -0
  147. package/lib/rules/no-array-constructor.js +195 -0
  148. package/lib/rules/no-async-promise-executor.js +45 -0
  149. package/lib/rules/no-await-in-loop.js +115 -0
  150. package/lib/rules/no-bitwise.js +145 -0
  151. package/lib/rules/no-buffer-constructor.js +74 -0
  152. package/lib/rules/no-caller.js +52 -0
  153. package/lib/rules/no-case-declarations.js +80 -0
  154. package/lib/rules/no-catch-shadow.js +96 -0
  155. package/lib/rules/no-class-assign.js +66 -0
  156. package/lib/rules/no-compare-neg-zero.js +74 -0
  157. package/lib/rules/no-cond-assign.js +175 -0
  158. package/lib/rules/no-confusing-arrow.js +127 -0
  159. package/lib/rules/no-console.js +221 -0
  160. package/lib/rules/no-const-assign.js +73 -0
  161. package/lib/rules/no-constant-binary-expression.js +603 -0
  162. package/lib/rules/no-constant-condition.js +177 -0
  163. package/lib/rules/no-constructor-return.js +62 -0
  164. package/lib/rules/no-continue.js +38 -0
  165. package/lib/rules/no-control-regex.js +142 -0
  166. package/lib/rules/no-debugger.js +41 -0
  167. package/lib/rules/no-delete-var.js +42 -0
  168. package/lib/rules/no-div-regex.js +60 -0
  169. package/lib/rules/no-dupe-args.js +92 -0
  170. package/lib/rules/no-dupe-class-members.js +117 -0
  171. package/lib/rules/no-dupe-else-if.js +145 -0
  172. package/lib/rules/no-dupe-keys.js +165 -0
  173. package/lib/rules/no-duplicate-case.js +78 -0
  174. package/lib/rules/no-duplicate-imports.js +368 -0
  175. package/lib/rules/no-else-return.js +450 -0
  176. package/lib/rules/no-empty-character-class.js +83 -0
  177. package/lib/rules/no-empty-function.js +236 -0
  178. package/lib/rules/no-empty-pattern.js +85 -0
  179. package/lib/rules/no-empty-static-block.js +73 -0
  180. package/lib/rules/no-empty.js +153 -0
  181. package/lib/rules/no-eq-null.js +51 -0
  182. package/lib/rules/no-eval.js +295 -0
  183. package/lib/rules/no-ex-assign.js +57 -0
  184. package/lib/rules/no-extend-native.js +180 -0
  185. package/lib/rules/no-extra-bind.js +224 -0
  186. package/lib/rules/no-extra-boolean-cast.js +420 -0
  187. package/lib/rules/no-extra-label.js +169 -0
  188. package/lib/rules/no-extra-parens.js +1669 -0
  189. package/lib/rules/no-extra-semi.js +167 -0
  190. package/lib/rules/no-fallthrough.js +260 -0
  191. package/lib/rules/no-floating-decimal.js +99 -0
  192. package/lib/rules/no-func-assign.js +77 -0
  193. package/lib/rules/no-global-assign.js +101 -0
  194. package/lib/rules/no-implicit-coercion.js +468 -0
  195. package/lib/rules/no-implicit-globals.js +187 -0
  196. package/lib/rules/no-implied-eval.js +170 -0
  197. package/lib/rules/no-import-assign.js +227 -0
  198. package/lib/rules/no-inline-comments.js +115 -0
  199. package/lib/rules/no-inner-declarations.js +147 -0
  200. package/lib/rules/no-invalid-regexp.js +244 -0
  201. package/lib/rules/no-invalid-this.js +178 -0
  202. package/lib/rules/no-irregular-whitespace.js +292 -0
  203. package/lib/rules/no-iterator.js +48 -0
  204. package/lib/rules/no-label-var.js +78 -0
  205. package/lib/rules/no-labels.js +156 -0
  206. package/lib/rules/no-lone-blocks.js +140 -0
  207. package/lib/rules/no-lonely-if.js +126 -0
  208. package/lib/rules/no-loop-func.js +267 -0
  209. package/lib/rules/no-loss-of-precision.js +249 -0
  210. package/lib/rules/no-magic-numbers.js +365 -0
  211. package/lib/rules/no-misleading-character-class.js +595 -0
  212. package/lib/rules/no-mixed-operators.js +253 -0
  213. package/lib/rules/no-mixed-requires.js +267 -0
  214. package/lib/rules/no-mixed-spaces-and-tabs.js +148 -0
  215. package/lib/rules/no-multi-assign.js +66 -0
  216. package/lib/rules/no-multi-spaces.js +179 -0
  217. package/lib/rules/no-multi-str.js +67 -0
  218. package/lib/rules/no-multiple-empty-lines.js +210 -0
  219. package/lib/rules/no-native-reassign.js +114 -0
  220. package/lib/rules/no-negated-condition.js +100 -0
  221. package/lib/rules/no-negated-in-lhs.js +59 -0
  222. package/lib/rules/no-nested-ternary.js +46 -0
  223. package/lib/rules/no-new-func.js +96 -0
  224. package/lib/rules/no-new-native-nonconstructor.js +70 -0
  225. package/lib/rules/no-new-object.js +76 -0
  226. package/lib/rules/no-new-require.js +67 -0
  227. package/lib/rules/no-new-symbol.js +74 -0
  228. package/lib/rules/no-new-wrappers.js +62 -0
  229. package/lib/rules/no-new.js +42 -0
  230. package/lib/rules/no-nonoctal-decimal-escape.js +176 -0
  231. package/lib/rules/no-obj-calls.js +99 -0
  232. package/lib/rules/no-object-constructor.js +124 -0
  233. package/lib/rules/no-octal-escape.js +53 -0
  234. package/lib/rules/no-octal.js +42 -0
  235. package/lib/rules/no-param-reassign.js +248 -0
  236. package/lib/rules/no-path-concat.js +79 -0
  237. package/lib/rules/no-plusplus.js +102 -0
  238. package/lib/rules/no-process-env.js +68 -0
  239. package/lib/rules/no-process-exit.js +67 -0
  240. package/lib/rules/no-promise-executor-return.js +264 -0
  241. package/lib/rules/no-proto.js +45 -0
  242. package/lib/rules/no-prototype-builtins.js +181 -0
  243. package/lib/rules/no-redeclare.js +173 -0
  244. package/lib/rules/no-regex-spaces.js +219 -0
  245. package/lib/rules/no-restricted-exports.js +227 -0
  246. package/lib/rules/no-restricted-globals.js +266 -0
  247. package/lib/rules/no-restricted-imports.js +892 -0
  248. package/lib/rules/no-restricted-modules.js +249 -0
  249. package/lib/rules/no-restricted-properties.js +233 -0
  250. package/lib/rules/no-restricted-syntax.js +74 -0
  251. package/lib/rules/no-return-assign.js +87 -0
  252. package/lib/rules/no-return-await.js +162 -0
  253. package/lib/rules/no-script-url.js +68 -0
  254. package/lib/rules/no-self-assign.js +186 -0
  255. package/lib/rules/no-self-compare.js +77 -0
  256. package/lib/rules/no-sequences.js +158 -0
  257. package/lib/rules/no-setter-return.js +224 -0
  258. package/lib/rules/no-shadow-restricted-names.js +113 -0
  259. package/lib/rules/no-shadow.js +624 -0
  260. package/lib/rules/no-spaced-func.js +105 -0
  261. package/lib/rules/no-sparse-arrays.js +68 -0
  262. package/lib/rules/no-sync.js +81 -0
  263. package/lib/rules/no-tabs.js +110 -0
  264. package/lib/rules/no-template-curly-in-string.js +45 -0
  265. package/lib/rules/no-ternary.js +38 -0
  266. package/lib/rules/no-this-before-super.js +365 -0
  267. package/lib/rules/no-throw-literal.js +46 -0
  268. package/lib/rules/no-trailing-spaces.js +227 -0
  269. package/lib/rules/no-unassigned-vars.js +80 -0
  270. package/lib/rules/no-undef-init.js +101 -0
  271. package/lib/rules/no-undef.js +84 -0
  272. package/lib/rules/no-undefined.js +85 -0
  273. package/lib/rules/no-underscore-dangle.js +383 -0
  274. package/lib/rules/no-unexpected-multiline.js +130 -0
  275. package/lib/rules/no-unmodified-loop-condition.js +360 -0
  276. package/lib/rules/no-unneeded-ternary.js +232 -0
  277. package/lib/rules/no-unreachable-loop.js +190 -0
  278. package/lib/rules/no-unreachable.js +300 -0
  279. package/lib/rules/no-unsafe-finally.js +119 -0
  280. package/lib/rules/no-unsafe-negation.js +152 -0
  281. package/lib/rules/no-unsafe-optional-chaining.js +221 -0
  282. package/lib/rules/no-unused-expressions.js +227 -0
  283. package/lib/rules/no-unused-labels.js +158 -0
  284. package/lib/rules/no-unused-private-class-members.js +219 -0
  285. package/lib/rules/no-unused-vars.js +1739 -0
  286. package/lib/rules/no-use-before-define.js +446 -0
  287. package/lib/rules/no-useless-assignment.js +657 -0
  288. package/lib/rules/no-useless-backreference.js +263 -0
  289. package/lib/rules/no-useless-call.js +95 -0
  290. package/lib/rules/no-useless-catch.js +57 -0
  291. package/lib/rules/no-useless-computed-key.js +204 -0
  292. package/lib/rules/no-useless-concat.js +121 -0
  293. package/lib/rules/no-useless-constructor.js +262 -0
  294. package/lib/rules/no-useless-escape.js +406 -0
  295. package/lib/rules/no-useless-rename.js +202 -0
  296. package/lib/rules/no-useless-return.js +401 -0
  297. package/lib/rules/no-var.js +367 -0
  298. package/lib/rules/no-void.js +69 -0
  299. package/lib/rules/no-warning-comments.js +209 -0
  300. package/lib/rules/no-whitespace-before-property.js +150 -0
  301. package/lib/rules/no-with.js +37 -0
  302. package/lib/rules/nonblock-statement-body-position.js +164 -0
  303. package/lib/rules/object-curly-newline.js +383 -0
  304. package/lib/rules/object-curly-spacing.js +369 -0
  305. package/lib/rules/object-property-newline.js +151 -0
  306. package/lib/rules/object-shorthand.js +652 -0
  307. package/lib/rules/one-var-declaration-per-line.js +117 -0
  308. package/lib/rules/one-var.js +717 -0
  309. package/lib/rules/operator-assignment.js +270 -0
  310. package/lib/rules/operator-linebreak.js +315 -0
  311. package/lib/rules/padded-blocks.js +366 -0
  312. package/lib/rules/padding-line-between-statements.js +612 -0
  313. package/lib/rules/prefer-arrow-callback.js +437 -0
  314. package/lib/rules/prefer-const.js +546 -0
  315. package/lib/rules/prefer-destructuring.js +332 -0
  316. package/lib/rules/prefer-exponentiation-operator.js +235 -0
  317. package/lib/rules/prefer-named-capture-group.js +197 -0
  318. package/lib/rules/prefer-numeric-literals.js +157 -0
  319. package/lib/rules/prefer-object-has-own.js +148 -0
  320. package/lib/rules/prefer-object-spread.js +319 -0
  321. package/lib/rules/prefer-promise-reject-errors.js +154 -0
  322. package/lib/rules/prefer-reflect.js +150 -0
  323. package/lib/rules/prefer-regex-literals.js +605 -0
  324. package/lib/rules/prefer-rest-params.js +117 -0
  325. package/lib/rules/prefer-spread.js +91 -0
  326. package/lib/rules/prefer-template.js +347 -0
  327. package/lib/rules/preserve-caught-error.js +535 -0
  328. package/lib/rules/quote-props.js +394 -0
  329. package/lib/rules/quotes.js +416 -0
  330. package/lib/rules/radix.js +193 -0
  331. package/lib/rules/require-atomic-updates.js +365 -0
  332. package/lib/rules/require-await.js +184 -0
  333. package/lib/rules/require-unicode-regexp.js +317 -0
  334. package/lib/rules/require-yield.js +86 -0
  335. package/lib/rules/rest-spread-spacing.js +150 -0
  336. package/lib/rules/semi-spacing.js +297 -0
  337. package/lib/rules/semi-style.js +218 -0
  338. package/lib/rules/semi.js +476 -0
  339. package/lib/rules/sort-imports.js +319 -0
  340. package/lib/rules/sort-keys.js +268 -0
  341. package/lib/rules/sort-vars.js +140 -0
  342. package/lib/rules/space-before-blocks.js +232 -0
  343. package/lib/rules/space-before-function-paren.js +202 -0
  344. package/lib/rules/space-in-parens.js +374 -0
  345. package/lib/rules/space-infix-ops.js +249 -0
  346. package/lib/rules/space-unary-ops.js +400 -0
  347. package/lib/rules/spaced-comment.js +447 -0
  348. package/lib/rules/strict.js +314 -0
  349. package/lib/rules/switch-colon-spacing.js +158 -0
  350. package/lib/rules/symbol-description.js +70 -0
  351. package/lib/rules/template-curly-spacing.js +168 -0
  352. package/lib/rules/template-tag-spacing.js +121 -0
  353. package/lib/rules/unicode-bom.js +73 -0
  354. package/lib/rules/use-isnan.js +268 -0
  355. package/lib/rules/utils/ast-utils.js +2828 -0
  356. package/lib/rules/utils/char-source.js +247 -0
  357. package/lib/rules/utils/fix-tracker.js +125 -0
  358. package/lib/rules/utils/keywords.js +67 -0
  359. package/lib/rules/utils/lazy-loading-rule-map.js +118 -0
  360. package/lib/rules/utils/regular-expressions.js +58 -0
  361. package/lib/rules/utils/unicode/index.js +16 -0
  362. package/lib/rules/utils/unicode/is-combining-character.js +13 -0
  363. package/lib/rules/utils/unicode/is-emoji-modifier.js +13 -0
  364. package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +13 -0
  365. package/lib/rules/utils/unicode/is-surrogate-pair.js +14 -0
  366. package/lib/rules/valid-typeof.js +171 -0
  367. package/lib/rules/vars-on-top.js +165 -0
  368. package/lib/rules/wrap-iife.js +238 -0
  369. package/lib/rules/wrap-regex.js +91 -0
  370. package/lib/rules/yield-star-spacing.js +158 -0
  371. package/lib/rules/yoda.js +362 -0
  372. package/lib/services/parser-service.js +64 -0
  373. package/lib/services/processor-service.js +100 -0
  374. package/lib/services/suppressions-service.js +302 -0
  375. package/lib/services/warning-service.js +87 -0
  376. package/lib/shared/ajv.js +34 -0
  377. package/lib/shared/assert.js +21 -0
  378. package/lib/shared/ast-utils.js +30 -0
  379. package/lib/shared/deep-merge-arrays.js +62 -0
  380. package/lib/shared/directives.js +16 -0
  381. package/lib/shared/flags.js +89 -0
  382. package/lib/shared/logging.js +38 -0
  383. package/lib/shared/naming.js +109 -0
  384. package/lib/shared/option-utils.js +63 -0
  385. package/lib/shared/relative-module-resolver.js +28 -0
  386. package/lib/shared/runtime-info.js +177 -0
  387. package/lib/shared/serialization.js +78 -0
  388. package/lib/shared/severity.js +49 -0
  389. package/lib/shared/stats.js +30 -0
  390. package/lib/shared/string-utils.js +58 -0
  391. package/lib/shared/text-table.js +68 -0
  392. package/lib/shared/translate-cli-options.js +223 -0
  393. package/lib/shared/traverser.js +202 -0
  394. package/lib/types/config-api.d.ts +12 -0
  395. package/lib/types/index.d.ts +1482 -0
  396. package/lib/types/rules.d.ts +5603 -0
  397. package/lib/types/universal.d.ts +6 -0
  398. package/lib/types/use-at-your-own-risk.d.ts +34 -0
  399. package/lib/universal.js +10 -0
  400. package/lib/unsupported-api.js +26 -0
  401. package/messages/all-files-ignored.js +16 -0
  402. package/messages/all-matched-files-ignored.js +21 -0
  403. package/messages/config-file-missing.js +16 -0
  404. package/messages/config-plugin-missing.js +14 -0
  405. package/messages/config-serialize-function.js +30 -0
  406. package/messages/eslintrc-incompat.js +117 -0
  407. package/messages/eslintrc-plugins.js +27 -0
  408. package/messages/extend-config-missing.js +13 -0
  409. package/messages/failed-to-read-json.js +11 -0
  410. package/messages/file-not-found.js +10 -0
  411. package/messages/invalid-rule-options.js +17 -0
  412. package/messages/invalid-rule-severity.js +13 -0
  413. package/messages/no-config-found.js +15 -0
  414. package/messages/plugin-conflict.js +22 -0
  415. package/messages/plugin-invalid.js +16 -0
  416. package/messages/plugin-missing.js +19 -0
  417. package/messages/print-config-with-directory-path.js +8 -0
  418. package/messages/shared.js +23 -0
  419. package/messages/whitespace-found.js +11 -0
  420. package/package.json +220 -0
@@ -0,0 +1,701 @@
1
+ /**
2
+ * @fileoverview Rule to enforce spacing before and after keywords.
3
+ * @author Toru Nagashima
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const astUtils = require("./utils/ast-utils"),
14
+ keywords = require("./utils/keywords");
15
+
16
+ //------------------------------------------------------------------------------
17
+ // Constants
18
+ //------------------------------------------------------------------------------
19
+
20
+ const PREV_TOKEN = /^[)\]}>]$/u;
21
+ const NEXT_TOKEN = /^(?:[([{<~!]|\+\+?|--?)$/u;
22
+ const PREV_TOKEN_M = /^[)\]}>*]$/u;
23
+ const NEXT_TOKEN_M = /^[{*]$/u;
24
+ const TEMPLATE_OPEN_PAREN = /\$\{$/u;
25
+ const TEMPLATE_CLOSE_PAREN = /^\}/u;
26
+ const CHECK_TYPE =
27
+ /^(?:JSXElement|RegularExpression|String|Template|PrivateIdentifier)$/u;
28
+ const KEYS = keywords.concat([
29
+ "as",
30
+ "async",
31
+ "await",
32
+ "from",
33
+ "get",
34
+ "let",
35
+ "of",
36
+ "set",
37
+ "yield",
38
+ ]);
39
+
40
+ // check duplications.
41
+ (function () {
42
+ KEYS.sort();
43
+ for (let i = 1; i < KEYS.length; ++i) {
44
+ if (KEYS[i] === KEYS[i - 1]) {
45
+ throw new Error(
46
+ `Duplication was found in the keyword list: ${KEYS[i]}`,
47
+ );
48
+ }
49
+ }
50
+ })();
51
+
52
+ //------------------------------------------------------------------------------
53
+ // Helpers
54
+ //------------------------------------------------------------------------------
55
+
56
+ /**
57
+ * Checks whether or not a given token is a "Template" token ends with "${".
58
+ * @param {Token} token A token to check.
59
+ * @returns {boolean} `true` if the token is a "Template" token ends with "${".
60
+ */
61
+ function isOpenParenOfTemplate(token) {
62
+ return token.type === "Template" && TEMPLATE_OPEN_PAREN.test(token.value);
63
+ }
64
+
65
+ /**
66
+ * Checks whether or not a given token is a "Template" token starts with "}".
67
+ * @param {Token} token A token to check.
68
+ * @returns {boolean} `true` if the token is a "Template" token starts with "}".
69
+ */
70
+ function isCloseParenOfTemplate(token) {
71
+ return token.type === "Template" && TEMPLATE_CLOSE_PAREN.test(token.value);
72
+ }
73
+
74
+ //------------------------------------------------------------------------------
75
+ // Rule Definition
76
+ //------------------------------------------------------------------------------
77
+
78
+ /** @type {import('../types').Rule.RuleModule} */
79
+ module.exports = {
80
+ meta: {
81
+ deprecated: {
82
+ message: "Formatting rules are being moved out of ESLint core.",
83
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
84
+ deprecatedSince: "8.53.0",
85
+ availableUntil: "11.0.0",
86
+ replacedBy: [
87
+ {
88
+ message:
89
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
90
+ url: "https://eslint.style/guide/migration",
91
+ plugin: {
92
+ name: "@stylistic/eslint-plugin",
93
+ url: "https://eslint.style",
94
+ },
95
+ rule: {
96
+ name: "keyword-spacing",
97
+ url: "https://eslint.style/rules/keyword-spacing",
98
+ },
99
+ },
100
+ ],
101
+ },
102
+ type: "layout",
103
+
104
+ docs: {
105
+ description: "Enforce consistent spacing before and after keywords",
106
+ recommended: false,
107
+ url: "https://eslint.org/docs/latest/rules/keyword-spacing",
108
+ },
109
+
110
+ fixable: "whitespace",
111
+
112
+ schema: [
113
+ {
114
+ type: "object",
115
+ properties: {
116
+ before: { type: "boolean", default: true },
117
+ after: { type: "boolean", default: true },
118
+ overrides: {
119
+ type: "object",
120
+ properties: KEYS.reduce((retv, key) => {
121
+ retv[key] = {
122
+ type: "object",
123
+ properties: {
124
+ before: { type: "boolean" },
125
+ after: { type: "boolean" },
126
+ },
127
+ additionalProperties: false,
128
+ };
129
+ return retv;
130
+ }, {}),
131
+ additionalProperties: false,
132
+ },
133
+ },
134
+ additionalProperties: false,
135
+ },
136
+ ],
137
+ messages: {
138
+ expectedBefore: 'Expected space(s) before "{{value}}".',
139
+ expectedAfter: 'Expected space(s) after "{{value}}".',
140
+ unexpectedBefore: 'Unexpected space(s) before "{{value}}".',
141
+ unexpectedAfter: 'Unexpected space(s) after "{{value}}".',
142
+ },
143
+ },
144
+
145
+ create(context) {
146
+ const sourceCode = context.sourceCode;
147
+
148
+ const tokensToIgnore = new WeakSet();
149
+
150
+ /**
151
+ * Reports a given token if there are not space(s) before the token.
152
+ * @param {Token} token A token to report.
153
+ * @param {RegExp} pattern A pattern of the previous token to check.
154
+ * @returns {void}
155
+ */
156
+ function expectSpaceBefore(token, pattern) {
157
+ const prevToken = sourceCode.getTokenBefore(token);
158
+
159
+ if (
160
+ prevToken &&
161
+ (CHECK_TYPE.test(prevToken.type) ||
162
+ pattern.test(prevToken.value)) &&
163
+ !isOpenParenOfTemplate(prevToken) &&
164
+ !tokensToIgnore.has(prevToken) &&
165
+ astUtils.isTokenOnSameLine(prevToken, token) &&
166
+ !sourceCode.isSpaceBetween(prevToken, token)
167
+ ) {
168
+ context.report({
169
+ loc: token.loc,
170
+ messageId: "expectedBefore",
171
+ data: token,
172
+ fix(fixer) {
173
+ return fixer.insertTextBefore(token, " ");
174
+ },
175
+ });
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Reports a given token if there are space(s) before the token.
181
+ * @param {Token} token A token to report.
182
+ * @param {RegExp} pattern A pattern of the previous token to check.
183
+ * @returns {void}
184
+ */
185
+ function unexpectSpaceBefore(token, pattern) {
186
+ const prevToken = sourceCode.getTokenBefore(token);
187
+
188
+ if (
189
+ prevToken &&
190
+ (CHECK_TYPE.test(prevToken.type) ||
191
+ pattern.test(prevToken.value)) &&
192
+ !isOpenParenOfTemplate(prevToken) &&
193
+ !tokensToIgnore.has(prevToken) &&
194
+ astUtils.isTokenOnSameLine(prevToken, token) &&
195
+ sourceCode.isSpaceBetween(prevToken, token)
196
+ ) {
197
+ context.report({
198
+ loc: { start: prevToken.loc.end, end: token.loc.start },
199
+ messageId: "unexpectedBefore",
200
+ data: token,
201
+ fix(fixer) {
202
+ return fixer.removeRange([
203
+ prevToken.range[1],
204
+ token.range[0],
205
+ ]);
206
+ },
207
+ });
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Reports a given token if there are not space(s) after the token.
213
+ * @param {Token} token A token to report.
214
+ * @param {RegExp} pattern A pattern of the next token to check.
215
+ * @returns {void}
216
+ */
217
+ function expectSpaceAfter(token, pattern) {
218
+ const nextToken = sourceCode.getTokenAfter(token);
219
+
220
+ if (
221
+ nextToken &&
222
+ (CHECK_TYPE.test(nextToken.type) ||
223
+ pattern.test(nextToken.value)) &&
224
+ !isCloseParenOfTemplate(nextToken) &&
225
+ !tokensToIgnore.has(nextToken) &&
226
+ astUtils.isTokenOnSameLine(token, nextToken) &&
227
+ !sourceCode.isSpaceBetween(token, nextToken)
228
+ ) {
229
+ context.report({
230
+ loc: token.loc,
231
+ messageId: "expectedAfter",
232
+ data: token,
233
+ fix(fixer) {
234
+ return fixer.insertTextAfter(token, " ");
235
+ },
236
+ });
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Reports a given token if there are space(s) after the token.
242
+ * @param {Token} token A token to report.
243
+ * @param {RegExp} pattern A pattern of the next token to check.
244
+ * @returns {void}
245
+ */
246
+ function unexpectSpaceAfter(token, pattern) {
247
+ const nextToken = sourceCode.getTokenAfter(token);
248
+
249
+ if (
250
+ nextToken &&
251
+ (CHECK_TYPE.test(nextToken.type) ||
252
+ pattern.test(nextToken.value)) &&
253
+ !isCloseParenOfTemplate(nextToken) &&
254
+ !tokensToIgnore.has(nextToken) &&
255
+ astUtils.isTokenOnSameLine(token, nextToken) &&
256
+ sourceCode.isSpaceBetween(token, nextToken)
257
+ ) {
258
+ context.report({
259
+ loc: { start: token.loc.end, end: nextToken.loc.start },
260
+ messageId: "unexpectedAfter",
261
+ data: token,
262
+ fix(fixer) {
263
+ return fixer.removeRange([
264
+ token.range[1],
265
+ nextToken.range[0],
266
+ ]);
267
+ },
268
+ });
269
+ }
270
+ }
271
+
272
+ /**
273
+ * Parses the option object and determines check methods for each keyword.
274
+ * @param {Object|undefined} options The option object to parse.
275
+ * @returns {Object} - Normalized option object.
276
+ * Keys are keywords (there are for every keyword).
277
+ * Values are instances of `{"before": function, "after": function}`.
278
+ */
279
+ function parseOptions(options = {}) {
280
+ const before = options.before !== false;
281
+ const after = options.after !== false;
282
+ const defaultValue = {
283
+ before: before ? expectSpaceBefore : unexpectSpaceBefore,
284
+ after: after ? expectSpaceAfter : unexpectSpaceAfter,
285
+ };
286
+ const overrides = (options && options.overrides) || {};
287
+ const retv = Object.create(null);
288
+
289
+ for (let i = 0; i < KEYS.length; ++i) {
290
+ const key = KEYS[i];
291
+ const override = overrides[key];
292
+
293
+ if (override) {
294
+ const thisBefore =
295
+ "before" in override ? override.before : before;
296
+ const thisAfter =
297
+ "after" in override ? override.after : after;
298
+
299
+ retv[key] = {
300
+ before: thisBefore
301
+ ? expectSpaceBefore
302
+ : unexpectSpaceBefore,
303
+ after: thisAfter
304
+ ? expectSpaceAfter
305
+ : unexpectSpaceAfter,
306
+ };
307
+ } else {
308
+ retv[key] = defaultValue;
309
+ }
310
+ }
311
+
312
+ return retv;
313
+ }
314
+
315
+ const checkMethodMap = parseOptions(context.options[0]);
316
+
317
+ /**
318
+ * Reports a given token if usage of spacing followed by the token is
319
+ * invalid.
320
+ * @param {Token} token A token to report.
321
+ * @param {RegExp} [pattern] Optional. A pattern of the previous
322
+ * token to check.
323
+ * @returns {void}
324
+ */
325
+ function checkSpacingBefore(token, pattern) {
326
+ checkMethodMap[token.value].before(token, pattern || PREV_TOKEN);
327
+ }
328
+
329
+ /**
330
+ * Reports a given token if usage of spacing preceded by the token is
331
+ * invalid.
332
+ * @param {Token} token A token to report.
333
+ * @param {RegExp} [pattern] Optional. A pattern of the next
334
+ * token to check.
335
+ * @returns {void}
336
+ */
337
+ function checkSpacingAfter(token, pattern) {
338
+ checkMethodMap[token.value].after(token, pattern || NEXT_TOKEN);
339
+ }
340
+
341
+ /**
342
+ * Reports a given token if usage of spacing around the token is invalid.
343
+ * @param {Token} token A token to report.
344
+ * @returns {void}
345
+ */
346
+ function checkSpacingAround(token) {
347
+ checkSpacingBefore(token);
348
+ checkSpacingAfter(token);
349
+ }
350
+
351
+ /**
352
+ * Reports the first token of a given node if the first token is a keyword
353
+ * and usage of spacing around the token is invalid.
354
+ * @param {ASTNode|null} node A node to report.
355
+ * @returns {void}
356
+ */
357
+ function checkSpacingAroundFirstToken(node) {
358
+ const firstToken = node && sourceCode.getFirstToken(node);
359
+
360
+ if (firstToken && firstToken.type === "Keyword") {
361
+ checkSpacingAround(firstToken);
362
+ }
363
+ }
364
+
365
+ /**
366
+ * Reports the first token of a given node if the first token is a keyword
367
+ * and usage of spacing followed by the token is invalid.
368
+ *
369
+ * This is used for unary operators (e.g. `typeof`), `function`, and `super`.
370
+ * Other rules are handling usage of spacing preceded by those keywords.
371
+ * @param {ASTNode|null} node A node to report.
372
+ * @returns {void}
373
+ */
374
+ function checkSpacingBeforeFirstToken(node) {
375
+ const firstToken = node && sourceCode.getFirstToken(node);
376
+
377
+ if (firstToken && firstToken.type === "Keyword") {
378
+ checkSpacingBefore(firstToken);
379
+ }
380
+ }
381
+
382
+ /**
383
+ * Reports the previous token of a given node if the token is a keyword and
384
+ * usage of spacing around the token is invalid.
385
+ * @param {ASTNode|null} node A node to report.
386
+ * @returns {void}
387
+ */
388
+ function checkSpacingAroundTokenBefore(node) {
389
+ if (node) {
390
+ const token = sourceCode.getTokenBefore(
391
+ node,
392
+ astUtils.isKeywordToken,
393
+ );
394
+
395
+ checkSpacingAround(token);
396
+ }
397
+ }
398
+
399
+ /**
400
+ * Reports `async` or `function` keywords of a given node if usage of
401
+ * spacing around those keywords is invalid.
402
+ * @param {ASTNode} node A node to report.
403
+ * @returns {void}
404
+ */
405
+ function checkSpacingForFunction(node) {
406
+ const firstToken = node && sourceCode.getFirstToken(node);
407
+
408
+ if (
409
+ firstToken &&
410
+ ((firstToken.type === "Keyword" &&
411
+ firstToken.value === "function") ||
412
+ firstToken.value === "async")
413
+ ) {
414
+ checkSpacingBefore(firstToken);
415
+ }
416
+ }
417
+
418
+ /**
419
+ * Reports `class` and `extends` keywords of a given node if usage of
420
+ * spacing around those keywords is invalid.
421
+ * @param {ASTNode} node A node to report.
422
+ * @returns {void}
423
+ */
424
+ function checkSpacingForClass(node) {
425
+ checkSpacingAroundFirstToken(node);
426
+ checkSpacingAroundTokenBefore(node.superClass);
427
+ }
428
+
429
+ /**
430
+ * Reports `if` and `else` keywords of a given node if usage of spacing
431
+ * around those keywords is invalid.
432
+ * @param {ASTNode} node A node to report.
433
+ * @returns {void}
434
+ */
435
+ function checkSpacingForIfStatement(node) {
436
+ checkSpacingAroundFirstToken(node);
437
+ checkSpacingAroundTokenBefore(node.alternate);
438
+ }
439
+
440
+ /**
441
+ * Reports `try`, `catch`, and `finally` keywords of a given node if usage
442
+ * of spacing around those keywords is invalid.
443
+ * @param {ASTNode} node A node to report.
444
+ * @returns {void}
445
+ */
446
+ function checkSpacingForTryStatement(node) {
447
+ checkSpacingAroundFirstToken(node);
448
+ checkSpacingAroundFirstToken(node.handler);
449
+ checkSpacingAroundTokenBefore(node.finalizer);
450
+ }
451
+
452
+ /**
453
+ * Reports `do` and `while` keywords of a given node if usage of spacing
454
+ * around those keywords is invalid.
455
+ * @param {ASTNode} node A node to report.
456
+ * @returns {void}
457
+ */
458
+ function checkSpacingForDoWhileStatement(node) {
459
+ checkSpacingAroundFirstToken(node);
460
+ checkSpacingAroundTokenBefore(node.test);
461
+ }
462
+
463
+ /**
464
+ * Reports `for` and `in` keywords of a given node if usage of spacing
465
+ * around those keywords is invalid.
466
+ * @param {ASTNode} node A node to report.
467
+ * @returns {void}
468
+ */
469
+ function checkSpacingForForInStatement(node) {
470
+ checkSpacingAroundFirstToken(node);
471
+
472
+ const inToken = sourceCode.getTokenBefore(
473
+ node.right,
474
+ astUtils.isNotOpeningParenToken,
475
+ );
476
+ const previousToken = sourceCode.getTokenBefore(inToken);
477
+
478
+ if (previousToken.type !== "PrivateIdentifier") {
479
+ checkSpacingBefore(inToken);
480
+ }
481
+
482
+ checkSpacingAfter(inToken);
483
+ }
484
+
485
+ /**
486
+ * Reports `for` and `of` keywords of a given node if usage of spacing
487
+ * around those keywords is invalid.
488
+ * @param {ASTNode} node A node to report.
489
+ * @returns {void}
490
+ */
491
+ function checkSpacingForForOfStatement(node) {
492
+ if (node.await) {
493
+ checkSpacingBefore(sourceCode.getFirstToken(node, 0));
494
+ checkSpacingAfter(sourceCode.getFirstToken(node, 1));
495
+ } else {
496
+ checkSpacingAroundFirstToken(node);
497
+ }
498
+
499
+ const ofToken = sourceCode.getTokenBefore(
500
+ node.right,
501
+ astUtils.isNotOpeningParenToken,
502
+ );
503
+ const previousToken = sourceCode.getTokenBefore(ofToken);
504
+
505
+ if (previousToken.type !== "PrivateIdentifier") {
506
+ checkSpacingBefore(ofToken);
507
+ }
508
+
509
+ checkSpacingAfter(ofToken);
510
+ }
511
+
512
+ /**
513
+ * Reports `import`, `export`, `as`, and `from` keywords of a given node if
514
+ * usage of spacing around those keywords is invalid.
515
+ *
516
+ * This rule handles the `*` token in module declarations.
517
+ *
518
+ * import*as A from "./a"; /*error Expected space(s) after "import".
519
+ * error Expected space(s) before "as".
520
+ * @param {ASTNode} node A node to report.
521
+ * @returns {void}
522
+ */
523
+ function checkSpacingForModuleDeclaration(node) {
524
+ const firstToken = sourceCode.getFirstToken(node);
525
+
526
+ checkSpacingBefore(firstToken, PREV_TOKEN_M);
527
+ checkSpacingAfter(firstToken, NEXT_TOKEN_M);
528
+
529
+ if (node.type === "ExportDefaultDeclaration") {
530
+ checkSpacingAround(sourceCode.getTokenAfter(firstToken));
531
+ }
532
+
533
+ if (node.type === "ExportAllDeclaration" && node.exported) {
534
+ const asToken = sourceCode.getTokenBefore(node.exported);
535
+
536
+ checkSpacingBefore(asToken, PREV_TOKEN_M);
537
+ checkSpacingAfter(asToken, NEXT_TOKEN_M);
538
+ }
539
+
540
+ if (node.source) {
541
+ const fromToken = sourceCode.getTokenBefore(node.source);
542
+
543
+ checkSpacingBefore(fromToken, PREV_TOKEN_M);
544
+ checkSpacingAfter(fromToken, NEXT_TOKEN_M);
545
+ }
546
+ }
547
+
548
+ /**
549
+ * Reports `as` keyword of a given node if usage of spacing around this
550
+ * keyword is invalid.
551
+ * @param {ASTNode} node An `ImportSpecifier` node to check.
552
+ * @returns {void}
553
+ */
554
+ function checkSpacingForImportSpecifier(node) {
555
+ if (node.imported.range[0] !== node.local.range[0]) {
556
+ const asToken = sourceCode.getTokenBefore(node.local);
557
+
558
+ checkSpacingBefore(asToken, PREV_TOKEN_M);
559
+ }
560
+ }
561
+
562
+ /**
563
+ * Reports `as` keyword of a given node if usage of spacing around this
564
+ * keyword is invalid.
565
+ * @param {ASTNode} node An `ExportSpecifier` node to check.
566
+ * @returns {void}
567
+ */
568
+ function checkSpacingForExportSpecifier(node) {
569
+ if (node.local.range[0] !== node.exported.range[0]) {
570
+ const asToken = sourceCode.getTokenBefore(node.exported);
571
+
572
+ checkSpacingBefore(asToken, PREV_TOKEN_M);
573
+ checkSpacingAfter(asToken, NEXT_TOKEN_M);
574
+ }
575
+ }
576
+
577
+ /**
578
+ * Reports `as` keyword of a given node if usage of spacing around this
579
+ * keyword is invalid.
580
+ * @param {ASTNode} node A node to report.
581
+ * @returns {void}
582
+ */
583
+ function checkSpacingForImportNamespaceSpecifier(node) {
584
+ const asToken = sourceCode.getFirstToken(node, 1);
585
+
586
+ checkSpacingBefore(asToken, PREV_TOKEN_M);
587
+ }
588
+
589
+ /**
590
+ * Reports `static`, `get`, and `set` keywords of a given node if usage of
591
+ * spacing around those keywords is invalid.
592
+ * @param {ASTNode} node A node to report.
593
+ * @throws {Error} If unable to find token get, set, or async beside method name.
594
+ * @returns {void}
595
+ */
596
+ function checkSpacingForProperty(node) {
597
+ if (node.static) {
598
+ checkSpacingAroundFirstToken(node);
599
+ }
600
+ if (
601
+ node.kind === "get" ||
602
+ node.kind === "set" ||
603
+ ((node.method || node.type === "MethodDefinition") &&
604
+ node.value.async)
605
+ ) {
606
+ const token = sourceCode.getTokenBefore(node.key, tok => {
607
+ switch (tok.value) {
608
+ case "get":
609
+ case "set":
610
+ case "async":
611
+ return true;
612
+ default:
613
+ return false;
614
+ }
615
+ });
616
+
617
+ if (!token) {
618
+ throw new Error(
619
+ "Failed to find token get, set, or async beside method name",
620
+ );
621
+ }
622
+
623
+ checkSpacingAround(token);
624
+ }
625
+ }
626
+
627
+ /**
628
+ * Reports `await` keyword of a given node if usage of spacing before
629
+ * this keyword is invalid.
630
+ * @param {ASTNode} node A node to report.
631
+ * @returns {void}
632
+ */
633
+ function checkSpacingForAwaitExpression(node) {
634
+ checkSpacingBefore(sourceCode.getFirstToken(node));
635
+ }
636
+
637
+ return {
638
+ // Statements
639
+ DebuggerStatement: checkSpacingAroundFirstToken,
640
+ WithStatement: checkSpacingAroundFirstToken,
641
+
642
+ // Statements - Control flow
643
+ BreakStatement: checkSpacingAroundFirstToken,
644
+ ContinueStatement: checkSpacingAroundFirstToken,
645
+ ReturnStatement: checkSpacingAroundFirstToken,
646
+ ThrowStatement: checkSpacingAroundFirstToken,
647
+ TryStatement: checkSpacingForTryStatement,
648
+
649
+ // Statements - Choice
650
+ IfStatement: checkSpacingForIfStatement,
651
+ SwitchStatement: checkSpacingAroundFirstToken,
652
+ SwitchCase: checkSpacingAroundFirstToken,
653
+
654
+ // Statements - Loops
655
+ DoWhileStatement: checkSpacingForDoWhileStatement,
656
+ ForInStatement: checkSpacingForForInStatement,
657
+ ForOfStatement: checkSpacingForForOfStatement,
658
+ ForStatement: checkSpacingAroundFirstToken,
659
+ WhileStatement: checkSpacingAroundFirstToken,
660
+
661
+ // Statements - Declarations
662
+ ClassDeclaration: checkSpacingForClass,
663
+ ExportNamedDeclaration: checkSpacingForModuleDeclaration,
664
+ ExportDefaultDeclaration: checkSpacingForModuleDeclaration,
665
+ ExportAllDeclaration: checkSpacingForModuleDeclaration,
666
+ FunctionDeclaration: checkSpacingForFunction,
667
+ ImportDeclaration: checkSpacingForModuleDeclaration,
668
+ VariableDeclaration: checkSpacingAroundFirstToken,
669
+
670
+ // Expressions
671
+ ArrowFunctionExpression: checkSpacingForFunction,
672
+ AwaitExpression: checkSpacingForAwaitExpression,
673
+ ClassExpression: checkSpacingForClass,
674
+ FunctionExpression: checkSpacingForFunction,
675
+ NewExpression: checkSpacingBeforeFirstToken,
676
+ Super: checkSpacingBeforeFirstToken,
677
+ ThisExpression: checkSpacingBeforeFirstToken,
678
+ UnaryExpression: checkSpacingBeforeFirstToken,
679
+ YieldExpression: checkSpacingBeforeFirstToken,
680
+
681
+ // Others
682
+ ImportSpecifier: checkSpacingForImportSpecifier,
683
+ ExportSpecifier: checkSpacingForExportSpecifier,
684
+ ImportNamespaceSpecifier: checkSpacingForImportNamespaceSpecifier,
685
+ MethodDefinition: checkSpacingForProperty,
686
+ PropertyDefinition: checkSpacingForProperty,
687
+ StaticBlock: checkSpacingAroundFirstToken,
688
+ Property: checkSpacingForProperty,
689
+
690
+ // To avoid conflicts with `space-infix-ops`, e.g. `a > this.b`
691
+ "BinaryExpression[operator='>']"(node) {
692
+ const operatorToken = sourceCode.getTokenBefore(
693
+ node.right,
694
+ astUtils.isNotOpeningParenToken,
695
+ );
696
+
697
+ tokensToIgnore.add(operatorToken);
698
+ },
699
+ };
700
+ },
701
+ };