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,581 @@
1
+ /**
2
+ * @fileoverview Enforces empty lines around comments.
3
+ * @author Jamund Ferguson
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Return an array with any line numbers that are empty.
20
+ * @param {Array} lines An array of each line of the file.
21
+ * @returns {Array} An array of line numbers.
22
+ */
23
+ function getEmptyLineNums(lines) {
24
+ const emptyLines = lines
25
+ .map((line, i) => ({
26
+ code: line.trim(),
27
+ num: i + 1,
28
+ }))
29
+ .filter(line => !line.code)
30
+ .map(line => line.num);
31
+
32
+ return emptyLines;
33
+ }
34
+
35
+ /**
36
+ * Return an array with any line numbers that contain comments.
37
+ * @param {Array} comments An array of comment tokens.
38
+ * @returns {Array} An array of line numbers.
39
+ */
40
+ function getCommentLineNums(comments) {
41
+ const lines = [];
42
+
43
+ comments.forEach(token => {
44
+ const start = token.loc.start.line;
45
+ const end = token.loc.end.line;
46
+
47
+ lines.push(start, end);
48
+ });
49
+ return lines;
50
+ }
51
+
52
+ //------------------------------------------------------------------------------
53
+ // Rule Definition
54
+ //------------------------------------------------------------------------------
55
+
56
+ /** @type {import('../types').Rule.RuleModule} */
57
+ module.exports = {
58
+ meta: {
59
+ deprecated: {
60
+ message: "Formatting rules are being moved out of ESLint core.",
61
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
62
+ deprecatedSince: "8.53.0",
63
+ availableUntil: "11.0.0",
64
+ replacedBy: [
65
+ {
66
+ message:
67
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
68
+ url: "https://eslint.style/guide/migration",
69
+ plugin: {
70
+ name: "@stylistic/eslint-plugin",
71
+ url: "https://eslint.style",
72
+ },
73
+ rule: {
74
+ name: "lines-around-comment",
75
+ url: "https://eslint.style/rules/lines-around-comment",
76
+ },
77
+ },
78
+ ],
79
+ },
80
+ type: "layout",
81
+
82
+ docs: {
83
+ description: "Require empty lines around comments",
84
+ recommended: false,
85
+ url: "https://eslint.org/docs/latest/rules/lines-around-comment",
86
+ },
87
+
88
+ fixable: "whitespace",
89
+
90
+ schema: [
91
+ {
92
+ type: "object",
93
+ properties: {
94
+ beforeBlockComment: {
95
+ type: "boolean",
96
+ default: true,
97
+ },
98
+ afterBlockComment: {
99
+ type: "boolean",
100
+ default: false,
101
+ },
102
+ beforeLineComment: {
103
+ type: "boolean",
104
+ default: false,
105
+ },
106
+ afterLineComment: {
107
+ type: "boolean",
108
+ default: false,
109
+ },
110
+ allowBlockStart: {
111
+ type: "boolean",
112
+ default: false,
113
+ },
114
+ allowBlockEnd: {
115
+ type: "boolean",
116
+ default: false,
117
+ },
118
+ allowClassStart: {
119
+ type: "boolean",
120
+ },
121
+ allowClassEnd: {
122
+ type: "boolean",
123
+ },
124
+ allowObjectStart: {
125
+ type: "boolean",
126
+ },
127
+ allowObjectEnd: {
128
+ type: "boolean",
129
+ },
130
+ allowArrayStart: {
131
+ type: "boolean",
132
+ },
133
+ allowArrayEnd: {
134
+ type: "boolean",
135
+ },
136
+ ignorePattern: {
137
+ type: "string",
138
+ },
139
+ applyDefaultIgnorePatterns: {
140
+ type: "boolean",
141
+ },
142
+ afterHashbangComment: {
143
+ type: "boolean",
144
+ default: false,
145
+ },
146
+ },
147
+ additionalProperties: false,
148
+ },
149
+ ],
150
+ messages: {
151
+ after: "Expected line after comment.",
152
+ before: "Expected line before comment.",
153
+ },
154
+ },
155
+
156
+ create(context) {
157
+ const options = Object.assign({}, context.options[0]);
158
+ const ignorePattern = options.ignorePattern;
159
+ const defaultIgnoreRegExp = astUtils.COMMENTS_IGNORE_PATTERN;
160
+ const customIgnoreRegExp = new RegExp(ignorePattern, "u");
161
+ const applyDefaultIgnorePatterns =
162
+ options.applyDefaultIgnorePatterns !== false;
163
+
164
+ options.beforeBlockComment =
165
+ typeof options.beforeBlockComment !== "undefined"
166
+ ? options.beforeBlockComment
167
+ : true;
168
+
169
+ const sourceCode = context.sourceCode;
170
+
171
+ const lines = sourceCode.lines,
172
+ numLines = lines.length + 1,
173
+ comments = sourceCode.getAllComments(),
174
+ commentLines = getCommentLineNums(comments),
175
+ emptyLines = getEmptyLineNums(lines),
176
+ commentAndEmptyLines = new Set(commentLines.concat(emptyLines));
177
+
178
+ /**
179
+ * Returns whether or not comments are on lines starting with or ending with code
180
+ * @param {token} token The comment token to check.
181
+ * @returns {boolean} True if the comment is not alone.
182
+ */
183
+ function codeAroundComment(token) {
184
+ let currentToken = token;
185
+
186
+ do {
187
+ currentToken = sourceCode.getTokenBefore(currentToken, {
188
+ includeComments: true,
189
+ });
190
+ } while (currentToken && astUtils.isCommentToken(currentToken));
191
+
192
+ if (
193
+ currentToken &&
194
+ astUtils.isTokenOnSameLine(currentToken, token)
195
+ ) {
196
+ return true;
197
+ }
198
+
199
+ currentToken = token;
200
+ do {
201
+ currentToken = sourceCode.getTokenAfter(currentToken, {
202
+ includeComments: true,
203
+ });
204
+ } while (currentToken && astUtils.isCommentToken(currentToken));
205
+
206
+ if (
207
+ currentToken &&
208
+ astUtils.isTokenOnSameLine(token, currentToken)
209
+ ) {
210
+ return true;
211
+ }
212
+
213
+ return false;
214
+ }
215
+
216
+ /**
217
+ * Returns whether or not comments are inside a node type or not.
218
+ * @param {ASTNode} parent The Comment parent node.
219
+ * @param {string} nodeType The parent type to check against.
220
+ * @returns {boolean} True if the comment is inside nodeType.
221
+ */
222
+ function isParentNodeType(parent, nodeType) {
223
+ return (
224
+ parent.type === nodeType ||
225
+ (parent.body && parent.body.type === nodeType) ||
226
+ (parent.consequent && parent.consequent.type === nodeType)
227
+ );
228
+ }
229
+
230
+ /**
231
+ * Returns the parent node that contains the given token.
232
+ * @param {token} token The token to check.
233
+ * @returns {ASTNode|null} The parent node that contains the given token.
234
+ */
235
+ function getParentNodeOfToken(token) {
236
+ const node = sourceCode.getNodeByRangeIndex(token.range[0]);
237
+
238
+ /*
239
+ * For the purpose of this rule, the comment token is in a `StaticBlock` node only
240
+ * if it's inside the braces of that `StaticBlock` node.
241
+ *
242
+ * Example where this function returns `null`:
243
+ *
244
+ * static
245
+ * // comment
246
+ * {
247
+ * }
248
+ *
249
+ * Example where this function returns `StaticBlock` node:
250
+ *
251
+ * static
252
+ * {
253
+ * // comment
254
+ * }
255
+ *
256
+ */
257
+ if (node && node.type === "StaticBlock") {
258
+ const openingBrace = sourceCode.getFirstToken(node, {
259
+ skip: 1,
260
+ }); // skip the `static` token
261
+
262
+ return token.range[0] >= openingBrace.range[0] ? node : null;
263
+ }
264
+
265
+ return node;
266
+ }
267
+
268
+ /**
269
+ * Returns whether or not comments are at the parent start or not.
270
+ * @param {token} token The Comment token.
271
+ * @param {string} nodeType The parent type to check against.
272
+ * @returns {boolean} True if the comment is at parent start.
273
+ */
274
+ function isCommentAtParentStart(token, nodeType) {
275
+ const parent = getParentNodeOfToken(token);
276
+
277
+ if (parent && isParentNodeType(parent, nodeType)) {
278
+ let parentStartNodeOrToken = parent;
279
+
280
+ if (parent.type === "StaticBlock") {
281
+ parentStartNodeOrToken = sourceCode.getFirstToken(parent, {
282
+ skip: 1,
283
+ }); // opening brace of the static block
284
+ } else if (parent.type === "SwitchStatement") {
285
+ parentStartNodeOrToken = sourceCode.getTokenAfter(
286
+ parent.discriminant,
287
+ {
288
+ filter: astUtils.isOpeningBraceToken,
289
+ },
290
+ ); // opening brace of the switch statement
291
+ }
292
+
293
+ return (
294
+ token.loc.start.line -
295
+ parentStartNodeOrToken.loc.start.line ===
296
+ 1
297
+ );
298
+ }
299
+
300
+ return false;
301
+ }
302
+
303
+ /**
304
+ * Returns whether or not comments are at the parent end or not.
305
+ * @param {token} token The Comment token.
306
+ * @param {string} nodeType The parent type to check against.
307
+ * @returns {boolean} True if the comment is at parent end.
308
+ */
309
+ function isCommentAtParentEnd(token, nodeType) {
310
+ const parent = getParentNodeOfToken(token);
311
+
312
+ return (
313
+ !!parent &&
314
+ isParentNodeType(parent, nodeType) &&
315
+ parent.loc.end.line - token.loc.end.line === 1
316
+ );
317
+ }
318
+
319
+ /**
320
+ * Returns whether or not comments are at the block start or not.
321
+ * @param {token} token The Comment token.
322
+ * @returns {boolean} True if the comment is at block start.
323
+ */
324
+ function isCommentAtBlockStart(token) {
325
+ return (
326
+ isCommentAtParentStart(token, "ClassBody") ||
327
+ isCommentAtParentStart(token, "BlockStatement") ||
328
+ isCommentAtParentStart(token, "StaticBlock") ||
329
+ isCommentAtParentStart(token, "SwitchCase") ||
330
+ isCommentAtParentStart(token, "SwitchStatement")
331
+ );
332
+ }
333
+
334
+ /**
335
+ * Returns whether or not comments are at the block end or not.
336
+ * @param {token} token The Comment token.
337
+ * @returns {boolean} True if the comment is at block end.
338
+ */
339
+ function isCommentAtBlockEnd(token) {
340
+ return (
341
+ isCommentAtParentEnd(token, "ClassBody") ||
342
+ isCommentAtParentEnd(token, "BlockStatement") ||
343
+ isCommentAtParentEnd(token, "StaticBlock") ||
344
+ isCommentAtParentEnd(token, "SwitchCase") ||
345
+ isCommentAtParentEnd(token, "SwitchStatement")
346
+ );
347
+ }
348
+
349
+ /**
350
+ * Returns whether or not comments are at the class start or not.
351
+ * @param {token} token The Comment token.
352
+ * @returns {boolean} True if the comment is at class start.
353
+ */
354
+ function isCommentAtClassStart(token) {
355
+ return isCommentAtParentStart(token, "ClassBody");
356
+ }
357
+
358
+ /**
359
+ * Returns whether or not comments are at the class end or not.
360
+ * @param {token} token The Comment token.
361
+ * @returns {boolean} True if the comment is at class end.
362
+ */
363
+ function isCommentAtClassEnd(token) {
364
+ return isCommentAtParentEnd(token, "ClassBody");
365
+ }
366
+
367
+ /**
368
+ * Returns whether or not comments are at the object start or not.
369
+ * @param {token} token The Comment token.
370
+ * @returns {boolean} True if the comment is at object start.
371
+ */
372
+ function isCommentAtObjectStart(token) {
373
+ return (
374
+ isCommentAtParentStart(token, "ObjectExpression") ||
375
+ isCommentAtParentStart(token, "ObjectPattern")
376
+ );
377
+ }
378
+
379
+ /**
380
+ * Returns whether or not comments are at the object end or not.
381
+ * @param {token} token The Comment token.
382
+ * @returns {boolean} True if the comment is at object end.
383
+ */
384
+ function isCommentAtObjectEnd(token) {
385
+ return (
386
+ isCommentAtParentEnd(token, "ObjectExpression") ||
387
+ isCommentAtParentEnd(token, "ObjectPattern")
388
+ );
389
+ }
390
+
391
+ /**
392
+ * Returns whether or not comments are at the array start or not.
393
+ * @param {token} token The Comment token.
394
+ * @returns {boolean} True if the comment is at array start.
395
+ */
396
+ function isCommentAtArrayStart(token) {
397
+ return (
398
+ isCommentAtParentStart(token, "ArrayExpression") ||
399
+ isCommentAtParentStart(token, "ArrayPattern")
400
+ );
401
+ }
402
+
403
+ /**
404
+ * Returns whether or not comments are at the array end or not.
405
+ * @param {token} token The Comment token.
406
+ * @returns {boolean} True if the comment is at array end.
407
+ */
408
+ function isCommentAtArrayEnd(token) {
409
+ return (
410
+ isCommentAtParentEnd(token, "ArrayExpression") ||
411
+ isCommentAtParentEnd(token, "ArrayPattern")
412
+ );
413
+ }
414
+
415
+ /**
416
+ * Checks if a comment token has lines around it (ignores inline comments)
417
+ * @param {token} token The Comment token.
418
+ * @param {Object} opts Options to determine the newline.
419
+ * @param {boolean} opts.after Should have a newline after this line.
420
+ * @param {boolean} opts.before Should have a newline before this line.
421
+ * @returns {void}
422
+ */
423
+ function checkForEmptyLine(token, opts) {
424
+ if (
425
+ applyDefaultIgnorePatterns &&
426
+ defaultIgnoreRegExp.test(token.value)
427
+ ) {
428
+ return;
429
+ }
430
+
431
+ if (ignorePattern && customIgnoreRegExp.test(token.value)) {
432
+ return;
433
+ }
434
+
435
+ let after = opts.after,
436
+ before = opts.before;
437
+
438
+ const prevLineNum = token.loc.start.line - 1,
439
+ nextLineNum = token.loc.end.line + 1,
440
+ commentIsNotAlone = codeAroundComment(token);
441
+
442
+ const blockStartAllowed =
443
+ options.allowBlockStart &&
444
+ isCommentAtBlockStart(token) &&
445
+ !(
446
+ options.allowClassStart === false &&
447
+ isCommentAtClassStart(token)
448
+ ),
449
+ blockEndAllowed =
450
+ options.allowBlockEnd &&
451
+ isCommentAtBlockEnd(token) &&
452
+ !(
453
+ options.allowClassEnd === false &&
454
+ isCommentAtClassEnd(token)
455
+ ),
456
+ classStartAllowed =
457
+ options.allowClassStart && isCommentAtClassStart(token),
458
+ classEndAllowed =
459
+ options.allowClassEnd && isCommentAtClassEnd(token),
460
+ objectStartAllowed =
461
+ options.allowObjectStart && isCommentAtObjectStart(token),
462
+ objectEndAllowed =
463
+ options.allowObjectEnd && isCommentAtObjectEnd(token),
464
+ arrayStartAllowed =
465
+ options.allowArrayStart && isCommentAtArrayStart(token),
466
+ arrayEndAllowed =
467
+ options.allowArrayEnd && isCommentAtArrayEnd(token);
468
+
469
+ const exceptionStartAllowed =
470
+ blockStartAllowed ||
471
+ classStartAllowed ||
472
+ objectStartAllowed ||
473
+ arrayStartAllowed;
474
+ const exceptionEndAllowed =
475
+ blockEndAllowed ||
476
+ classEndAllowed ||
477
+ objectEndAllowed ||
478
+ arrayEndAllowed;
479
+
480
+ // ignore top of the file and bottom of the file
481
+ if (prevLineNum < 1) {
482
+ before = false;
483
+ }
484
+ if (nextLineNum >= numLines) {
485
+ after = false;
486
+ }
487
+
488
+ // we ignore all inline comments
489
+ if (commentIsNotAlone) {
490
+ return;
491
+ }
492
+
493
+ const previousTokenOrComment = sourceCode.getTokenBefore(token, {
494
+ includeComments: true,
495
+ });
496
+ const nextTokenOrComment = sourceCode.getTokenAfter(token, {
497
+ includeComments: true,
498
+ });
499
+
500
+ // check for newline before
501
+ if (
502
+ !exceptionStartAllowed &&
503
+ before &&
504
+ !commentAndEmptyLines.has(prevLineNum) &&
505
+ !(
506
+ astUtils.isCommentToken(previousTokenOrComment) &&
507
+ astUtils.isTokenOnSameLine(previousTokenOrComment, token)
508
+ )
509
+ ) {
510
+ const lineStart = token.range[0] - token.loc.start.column;
511
+ const range = [lineStart, lineStart];
512
+
513
+ context.report({
514
+ node: token,
515
+ messageId: "before",
516
+ fix(fixer) {
517
+ return fixer.insertTextBeforeRange(range, "\n");
518
+ },
519
+ });
520
+ }
521
+
522
+ // check for newline after
523
+ if (
524
+ !exceptionEndAllowed &&
525
+ after &&
526
+ !commentAndEmptyLines.has(nextLineNum) &&
527
+ !(
528
+ astUtils.isCommentToken(nextTokenOrComment) &&
529
+ astUtils.isTokenOnSameLine(token, nextTokenOrComment)
530
+ )
531
+ ) {
532
+ context.report({
533
+ node: token,
534
+ messageId: "after",
535
+ fix(fixer) {
536
+ return fixer.insertTextAfter(token, "\n");
537
+ },
538
+ });
539
+ }
540
+ }
541
+
542
+ //--------------------------------------------------------------------------
543
+ // Public
544
+ //--------------------------------------------------------------------------
545
+
546
+ return {
547
+ Program() {
548
+ comments.forEach(token => {
549
+ if (token.type === "Line") {
550
+ if (
551
+ options.beforeLineComment ||
552
+ options.afterLineComment
553
+ ) {
554
+ checkForEmptyLine(token, {
555
+ after: options.afterLineComment,
556
+ before: options.beforeLineComment,
557
+ });
558
+ }
559
+ } else if (token.type === "Block") {
560
+ if (
561
+ options.beforeBlockComment ||
562
+ options.afterBlockComment
563
+ ) {
564
+ checkForEmptyLine(token, {
565
+ after: options.afterBlockComment,
566
+ before: options.beforeBlockComment,
567
+ });
568
+ }
569
+ } else if (token.type === "Shebang") {
570
+ if (options.afterHashbangComment) {
571
+ checkForEmptyLine(token, {
572
+ after: options.afterHashbangComment,
573
+ before: false,
574
+ });
575
+ }
576
+ }
577
+ });
578
+ },
579
+ };
580
+ },
581
+ };