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,138 @@
1
+ /**
2
+ * @fileoverview Validates newlines before and after dots
3
+ * @author Greg Cochard
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const astUtils = require("./utils/ast-utils");
10
+
11
+ //------------------------------------------------------------------------------
12
+ // Rule Definition
13
+ //------------------------------------------------------------------------------
14
+
15
+ /** @type {import('../types').Rule.RuleModule} */
16
+ module.exports = {
17
+ meta: {
18
+ deprecated: {
19
+ message: "Formatting rules are being moved out of ESLint core.",
20
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
21
+ deprecatedSince: "8.53.0",
22
+ availableUntil: "11.0.0",
23
+ replacedBy: [
24
+ {
25
+ message:
26
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
27
+ url: "https://eslint.style/guide/migration",
28
+ plugin: {
29
+ name: "@stylistic/eslint-plugin",
30
+ url: "https://eslint.style",
31
+ },
32
+ rule: {
33
+ name: "dot-location",
34
+ url: "https://eslint.style/rules/dot-location",
35
+ },
36
+ },
37
+ ],
38
+ },
39
+ type: "layout",
40
+
41
+ docs: {
42
+ description: "Enforce consistent newlines before and after dots",
43
+ recommended: false,
44
+ url: "https://eslint.org/docs/latest/rules/dot-location",
45
+ },
46
+
47
+ schema: [
48
+ {
49
+ enum: ["object", "property"],
50
+ },
51
+ ],
52
+
53
+ fixable: "code",
54
+
55
+ messages: {
56
+ expectedDotAfterObject:
57
+ "Expected dot to be on same line as object.",
58
+ expectedDotBeforeProperty:
59
+ "Expected dot to be on same line as property.",
60
+ },
61
+ },
62
+
63
+ create(context) {
64
+ const config = context.options[0];
65
+
66
+ // default to onObject if no preference is passed
67
+ const onObject = config === "object" || !config;
68
+
69
+ const sourceCode = context.sourceCode;
70
+
71
+ /**
72
+ * Reports if the dot between object and property is on the correct location.
73
+ * @param {ASTNode} node The `MemberExpression` node.
74
+ * @returns {void}
75
+ */
76
+ function checkDotLocation(node) {
77
+ const property = node.property;
78
+ const dotToken = sourceCode.getTokenBefore(property);
79
+
80
+ if (onObject) {
81
+ // `obj` expression can be parenthesized, but those paren tokens are not a part of the `obj` node.
82
+ const tokenBeforeDot = sourceCode.getTokenBefore(dotToken);
83
+
84
+ if (!astUtils.isTokenOnSameLine(tokenBeforeDot, dotToken)) {
85
+ context.report({
86
+ node,
87
+ loc: dotToken.loc,
88
+ messageId: "expectedDotAfterObject",
89
+ *fix(fixer) {
90
+ if (
91
+ dotToken.value.startsWith(".") &&
92
+ astUtils.isDecimalIntegerNumericToken(
93
+ tokenBeforeDot,
94
+ )
95
+ ) {
96
+ yield fixer.insertTextAfter(
97
+ tokenBeforeDot,
98
+ ` ${dotToken.value}`,
99
+ );
100
+ } else {
101
+ yield fixer.insertTextAfter(
102
+ tokenBeforeDot,
103
+ dotToken.value,
104
+ );
105
+ }
106
+ yield fixer.remove(dotToken);
107
+ },
108
+ });
109
+ }
110
+ } else if (!astUtils.isTokenOnSameLine(dotToken, property)) {
111
+ context.report({
112
+ node,
113
+ loc: dotToken.loc,
114
+ messageId: "expectedDotBeforeProperty",
115
+ *fix(fixer) {
116
+ yield fixer.remove(dotToken);
117
+ yield fixer.insertTextBefore(property, dotToken.value);
118
+ },
119
+ });
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Checks the spacing of the dot within a member expression.
125
+ * @param {ASTNode} node The node to check.
126
+ * @returns {void}
127
+ */
128
+ function checkNode(node) {
129
+ if (!node.computed) {
130
+ checkDotLocation(node);
131
+ }
132
+ }
133
+
134
+ return {
135
+ MemberExpression: checkNode,
136
+ };
137
+ },
138
+ };
@@ -0,0 +1,216 @@
1
+ /**
2
+ * @fileoverview Rule to warn about using dot notation instead of square bracket notation when possible.
3
+ * @author Josh Perez
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ const astUtils = require("./utils/ast-utils");
12
+ const keywords = require("./utils/keywords");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ const validIdentifier = /^[a-zA-Z_$][\w$]*$/u;
19
+
20
+ // `null` literal must be handled separately.
21
+ const literalTypesToCheck = new Set(["string", "boolean"]);
22
+
23
+ /** @type {import('../types').Rule.RuleModule} */
24
+ module.exports = {
25
+ meta: {
26
+ type: "suggestion",
27
+
28
+ defaultOptions: [
29
+ {
30
+ allowKeywords: true,
31
+ allowPattern: "",
32
+ },
33
+ ],
34
+
35
+ docs: {
36
+ description: "Enforce dot notation whenever possible",
37
+ recommended: false,
38
+ frozen: true,
39
+ url: "https://eslint.org/docs/latest/rules/dot-notation",
40
+ },
41
+
42
+ schema: [
43
+ {
44
+ type: "object",
45
+ properties: {
46
+ allowKeywords: {
47
+ type: "boolean",
48
+ },
49
+ allowPattern: {
50
+ type: "string",
51
+ },
52
+ },
53
+ additionalProperties: false,
54
+ },
55
+ ],
56
+
57
+ fixable: "code",
58
+
59
+ messages: {
60
+ useDot: "[{{key}}] is better written in dot notation.",
61
+ useBrackets: ".{{key}} is a syntax error.",
62
+ },
63
+ },
64
+
65
+ create(context) {
66
+ const [options] = context.options;
67
+ const allowKeywords = options.allowKeywords;
68
+ const sourceCode = context.sourceCode;
69
+
70
+ let allowPattern;
71
+
72
+ if (options.allowPattern) {
73
+ allowPattern = new RegExp(options.allowPattern, "u");
74
+ }
75
+
76
+ /**
77
+ * Check if the property is valid dot notation
78
+ * @param {ASTNode} node The dot notation node
79
+ * @param {string|boolean|null} value Value which is to be checked
80
+ * @returns {void}
81
+ */
82
+ function checkComputedProperty(node, value) {
83
+ if (
84
+ validIdentifier.test(value) &&
85
+ (allowKeywords || !keywords.includes(String(value))) &&
86
+ !(allowPattern && allowPattern.test(value))
87
+ ) {
88
+ const formattedValue =
89
+ node.property.type === "Literal"
90
+ ? JSON.stringify(value)
91
+ : `\`${value}\``;
92
+
93
+ context.report({
94
+ node: node.property,
95
+ messageId: "useDot",
96
+ data: {
97
+ key: formattedValue,
98
+ },
99
+ *fix(fixer) {
100
+ const leftBracket = sourceCode.getTokenAfter(
101
+ node.object,
102
+ astUtils.isOpeningBracketToken,
103
+ );
104
+ const rightBracket = sourceCode.getLastToken(node);
105
+ const nextToken = sourceCode.getTokenAfter(node);
106
+
107
+ // Don't perform any fixes if there are comments inside the brackets.
108
+ if (
109
+ sourceCode.commentsExistBetween(
110
+ leftBracket,
111
+ rightBracket,
112
+ )
113
+ ) {
114
+ return;
115
+ }
116
+
117
+ // Replace the brackets by an identifier.
118
+ if (!node.optional) {
119
+ yield fixer.insertTextBefore(
120
+ leftBracket,
121
+ astUtils.isDecimalInteger(node.object)
122
+ ? " ."
123
+ : ".",
124
+ );
125
+ }
126
+ yield fixer.replaceTextRange(
127
+ [leftBracket.range[0], rightBracket.range[1]],
128
+ String(value),
129
+ );
130
+
131
+ // Insert a space after the property if it will be connected to the next token.
132
+ if (
133
+ nextToken &&
134
+ rightBracket.range[1] === nextToken.range[0] &&
135
+ !astUtils.canTokensBeAdjacent(
136
+ String(value),
137
+ nextToken,
138
+ )
139
+ ) {
140
+ yield fixer.insertTextAfter(node, " ");
141
+ }
142
+ },
143
+ });
144
+ }
145
+ }
146
+
147
+ return {
148
+ MemberExpression(node) {
149
+ if (
150
+ node.computed &&
151
+ node.property.type === "Literal" &&
152
+ (literalTypesToCheck.has(typeof node.property.value) ||
153
+ astUtils.isNullLiteral(node.property))
154
+ ) {
155
+ checkComputedProperty(node, node.property.value);
156
+ }
157
+ if (
158
+ node.computed &&
159
+ astUtils.isStaticTemplateLiteral(node.property)
160
+ ) {
161
+ checkComputedProperty(
162
+ node,
163
+ node.property.quasis[0].value.cooked,
164
+ );
165
+ }
166
+ if (
167
+ !allowKeywords &&
168
+ !node.computed &&
169
+ node.property.type === "Identifier" &&
170
+ keywords.includes(String(node.property.name))
171
+ ) {
172
+ context.report({
173
+ node: node.property,
174
+ messageId: "useBrackets",
175
+ data: {
176
+ key: node.property.name,
177
+ },
178
+ *fix(fixer) {
179
+ const dotToken = sourceCode.getTokenBefore(
180
+ node.property,
181
+ );
182
+
183
+ // A statement that starts with `let[` is parsed as a destructuring variable declaration, not a MemberExpression.
184
+ if (
185
+ node.object.type === "Identifier" &&
186
+ node.object.name === "let" &&
187
+ !node.optional
188
+ ) {
189
+ return;
190
+ }
191
+
192
+ // Don't perform any fixes if there are comments between the dot and the property name.
193
+ if (
194
+ sourceCode.commentsExistBetween(
195
+ dotToken,
196
+ node.property,
197
+ )
198
+ ) {
199
+ return;
200
+ }
201
+
202
+ // Replace the identifier to brackets.
203
+ if (!node.optional) {
204
+ yield fixer.remove(dotToken);
205
+ }
206
+ yield fixer.replaceText(
207
+ node.property,
208
+ `["${node.property.name}"]`,
209
+ );
210
+ },
211
+ });
212
+ }
213
+ },
214
+ };
215
+ },
216
+ };
@@ -0,0 +1,135 @@
1
+ /**
2
+ * @fileoverview Require or disallow newline at the end of files
3
+ * @author Nodeca Team <https://github.com/nodeca>
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Rule Definition
10
+ //------------------------------------------------------------------------------
11
+
12
+ /** @type {import('../types').Rule.RuleModule} */
13
+ module.exports = {
14
+ meta: {
15
+ deprecated: {
16
+ message: "Formatting rules are being moved out of ESLint core.",
17
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
18
+ deprecatedSince: "8.53.0",
19
+ availableUntil: "11.0.0",
20
+ replacedBy: [
21
+ {
22
+ message:
23
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
24
+ url: "https://eslint.style/guide/migration",
25
+ plugin: {
26
+ name: "@stylistic/eslint-plugin",
27
+ url: "https://eslint.style",
28
+ },
29
+ rule: {
30
+ name: "eol-last",
31
+ url: "https://eslint.style/rules/eol-last",
32
+ },
33
+ },
34
+ ],
35
+ },
36
+ type: "layout",
37
+
38
+ docs: {
39
+ description: "Require or disallow newline at the end of files",
40
+ recommended: false,
41
+ url: "https://eslint.org/docs/latest/rules/eol-last",
42
+ },
43
+
44
+ fixable: "whitespace",
45
+
46
+ schema: [
47
+ {
48
+ enum: ["always", "never", "unix", "windows"],
49
+ },
50
+ ],
51
+
52
+ messages: {
53
+ missing: "Newline required at end of file but not found.",
54
+ unexpected: "Newline not allowed at end of file.",
55
+ },
56
+ },
57
+ create(context) {
58
+ //--------------------------------------------------------------------------
59
+ // Public
60
+ //--------------------------------------------------------------------------
61
+
62
+ return {
63
+ Program: function checkBadEOF(node) {
64
+ const sourceCode = context.sourceCode,
65
+ src = sourceCode.getText(),
66
+ lastLine = sourceCode.lines.at(-1),
67
+ location = {
68
+ column: lastLine.length,
69
+ line: sourceCode.lines.length,
70
+ },
71
+ LF = "\n",
72
+ CRLF = `\r${LF}`,
73
+ endsWithNewline = src.endsWith(LF);
74
+
75
+ /*
76
+ * Empty source is always valid: No content in file so we don't
77
+ * need to lint for a newline on the last line of content.
78
+ */
79
+ if (!src.length) {
80
+ return;
81
+ }
82
+
83
+ let mode = context.options[0] || "always",
84
+ appendCRLF = false;
85
+
86
+ if (mode === "unix") {
87
+ // `"unix"` should behave exactly as `"always"`
88
+ mode = "always";
89
+ }
90
+ if (mode === "windows") {
91
+ // `"windows"` should behave exactly as `"always"`, but append CRLF in the fixer for backwards compatibility
92
+ mode = "always";
93
+ appendCRLF = true;
94
+ }
95
+ if (mode === "always" && !endsWithNewline) {
96
+ // File is not newline-terminated, but should be
97
+ context.report({
98
+ node,
99
+ loc: location,
100
+ messageId: "missing",
101
+ fix(fixer) {
102
+ return fixer.insertTextAfterRange(
103
+ [0, src.length],
104
+ appendCRLF ? CRLF : LF,
105
+ );
106
+ },
107
+ });
108
+ } else if (mode === "never" && endsWithNewline) {
109
+ const secondLastLine = sourceCode.lines.at(-2);
110
+
111
+ // File is newline-terminated, but shouldn't be
112
+ context.report({
113
+ node,
114
+ loc: {
115
+ start: {
116
+ line: sourceCode.lines.length - 1,
117
+ column: secondLastLine.length,
118
+ },
119
+ end: { line: sourceCode.lines.length, column: 0 },
120
+ },
121
+ messageId: "unexpected",
122
+ fix(fixer) {
123
+ const finalEOLs = /(?:\r?\n)+$/u,
124
+ match = finalEOLs.exec(sourceCode.text),
125
+ start = match.index,
126
+ end = sourceCode.text.length;
127
+
128
+ return fixer.replaceTextRange([start, end], "");
129
+ },
130
+ });
131
+ }
132
+ },
133
+ };
134
+ },
135
+ };
@@ -0,0 +1,210 @@
1
+ /**
2
+ * @fileoverview Rule to flag statements that use != and == instead of !== and ===
3
+ * @author Nicholas C. Zakas
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ /** @type {import('../types').Rule.RuleModule} */
19
+ module.exports = {
20
+ meta: {
21
+ type: "suggestion",
22
+ hasSuggestions: true,
23
+
24
+ docs: {
25
+ description: "Require the use of `===` and `!==`",
26
+ recommended: false,
27
+ url: "https://eslint.org/docs/latest/rules/eqeqeq",
28
+ },
29
+
30
+ schema: {
31
+ anyOf: [
32
+ {
33
+ type: "array",
34
+ items: [
35
+ {
36
+ enum: ["always"],
37
+ },
38
+ {
39
+ type: "object",
40
+ properties: {
41
+ null: {
42
+ enum: ["always", "never", "ignore"],
43
+ },
44
+ },
45
+ additionalProperties: false,
46
+ },
47
+ ],
48
+ additionalItems: false,
49
+ },
50
+ {
51
+ type: "array",
52
+ items: [
53
+ {
54
+ enum: ["smart", "allow-null"],
55
+ },
56
+ ],
57
+ additionalItems: false,
58
+ },
59
+ ],
60
+ },
61
+
62
+ fixable: "code",
63
+
64
+ messages: {
65
+ unexpected:
66
+ "Expected '{{expectedOperator}}' and instead saw '{{actualOperator}}'.",
67
+ replaceOperator:
68
+ "Use '{{expectedOperator}}' instead of '{{actualOperator}}'.",
69
+ },
70
+ },
71
+
72
+ create(context) {
73
+ const config = context.options[0] || "always";
74
+ const options = context.options[1] || {};
75
+ const sourceCode = context.sourceCode;
76
+
77
+ const nullOption =
78
+ config === "always" ? options.null || "always" : "ignore";
79
+ const enforceRuleForNull = nullOption === "always";
80
+ const enforceInverseRuleForNull = nullOption === "never";
81
+
82
+ /**
83
+ * Checks if an expression is a typeof expression
84
+ * @param {ASTNode} node The node to check
85
+ * @returns {boolean} if the node is a typeof expression
86
+ */
87
+ function isTypeOf(node) {
88
+ return (
89
+ node.type === "UnaryExpression" && node.operator === "typeof"
90
+ );
91
+ }
92
+
93
+ /**
94
+ * Checks if either operand of a binary expression is a typeof operation
95
+ * @param {ASTNode} node The node to check
96
+ * @returns {boolean} if one of the operands is typeof
97
+ * @private
98
+ */
99
+ function isTypeOfBinary(node) {
100
+ return isTypeOf(node.left) || isTypeOf(node.right);
101
+ }
102
+
103
+ /**
104
+ * Checks if operands are literals of the same type (via typeof)
105
+ * @param {ASTNode} node The node to check
106
+ * @returns {boolean} if operands are of same type
107
+ * @private
108
+ */
109
+ function areLiteralsAndSameType(node) {
110
+ return (
111
+ node.left.type === "Literal" &&
112
+ node.right.type === "Literal" &&
113
+ typeof node.left.value === typeof node.right.value
114
+ );
115
+ }
116
+
117
+ /**
118
+ * Checks if one of the operands is a literal null
119
+ * @param {ASTNode} node The node to check
120
+ * @returns {boolean} if operands are null
121
+ * @private
122
+ */
123
+ function isNullCheck(node) {
124
+ return (
125
+ astUtils.isNullLiteral(node.right) ||
126
+ astUtils.isNullLiteral(node.left)
127
+ );
128
+ }
129
+
130
+ /**
131
+ * Reports a message for this rule.
132
+ * @param {ASTNode} node The binary expression node that was checked
133
+ * @param {string} expectedOperator The operator that was expected (either '==', '!=', '===', or '!==')
134
+ * @returns {void}
135
+ * @private
136
+ */
137
+ function report(node, expectedOperator) {
138
+ const operatorToken = sourceCode.getFirstTokenBetween(
139
+ node.left,
140
+ node.right,
141
+ token => token.value === node.operator,
142
+ );
143
+
144
+ const commonReportParams = {
145
+ node,
146
+ loc: operatorToken.loc,
147
+ messageId: "unexpected",
148
+ data: { expectedOperator, actualOperator: node.operator },
149
+ };
150
+
151
+ if (isTypeOfBinary(node) || areLiteralsAndSameType(node)) {
152
+ context.report({
153
+ ...commonReportParams,
154
+ fix(fixer) {
155
+ return fixer.replaceText(
156
+ operatorToken,
157
+ expectedOperator,
158
+ );
159
+ },
160
+ });
161
+ } else {
162
+ context.report({
163
+ ...commonReportParams,
164
+ suggest: [
165
+ {
166
+ messageId: "replaceOperator",
167
+ data: {
168
+ expectedOperator,
169
+ actualOperator: node.operator,
170
+ },
171
+ fix: fixer =>
172
+ fixer.replaceText(
173
+ operatorToken,
174
+ expectedOperator,
175
+ ),
176
+ },
177
+ ],
178
+ });
179
+ }
180
+ }
181
+
182
+ return {
183
+ BinaryExpression(node) {
184
+ const isNull = isNullCheck(node);
185
+
186
+ if (node.operator !== "==" && node.operator !== "!=") {
187
+ if (enforceInverseRuleForNull && isNull) {
188
+ report(node, node.operator.slice(0, -1));
189
+ }
190
+ return;
191
+ }
192
+
193
+ if (
194
+ config === "smart" &&
195
+ (isTypeOfBinary(node) ||
196
+ areLiteralsAndSameType(node) ||
197
+ isNull)
198
+ ) {
199
+ return;
200
+ }
201
+
202
+ if (!enforceRuleForNull && isNull) {
203
+ return;
204
+ }
205
+
206
+ report(node, `${node.operator}=`);
207
+ },
208
+ };
209
+ },
210
+ };