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,167 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of unnecessary semicolons
3
+ * @author Nicholas C. Zakas
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const FixTracker = require("./utils/fix-tracker");
14
+ const astUtils = require("./utils/ast-utils");
15
+
16
+ //------------------------------------------------------------------------------
17
+ // Rule Definition
18
+ //------------------------------------------------------------------------------
19
+
20
+ /** @type {import('../types').Rule.RuleModule} */
21
+ module.exports = {
22
+ meta: {
23
+ deprecated: {
24
+ message: "Formatting rules are being moved out of ESLint core.",
25
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
26
+ deprecatedSince: "8.53.0",
27
+ availableUntil: "11.0.0",
28
+ replacedBy: [
29
+ {
30
+ message:
31
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
32
+ url: "https://eslint.style/guide/migration",
33
+ plugin: {
34
+ name: "@stylistic/eslint-plugin",
35
+ url: "https://eslint.style",
36
+ },
37
+ rule: {
38
+ name: "no-extra-semi",
39
+ url: "https://eslint.style/rules/no-extra-semi",
40
+ },
41
+ },
42
+ ],
43
+ },
44
+ type: "suggestion",
45
+
46
+ docs: {
47
+ description: "Disallow unnecessary semicolons",
48
+ recommended: false,
49
+ url: "https://eslint.org/docs/latest/rules/no-extra-semi",
50
+ },
51
+
52
+ fixable: "code",
53
+ schema: [],
54
+
55
+ messages: {
56
+ unexpected: "Unnecessary semicolon.",
57
+ },
58
+ },
59
+
60
+ create(context) {
61
+ const sourceCode = context.sourceCode;
62
+
63
+ /**
64
+ * Checks if a node or token is fixable.
65
+ * A node is fixable if it can be removed without turning a subsequent statement into a directive after fixing other nodes.
66
+ * @param {Token} nodeOrToken The node or token to check.
67
+ * @returns {boolean} Whether or not the node is fixable.
68
+ */
69
+ function isFixable(nodeOrToken) {
70
+ const nextToken = sourceCode.getTokenAfter(nodeOrToken);
71
+
72
+ if (!nextToken || nextToken.type !== "String") {
73
+ return true;
74
+ }
75
+ const stringNode = sourceCode.getNodeByRangeIndex(
76
+ nextToken.range[0],
77
+ );
78
+
79
+ return !astUtils.isTopLevelExpressionStatement(stringNode.parent);
80
+ }
81
+
82
+ /**
83
+ * Reports an unnecessary semicolon error.
84
+ * @param {Node|Token} nodeOrToken A node or a token to be reported.
85
+ * @returns {void}
86
+ */
87
+ function report(nodeOrToken) {
88
+ context.report({
89
+ node: nodeOrToken,
90
+ messageId: "unexpected",
91
+ fix: isFixable(nodeOrToken)
92
+ ? fixer =>
93
+ /*
94
+ * Expand the replacement range to include the surrounding
95
+ * tokens to avoid conflicting with semi.
96
+ * https://github.com/eslint/eslint/issues/7928
97
+ */
98
+ new FixTracker(fixer, context.sourceCode)
99
+ .retainSurroundingTokens(nodeOrToken)
100
+ .remove(nodeOrToken)
101
+ : null,
102
+ });
103
+ }
104
+
105
+ /**
106
+ * Checks for a part of a class body.
107
+ * This checks tokens from a specified token to a next MethodDefinition or the end of class body.
108
+ * @param {Token} firstToken The first token to check.
109
+ * @returns {void}
110
+ */
111
+ function checkForPartOfClassBody(firstToken) {
112
+ for (
113
+ let token = firstToken;
114
+ token.type === "Punctuator" &&
115
+ !astUtils.isClosingBraceToken(token);
116
+ token = sourceCode.getTokenAfter(token)
117
+ ) {
118
+ if (astUtils.isSemicolonToken(token)) {
119
+ report(token);
120
+ }
121
+ }
122
+ }
123
+
124
+ return {
125
+ /**
126
+ * Reports this empty statement, except if the parent node is a loop.
127
+ * @param {Node} node A EmptyStatement node to be reported.
128
+ * @returns {void}
129
+ */
130
+ EmptyStatement(node) {
131
+ const parent = node.parent,
132
+ allowedParentTypes = [
133
+ "ForStatement",
134
+ "ForInStatement",
135
+ "ForOfStatement",
136
+ "WhileStatement",
137
+ "DoWhileStatement",
138
+ "IfStatement",
139
+ "LabeledStatement",
140
+ "WithStatement",
141
+ ];
142
+
143
+ if (!allowedParentTypes.includes(parent.type)) {
144
+ report(node);
145
+ }
146
+ },
147
+
148
+ /**
149
+ * Checks tokens from the head of this class body to the first MethodDefinition or the end of this class body.
150
+ * @param {Node} node A ClassBody node to check.
151
+ * @returns {void}
152
+ */
153
+ ClassBody(node) {
154
+ checkForPartOfClassBody(sourceCode.getFirstToken(node, 1)); // 0 is `{`.
155
+ },
156
+
157
+ /**
158
+ * Checks tokens from this MethodDefinition to the next MethodDefinition or the end of this class body.
159
+ * @param {Node} node A MethodDefinition node of the start point.
160
+ * @returns {void}
161
+ */
162
+ "MethodDefinition, PropertyDefinition, StaticBlock"(node) {
163
+ checkForPartOfClassBody(sourceCode.getTokenAfter(node));
164
+ },
165
+ };
166
+ },
167
+ };
@@ -0,0 +1,260 @@
1
+ /**
2
+ * @fileoverview Rule to flag fall-through cases in switch statements.
3
+ * @author Matt DuVall <http://mattduvall.com/>
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ const { directivesPattern } = require("../shared/directives");
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Helpers
15
+ //------------------------------------------------------------------------------
16
+
17
+ const DEFAULT_FALLTHROUGH_COMMENT = /falls?\s?through/iu;
18
+
19
+ /**
20
+ * Checks all segments in a set and returns true if any are reachable.
21
+ * @param {Set<CodePathSegment>} segments The segments to check.
22
+ * @returns {boolean} True if any segment is reachable; false otherwise.
23
+ */
24
+ function isAnySegmentReachable(segments) {
25
+ for (const segment of segments) {
26
+ if (segment.reachable) {
27
+ return true;
28
+ }
29
+ }
30
+
31
+ return false;
32
+ }
33
+
34
+ /**
35
+ * Checks whether or not a given comment string is really a fallthrough comment and not an ESLint directive.
36
+ * @param {string} comment The comment string to check.
37
+ * @param {RegExp} fallthroughCommentPattern The regular expression used for checking for fallthrough comments.
38
+ * @returns {boolean} `true` if the comment string is truly a fallthrough comment.
39
+ */
40
+ function isFallThroughComment(comment, fallthroughCommentPattern) {
41
+ return (
42
+ fallthroughCommentPattern.test(comment) &&
43
+ !directivesPattern.test(comment.trim())
44
+ );
45
+ }
46
+
47
+ /**
48
+ * Checks whether or not a given case has a fallthrough comment.
49
+ * @param {ASTNode} caseWhichFallsThrough SwitchCase node which falls through.
50
+ * @param {ASTNode} subsequentCase The case after caseWhichFallsThrough.
51
+ * @param {RuleContext} context A rule context which stores comments.
52
+ * @param {RegExp} fallthroughCommentPattern A pattern to match comment to.
53
+ * @returns {null | object} the comment if the case has a valid fallthrough comment, otherwise null
54
+ */
55
+ function getFallthroughComment(
56
+ caseWhichFallsThrough,
57
+ subsequentCase,
58
+ context,
59
+ fallthroughCommentPattern,
60
+ ) {
61
+ const sourceCode = context.sourceCode;
62
+
63
+ if (
64
+ caseWhichFallsThrough.consequent.length === 1 &&
65
+ caseWhichFallsThrough.consequent[0].type === "BlockStatement"
66
+ ) {
67
+ const trailingCloseBrace = sourceCode.getLastToken(
68
+ caseWhichFallsThrough.consequent[0],
69
+ );
70
+ const commentInBlock = sourceCode
71
+ .getCommentsBefore(trailingCloseBrace)
72
+ .pop();
73
+
74
+ if (
75
+ commentInBlock &&
76
+ isFallThroughComment(
77
+ commentInBlock.value,
78
+ fallthroughCommentPattern,
79
+ )
80
+ ) {
81
+ return commentInBlock;
82
+ }
83
+ }
84
+
85
+ const comment = sourceCode.getCommentsBefore(subsequentCase).pop();
86
+
87
+ if (
88
+ comment &&
89
+ isFallThroughComment(comment.value, fallthroughCommentPattern)
90
+ ) {
91
+ return comment;
92
+ }
93
+
94
+ return null;
95
+ }
96
+
97
+ /**
98
+ * Checks whether a node and a token are separated by blank lines
99
+ * @param {ASTNode} node The node to check
100
+ * @param {Token} token The token to compare against
101
+ * @returns {boolean} `true` if there are blank lines between node and token
102
+ */
103
+ function hasBlankLinesBetween(node, token) {
104
+ return token.loc.start.line > node.loc.end.line + 1;
105
+ }
106
+
107
+ //------------------------------------------------------------------------------
108
+ // Rule Definition
109
+ //------------------------------------------------------------------------------
110
+
111
+ /** @type {import('../types').Rule.RuleModule} */
112
+ module.exports = {
113
+ meta: {
114
+ type: "problem",
115
+
116
+ defaultOptions: [
117
+ {
118
+ allowEmptyCase: false,
119
+ reportUnusedFallthroughComment: false,
120
+ },
121
+ ],
122
+
123
+ docs: {
124
+ description: "Disallow fallthrough of `case` statements",
125
+ recommended: true,
126
+ url: "https://eslint.org/docs/latest/rules/no-fallthrough",
127
+ },
128
+
129
+ schema: [
130
+ {
131
+ type: "object",
132
+ properties: {
133
+ commentPattern: {
134
+ type: "string",
135
+ },
136
+ allowEmptyCase: {
137
+ type: "boolean",
138
+ },
139
+ reportUnusedFallthroughComment: {
140
+ type: "boolean",
141
+ },
142
+ },
143
+ additionalProperties: false,
144
+ },
145
+ ],
146
+ messages: {
147
+ unusedFallthroughComment:
148
+ "Found a comment that would permit fallthrough, but case cannot fall through.",
149
+ case: "Expected a 'break' statement before 'case'.",
150
+ default: "Expected a 'break' statement before 'default'.",
151
+ },
152
+ },
153
+
154
+ create(context) {
155
+ const codePathSegments = [];
156
+ let currentCodePathSegments = new Set();
157
+ const sourceCode = context.sourceCode;
158
+ const [
159
+ { allowEmptyCase, commentPattern, reportUnusedFallthroughComment },
160
+ ] = context.options;
161
+ const fallthroughCommentPattern = commentPattern
162
+ ? new RegExp(commentPattern, "u")
163
+ : DEFAULT_FALLTHROUGH_COMMENT;
164
+
165
+ /*
166
+ * We need to use leading comments of the next SwitchCase node because
167
+ * trailing comments is wrong if semicolons are omitted.
168
+ */
169
+ let previousCase = null;
170
+
171
+ return {
172
+ onCodePathStart() {
173
+ codePathSegments.push(currentCodePathSegments);
174
+ currentCodePathSegments = new Set();
175
+ },
176
+
177
+ onCodePathEnd() {
178
+ currentCodePathSegments = codePathSegments.pop();
179
+ },
180
+
181
+ onUnreachableCodePathSegmentStart(segment) {
182
+ currentCodePathSegments.add(segment);
183
+ },
184
+
185
+ onUnreachableCodePathSegmentEnd(segment) {
186
+ currentCodePathSegments.delete(segment);
187
+ },
188
+
189
+ onCodePathSegmentStart(segment) {
190
+ currentCodePathSegments.add(segment);
191
+ },
192
+
193
+ onCodePathSegmentEnd(segment) {
194
+ currentCodePathSegments.delete(segment);
195
+ },
196
+
197
+ SwitchCase(node) {
198
+ /*
199
+ * Checks whether or not there is a fallthrough comment.
200
+ * And reports the previous fallthrough node if that does not exist.
201
+ */
202
+
203
+ if (previousCase && previousCase.node.parent === node.parent) {
204
+ const previousCaseFallthroughComment =
205
+ getFallthroughComment(
206
+ previousCase.node,
207
+ node,
208
+ context,
209
+ fallthroughCommentPattern,
210
+ );
211
+
212
+ if (
213
+ previousCase.isFallthrough &&
214
+ !previousCaseFallthroughComment
215
+ ) {
216
+ context.report({
217
+ messageId: node.test ? "case" : "default",
218
+ node,
219
+ });
220
+ } else if (
221
+ reportUnusedFallthroughComment &&
222
+ !previousCase.isSwitchExitReachable &&
223
+ previousCaseFallthroughComment
224
+ ) {
225
+ context.report({
226
+ messageId: "unusedFallthroughComment",
227
+ node: previousCaseFallthroughComment,
228
+ });
229
+ }
230
+ }
231
+ previousCase = null;
232
+ },
233
+
234
+ "SwitchCase:exit"(node) {
235
+ const nextToken = sourceCode.getTokenAfter(node);
236
+
237
+ /*
238
+ * `reachable` meant fall through because statements preceded by
239
+ * `break`, `return`, or `throw` are unreachable.
240
+ * And allows empty cases and the last case.
241
+ */
242
+ const isSwitchExitReachable = isAnySegmentReachable(
243
+ currentCodePathSegments,
244
+ );
245
+ const isFallthrough =
246
+ isSwitchExitReachable &&
247
+ (node.consequent.length > 0 ||
248
+ (!allowEmptyCase &&
249
+ hasBlankLinesBetween(node, nextToken))) &&
250
+ node.parent.cases.at(-1) !== node;
251
+
252
+ previousCase = {
253
+ node,
254
+ isSwitchExitReachable,
255
+ isFallthrough,
256
+ };
257
+ },
258
+ };
259
+ },
260
+ };
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of a leading/trailing decimal point in a numeric literal
3
+ * @author James Allardice
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
+
15
+ //------------------------------------------------------------------------------
16
+ // Rule Definition
17
+ //------------------------------------------------------------------------------
18
+
19
+ /** @type {import('../types').Rule.RuleModule} */
20
+ module.exports = {
21
+ meta: {
22
+ deprecated: {
23
+ message: "Formatting rules are being moved out of ESLint core.",
24
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
25
+ deprecatedSince: "8.53.0",
26
+ availableUntil: "11.0.0",
27
+ replacedBy: [
28
+ {
29
+ message:
30
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
31
+ url: "https://eslint.style/guide/migration",
32
+ plugin: {
33
+ name: "@stylistic/eslint-plugin",
34
+ url: "https://eslint.style",
35
+ },
36
+ rule: {
37
+ name: "no-floating-decimal",
38
+ url: "https://eslint.style/rules/no-floating-decimal",
39
+ },
40
+ },
41
+ ],
42
+ },
43
+ type: "suggestion",
44
+
45
+ docs: {
46
+ description:
47
+ "Disallow leading or trailing decimal points in numeric literals",
48
+ recommended: false,
49
+ url: "https://eslint.org/docs/latest/rules/no-floating-decimal",
50
+ },
51
+
52
+ schema: [],
53
+ fixable: "code",
54
+ messages: {
55
+ leading: "A leading decimal point can be confused with a dot.",
56
+ trailing: "A trailing decimal point can be confused with a dot.",
57
+ },
58
+ },
59
+
60
+ create(context) {
61
+ const sourceCode = context.sourceCode;
62
+
63
+ return {
64
+ Literal(node) {
65
+ if (typeof node.value === "number") {
66
+ if (node.raw.startsWith(".")) {
67
+ context.report({
68
+ node,
69
+ messageId: "leading",
70
+ fix(fixer) {
71
+ const tokenBefore =
72
+ sourceCode.getTokenBefore(node);
73
+ const needsSpaceBefore =
74
+ tokenBefore &&
75
+ tokenBefore.range[1] === node.range[0] &&
76
+ !astUtils.canTokensBeAdjacent(
77
+ tokenBefore,
78
+ `0${node.raw}`,
79
+ );
80
+
81
+ return fixer.insertTextBefore(
82
+ node,
83
+ needsSpaceBefore ? " 0" : "0",
84
+ );
85
+ },
86
+ });
87
+ }
88
+ if (node.raw.indexOf(".") === node.raw.length - 1) {
89
+ context.report({
90
+ node,
91
+ messageId: "trailing",
92
+ fix: fixer => fixer.insertTextAfter(node, "0"),
93
+ });
94
+ }
95
+ }
96
+ },
97
+ };
98
+ },
99
+ };
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of function declaration identifiers as variables.
3
+ * @author Ian Christian Myers
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const astUtils = require("./utils/ast-utils");
9
+
10
+ //------------------------------------------------------------------------------
11
+ // Rule Definition
12
+ //------------------------------------------------------------------------------
13
+
14
+ /** @type {import('../types').Rule.RuleModule} */
15
+ module.exports = {
16
+ meta: {
17
+ type: "problem",
18
+
19
+ docs: {
20
+ description: "Disallow reassigning `function` declarations",
21
+ recommended: true,
22
+ url: "https://eslint.org/docs/latest/rules/no-func-assign",
23
+ },
24
+
25
+ schema: [],
26
+
27
+ messages: {
28
+ isAFunction: "'{{name}}' is a function.",
29
+ },
30
+ },
31
+
32
+ create(context) {
33
+ const sourceCode = context.sourceCode;
34
+
35
+ /**
36
+ * Reports a reference if is non initializer and writable.
37
+ * @param {References} references Collection of reference to check.
38
+ * @returns {void}
39
+ */
40
+ function checkReference(references) {
41
+ astUtils.getModifyingReferences(references).forEach(reference => {
42
+ context.report({
43
+ node: reference.identifier,
44
+ messageId: "isAFunction",
45
+ data: {
46
+ name: reference.identifier.name,
47
+ },
48
+ });
49
+ });
50
+ }
51
+
52
+ /**
53
+ * Finds and reports references that are non initializer and writable.
54
+ * @param {Variable} variable A variable to check.
55
+ * @returns {void}
56
+ */
57
+ function checkVariable(variable) {
58
+ if (variable.defs[0].type === "FunctionName") {
59
+ checkReference(variable.references);
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Checks parameters of a given function node.
65
+ * @param {ASTNode} node A function node to check.
66
+ * @returns {void}
67
+ */
68
+ function checkForFunction(node) {
69
+ sourceCode.getDeclaredVariables(node).forEach(checkVariable);
70
+ }
71
+
72
+ return {
73
+ FunctionDeclaration: checkForFunction,
74
+ FunctionExpression: checkForFunction,
75
+ };
76
+ },
77
+ };
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @fileoverview Rule to disallow assignments to native objects or read-only global variables
3
+ * @author Ilya Volodin
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Rule Definition
10
+ //------------------------------------------------------------------------------
11
+
12
+ /** @type {import('../types').Rule.RuleModule} */
13
+ module.exports = {
14
+ meta: {
15
+ type: "suggestion",
16
+
17
+ defaultOptions: [{ exceptions: [] }],
18
+
19
+ docs: {
20
+ description:
21
+ "Disallow assignments to native objects or read-only global variables",
22
+ recommended: true,
23
+ url: "https://eslint.org/docs/latest/rules/no-global-assign",
24
+ },
25
+
26
+ schema: [
27
+ {
28
+ type: "object",
29
+ properties: {
30
+ exceptions: {
31
+ type: "array",
32
+ items: { type: "string" },
33
+ uniqueItems: true,
34
+ },
35
+ },
36
+ additionalProperties: false,
37
+ },
38
+ ],
39
+
40
+ messages: {
41
+ globalShouldNotBeModified:
42
+ "Read-only global '{{name}}' should not be modified.",
43
+ },
44
+ },
45
+
46
+ create(context) {
47
+ const sourceCode = context.sourceCode;
48
+ const [{ exceptions }] = context.options;
49
+
50
+ /**
51
+ * Reports write references.
52
+ * @param {Reference} reference A reference to check.
53
+ * @param {number} index The index of the reference in the references.
54
+ * @param {Reference[]} references The array that the reference belongs to.
55
+ * @returns {void}
56
+ */
57
+ function checkReference(reference, index, references) {
58
+ const identifier = reference.identifier;
59
+
60
+ if (
61
+ reference.init === false &&
62
+ reference.isWrite() &&
63
+ /*
64
+ * Destructuring assignments can have multiple default value,
65
+ * so possibly there are multiple writeable references for the same identifier.
66
+ */
67
+ (index === 0 || references[index - 1].identifier !== identifier)
68
+ ) {
69
+ context.report({
70
+ node: identifier,
71
+ messageId: "globalShouldNotBeModified",
72
+ data: {
73
+ name: identifier.name,
74
+ },
75
+ });
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Reports write references if a given variable is read-only builtin.
81
+ * @param {Variable} variable A variable to check.
82
+ * @returns {void}
83
+ */
84
+ function checkVariable(variable) {
85
+ if (
86
+ variable.writeable === false &&
87
+ !exceptions.includes(variable.name)
88
+ ) {
89
+ variable.references.forEach(checkReference);
90
+ }
91
+ }
92
+
93
+ return {
94
+ Program(node) {
95
+ const globalScope = sourceCode.getScope(node);
96
+
97
+ globalScope.variables.forEach(checkVariable);
98
+ },
99
+ };
100
+ },
101
+ };