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,253 @@
1
+ /**
2
+ * @fileoverview Rule to disallow mixed binary operators.
3
+ * @author Toru Nagashima
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const astUtils = require("./utils/ast-utils.js");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Helpers
17
+ //------------------------------------------------------------------------------
18
+
19
+ const ARITHMETIC_OPERATORS = ["+", "-", "*", "/", "%", "**"];
20
+ const BITWISE_OPERATORS = ["&", "|", "^", "~", "<<", ">>", ">>>"];
21
+ const COMPARISON_OPERATORS = ["==", "!=", "===", "!==", ">", ">=", "<", "<="];
22
+ const LOGICAL_OPERATORS = ["&&", "||"];
23
+ const RELATIONAL_OPERATORS = ["in", "instanceof"];
24
+ const TERNARY_OPERATOR = ["?:"];
25
+ const COALESCE_OPERATOR = ["??"];
26
+ const ALL_OPERATORS = [].concat(
27
+ ARITHMETIC_OPERATORS,
28
+ BITWISE_OPERATORS,
29
+ COMPARISON_OPERATORS,
30
+ LOGICAL_OPERATORS,
31
+ RELATIONAL_OPERATORS,
32
+ TERNARY_OPERATOR,
33
+ COALESCE_OPERATOR,
34
+ );
35
+ const DEFAULT_GROUPS = [
36
+ ARITHMETIC_OPERATORS,
37
+ BITWISE_OPERATORS,
38
+ COMPARISON_OPERATORS,
39
+ LOGICAL_OPERATORS,
40
+ RELATIONAL_OPERATORS,
41
+ ];
42
+ const TARGET_NODE_TYPE = /^(?:Binary|Logical|Conditional)Expression$/u;
43
+
44
+ /**
45
+ * Normalizes options.
46
+ * @param {Object|undefined} options A options object to normalize.
47
+ * @returns {Object} Normalized option object.
48
+ */
49
+ function normalizeOptions(options = {}) {
50
+ const hasGroups = options.groups && options.groups.length > 0;
51
+ const groups = hasGroups ? options.groups : DEFAULT_GROUPS;
52
+ const allowSamePrecedence = options.allowSamePrecedence !== false;
53
+
54
+ return {
55
+ groups,
56
+ allowSamePrecedence,
57
+ };
58
+ }
59
+
60
+ /**
61
+ * Checks whether any group which includes both given operator exists or not.
62
+ * @param {Array<string[]>} groups A list of groups to check.
63
+ * @param {string} left An operator.
64
+ * @param {string} right Another operator.
65
+ * @returns {boolean} `true` if such group existed.
66
+ */
67
+ function includesBothInAGroup(groups, left, right) {
68
+ return groups.some(group => group.includes(left) && group.includes(right));
69
+ }
70
+
71
+ /**
72
+ * Checks whether the given node is a conditional expression and returns the test node else the left node.
73
+ * @param {ASTNode} node A node which can be a BinaryExpression or a LogicalExpression node.
74
+ * This parent node can be BinaryExpression, LogicalExpression
75
+ * , or a ConditionalExpression node
76
+ * @returns {ASTNode} node the appropriate node(left or test).
77
+ */
78
+ function getChildNode(node) {
79
+ return node.type === "ConditionalExpression" ? node.test : node.left;
80
+ }
81
+
82
+ //------------------------------------------------------------------------------
83
+ // Rule Definition
84
+ //------------------------------------------------------------------------------
85
+
86
+ /** @type {import('../types').Rule.RuleModule} */
87
+ module.exports = {
88
+ meta: {
89
+ deprecated: {
90
+ message: "Formatting rules are being moved out of ESLint core.",
91
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
92
+ deprecatedSince: "8.53.0",
93
+ availableUntil: "11.0.0",
94
+ replacedBy: [
95
+ {
96
+ message:
97
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
98
+ url: "https://eslint.style/guide/migration",
99
+ plugin: {
100
+ name: "@stylistic/eslint-plugin",
101
+ url: "https://eslint.style",
102
+ },
103
+ rule: {
104
+ name: "no-mixed-operators",
105
+ url: "https://eslint.style/rules/no-mixed-operators",
106
+ },
107
+ },
108
+ ],
109
+ },
110
+ type: "suggestion",
111
+
112
+ docs: {
113
+ description: "Disallow mixed binary operators",
114
+ recommended: false,
115
+ url: "https://eslint.org/docs/latest/rules/no-mixed-operators",
116
+ },
117
+
118
+ schema: [
119
+ {
120
+ type: "object",
121
+ properties: {
122
+ groups: {
123
+ type: "array",
124
+ items: {
125
+ type: "array",
126
+ items: { enum: ALL_OPERATORS },
127
+ minItems: 2,
128
+ uniqueItems: true,
129
+ },
130
+ uniqueItems: true,
131
+ },
132
+ allowSamePrecedence: {
133
+ type: "boolean",
134
+ default: true,
135
+ },
136
+ },
137
+ additionalProperties: false,
138
+ },
139
+ ],
140
+
141
+ messages: {
142
+ unexpectedMixedOperator:
143
+ "Unexpected mix of '{{leftOperator}}' and '{{rightOperator}}'. Use parentheses to clarify the intended order of operations.",
144
+ },
145
+ },
146
+
147
+ create(context) {
148
+ const sourceCode = context.sourceCode;
149
+ const options = normalizeOptions(context.options[0]);
150
+
151
+ /**
152
+ * Checks whether a given node should be ignored by options or not.
153
+ * @param {ASTNode} node A node to check. This is a BinaryExpression
154
+ * node or a LogicalExpression node. This parent node is one of
155
+ * them, too.
156
+ * @returns {boolean} `true` if the node should be ignored.
157
+ */
158
+ function shouldIgnore(node) {
159
+ const a = node;
160
+ const b = node.parent;
161
+
162
+ return (
163
+ !includesBothInAGroup(
164
+ options.groups,
165
+ a.operator,
166
+ b.type === "ConditionalExpression" ? "?:" : b.operator,
167
+ ) ||
168
+ (options.allowSamePrecedence &&
169
+ astUtils.getPrecedence(a) === astUtils.getPrecedence(b))
170
+ );
171
+ }
172
+
173
+ /**
174
+ * Checks whether the operator of a given node is mixed with parent
175
+ * node's operator or not.
176
+ * @param {ASTNode} node A node to check. This is a BinaryExpression
177
+ * node or a LogicalExpression node. This parent node is one of
178
+ * them, too.
179
+ * @returns {boolean} `true` if the node was mixed.
180
+ */
181
+ function isMixedWithParent(node) {
182
+ return (
183
+ node.operator !== node.parent.operator &&
184
+ !astUtils.isParenthesised(sourceCode, node)
185
+ );
186
+ }
187
+
188
+ /**
189
+ * Gets the operator token of a given node.
190
+ * @param {ASTNode} node A node to check. This is a BinaryExpression
191
+ * node or a LogicalExpression node.
192
+ * @returns {Token} The operator token of the node.
193
+ */
194
+ function getOperatorToken(node) {
195
+ return sourceCode.getTokenAfter(
196
+ getChildNode(node),
197
+ astUtils.isNotClosingParenToken,
198
+ );
199
+ }
200
+
201
+ /**
202
+ * Reports both the operator of a given node and the operator of the
203
+ * parent node.
204
+ * @param {ASTNode} node A node to check. This is a BinaryExpression
205
+ * node or a LogicalExpression node. This parent node is one of
206
+ * them, too.
207
+ * @returns {void}
208
+ */
209
+ function reportBothOperators(node) {
210
+ const parent = node.parent;
211
+ const left = getChildNode(parent) === node ? node : parent;
212
+ const right = getChildNode(parent) !== node ? node : parent;
213
+ const data = {
214
+ leftOperator: left.operator || "?:",
215
+ rightOperator: right.operator || "?:",
216
+ };
217
+
218
+ context.report({
219
+ node: left,
220
+ loc: getOperatorToken(left).loc,
221
+ messageId: "unexpectedMixedOperator",
222
+ data,
223
+ });
224
+ context.report({
225
+ node: right,
226
+ loc: getOperatorToken(right).loc,
227
+ messageId: "unexpectedMixedOperator",
228
+ data,
229
+ });
230
+ }
231
+
232
+ /**
233
+ * Checks between the operator of this node and the operator of the
234
+ * parent node.
235
+ * @param {ASTNode} node A node to check.
236
+ * @returns {void}
237
+ */
238
+ function check(node) {
239
+ if (
240
+ TARGET_NODE_TYPE.test(node.parent.type) &&
241
+ isMixedWithParent(node) &&
242
+ !shouldIgnore(node)
243
+ ) {
244
+ reportBothOperators(node);
245
+ }
246
+ }
247
+
248
+ return {
249
+ BinaryExpression: check,
250
+ LogicalExpression: check,
251
+ };
252
+ },
253
+ };
@@ -0,0 +1,267 @@
1
+ /**
2
+ * @fileoverview Rule to enforce grouped require statements for Node.JS
3
+ * @author Raphael Pigulla
4
+ * @deprecated in ESLint v7.0.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Rule Definition
11
+ //------------------------------------------------------------------------------
12
+
13
+ /** @type {import('../types').Rule.RuleModule} */
14
+ module.exports = {
15
+ meta: {
16
+ deprecated: {
17
+ message: "Node.js rules were moved out of ESLint core.",
18
+ url: "https://eslint.org/docs/latest/use/migrating-to-7.0.0#deprecate-node-rules",
19
+ deprecatedSince: "7.0.0",
20
+ availableUntil: "11.0.0",
21
+ replacedBy: [
22
+ {
23
+ message:
24
+ "eslint-plugin-n now maintains deprecated Node.js-related rules.",
25
+ plugin: {
26
+ name: "eslint-plugin-n",
27
+ url: "https://github.com/eslint-community/eslint-plugin-n",
28
+ },
29
+ rule: {
30
+ name: "no-mixed-requires",
31
+ url: "https://github.com/eslint-community/eslint-plugin-n/tree/master/docs/rules/no-mixed-requires.md",
32
+ },
33
+ },
34
+ ],
35
+ },
36
+
37
+ type: "suggestion",
38
+
39
+ docs: {
40
+ description:
41
+ "Disallow `require` calls to be mixed with regular variable declarations",
42
+ recommended: false,
43
+ url: "https://eslint.org/docs/latest/rules/no-mixed-requires",
44
+ },
45
+
46
+ schema: [
47
+ {
48
+ oneOf: [
49
+ {
50
+ type: "boolean",
51
+ },
52
+ {
53
+ type: "object",
54
+ properties: {
55
+ grouping: {
56
+ type: "boolean",
57
+ },
58
+ allowCall: {
59
+ type: "boolean",
60
+ },
61
+ },
62
+ additionalProperties: false,
63
+ },
64
+ ],
65
+ },
66
+ ],
67
+
68
+ messages: {
69
+ noMixRequire: "Do not mix 'require' and other declarations.",
70
+ noMixCoreModuleFileComputed:
71
+ "Do not mix core, module, file and computed requires.",
72
+ },
73
+ },
74
+
75
+ create(context) {
76
+ const options = context.options[0];
77
+ let grouping = false,
78
+ allowCall = false;
79
+
80
+ if (typeof options === "object") {
81
+ grouping = options.grouping;
82
+ allowCall = options.allowCall;
83
+ } else {
84
+ grouping = !!options;
85
+ }
86
+
87
+ /**
88
+ * Returns the list of built-in modules.
89
+ * @returns {string[]} An array of built-in Node.js modules.
90
+ */
91
+ function getBuiltinModules() {
92
+ /*
93
+ * This list is generated using:
94
+ * `require("repl")._builtinLibs.concat('repl').sort()`
95
+ * This particular list is as per nodejs v0.12.2 and iojs v0.7.1
96
+ */
97
+ return [
98
+ "assert",
99
+ "buffer",
100
+ "child_process",
101
+ "cluster",
102
+ "crypto",
103
+ "dgram",
104
+ "dns",
105
+ "domain",
106
+ "events",
107
+ "fs",
108
+ "http",
109
+ "https",
110
+ "net",
111
+ "os",
112
+ "path",
113
+ "punycode",
114
+ "querystring",
115
+ "readline",
116
+ "repl",
117
+ "smalloc",
118
+ "stream",
119
+ "string_decoder",
120
+ "tls",
121
+ "tty",
122
+ "url",
123
+ "util",
124
+ "v8",
125
+ "vm",
126
+ "zlib",
127
+ ];
128
+ }
129
+
130
+ const BUILTIN_MODULES = getBuiltinModules();
131
+
132
+ const DECL_REQUIRE = "require",
133
+ DECL_UNINITIALIZED = "uninitialized",
134
+ DECL_OTHER = "other";
135
+
136
+ const REQ_CORE = "core",
137
+ REQ_FILE = "file",
138
+ REQ_MODULE = "module",
139
+ REQ_COMPUTED = "computed";
140
+
141
+ /**
142
+ * Determines the type of a declaration statement.
143
+ * @param {ASTNode} initExpression The init node of the VariableDeclarator.
144
+ * @returns {string} The type of declaration represented by the expression.
145
+ */
146
+ function getDeclarationType(initExpression) {
147
+ if (!initExpression) {
148
+ // "var x;"
149
+ return DECL_UNINITIALIZED;
150
+ }
151
+
152
+ if (
153
+ initExpression.type === "CallExpression" &&
154
+ initExpression.callee.type === "Identifier" &&
155
+ initExpression.callee.name === "require"
156
+ ) {
157
+ // "var x = require('util');"
158
+ return DECL_REQUIRE;
159
+ }
160
+ if (
161
+ allowCall &&
162
+ initExpression.type === "CallExpression" &&
163
+ initExpression.callee.type === "CallExpression"
164
+ ) {
165
+ // "var x = require('diagnose')('sub-module');"
166
+ return getDeclarationType(initExpression.callee);
167
+ }
168
+ if (initExpression.type === "MemberExpression") {
169
+ // "var x = require('glob').Glob;"
170
+ return getDeclarationType(initExpression.object);
171
+ }
172
+
173
+ // "var x = 42;"
174
+ return DECL_OTHER;
175
+ }
176
+
177
+ /**
178
+ * Determines the type of module that is loaded via require.
179
+ * @param {ASTNode} initExpression The init node of the VariableDeclarator.
180
+ * @returns {string} The module type.
181
+ */
182
+ function inferModuleType(initExpression) {
183
+ if (initExpression.type === "MemberExpression") {
184
+ // "var x = require('glob').Glob;"
185
+ return inferModuleType(initExpression.object);
186
+ }
187
+ if (initExpression.arguments.length === 0) {
188
+ // "var x = require();"
189
+ return REQ_COMPUTED;
190
+ }
191
+
192
+ const arg = initExpression.arguments[0];
193
+
194
+ if (arg.type !== "Literal" || typeof arg.value !== "string") {
195
+ // "var x = require(42);"
196
+ return REQ_COMPUTED;
197
+ }
198
+
199
+ if (BUILTIN_MODULES.includes(arg.value)) {
200
+ // "var fs = require('fs');"
201
+ return REQ_CORE;
202
+ }
203
+ if (/^\.{0,2}\//u.test(arg.value)) {
204
+ // "var utils = require('./utils');"
205
+ return REQ_FILE;
206
+ }
207
+
208
+ // "var async = require('async');"
209
+ return REQ_MODULE;
210
+ }
211
+
212
+ /**
213
+ * Check if the list of variable declarations is mixed, i.e. whether it
214
+ * contains both require and other declarations.
215
+ * @param {ASTNode} declarations The list of VariableDeclarators.
216
+ * @returns {boolean} True if the declarations are mixed, false if not.
217
+ */
218
+ function isMixed(declarations) {
219
+ const contains = {};
220
+
221
+ declarations.forEach(declaration => {
222
+ const type = getDeclarationType(declaration.init);
223
+
224
+ contains[type] = true;
225
+ });
226
+
227
+ return !!(
228
+ contains[DECL_REQUIRE] &&
229
+ (contains[DECL_UNINITIALIZED] || contains[DECL_OTHER])
230
+ );
231
+ }
232
+
233
+ /**
234
+ * Check if all require declarations in the given list are of the same
235
+ * type.
236
+ * @param {ASTNode} declarations The list of VariableDeclarators.
237
+ * @returns {boolean} True if the declarations are grouped, false if not.
238
+ */
239
+ function isGrouped(declarations) {
240
+ const found = {};
241
+
242
+ declarations.forEach(declaration => {
243
+ if (getDeclarationType(declaration.init) === DECL_REQUIRE) {
244
+ found[inferModuleType(declaration.init)] = true;
245
+ }
246
+ });
247
+
248
+ return Object.keys(found).length <= 1;
249
+ }
250
+
251
+ return {
252
+ VariableDeclaration(node) {
253
+ if (isMixed(node.declarations)) {
254
+ context.report({
255
+ node,
256
+ messageId: "noMixRequire",
257
+ });
258
+ } else if (grouping && !isGrouped(node.declarations)) {
259
+ context.report({
260
+ node,
261
+ messageId: "noMixCoreModuleFileComputed",
262
+ });
263
+ }
264
+ },
265
+ };
266
+ },
267
+ };
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @fileoverview Disallow mixed spaces and tabs for indentation
3
+ * @author Jary Niebur
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: "no-mixed-spaces-and-tabs",
31
+ url: "https://eslint.style/rules/no-mixed-spaces-and-tabs",
32
+ },
33
+ },
34
+ ],
35
+ },
36
+ type: "layout",
37
+
38
+ docs: {
39
+ description: "Disallow mixed spaces and tabs for indentation",
40
+ recommended: false,
41
+ url: "https://eslint.org/docs/latest/rules/no-mixed-spaces-and-tabs",
42
+ },
43
+
44
+ schema: [
45
+ {
46
+ enum: ["smart-tabs", true, false],
47
+ },
48
+ ],
49
+
50
+ messages: {
51
+ mixedSpacesAndTabs: "Mixed spaces and tabs.",
52
+ },
53
+ },
54
+
55
+ create(context) {
56
+ const sourceCode = context.sourceCode;
57
+
58
+ let smartTabs;
59
+
60
+ switch (context.options[0]) {
61
+ case true: // Support old syntax, maybe add deprecation warning here
62
+ case "smart-tabs":
63
+ smartTabs = true;
64
+ break;
65
+ default:
66
+ smartTabs = false;
67
+ }
68
+
69
+ //--------------------------------------------------------------------------
70
+ // Public
71
+ //--------------------------------------------------------------------------
72
+
73
+ return {
74
+ "Program:exit"(node) {
75
+ const lines = sourceCode.lines,
76
+ comments = sourceCode.getAllComments(),
77
+ ignoredCommentLines = new Set();
78
+
79
+ // Add all lines except the first ones.
80
+ comments.forEach(comment => {
81
+ for (
82
+ let i = comment.loc.start.line + 1;
83
+ i <= comment.loc.end.line;
84
+ i++
85
+ ) {
86
+ ignoredCommentLines.add(i);
87
+ }
88
+ });
89
+
90
+ /*
91
+ * At least one space followed by a tab
92
+ * or the reverse before non-tab/-space
93
+ * characters begin.
94
+ */
95
+ let regex = /^(?=( +|\t+))\1(?:\t| )/u;
96
+
97
+ if (smartTabs) {
98
+ /*
99
+ * At least one space followed by a tab
100
+ * before non-tab/-space characters begin.
101
+ */
102
+ // eslint-disable-next-line regexp/no-empty-lookarounds-assertion -- False positive
103
+ regex = /^(?=(\t*))\1(?=( +))\2\t/u;
104
+ }
105
+
106
+ lines.forEach((line, i) => {
107
+ const match = regex.exec(line);
108
+
109
+ if (match) {
110
+ const lineNumber = i + 1;
111
+ const loc = {
112
+ start: {
113
+ line: lineNumber,
114
+ column: match[0].length - 2,
115
+ },
116
+ end: {
117
+ line: lineNumber,
118
+ column: match[0].length,
119
+ },
120
+ };
121
+
122
+ if (!ignoredCommentLines.has(lineNumber)) {
123
+ const containingNode =
124
+ sourceCode.getNodeByRangeIndex(
125
+ sourceCode.getIndexFromLoc(loc.start),
126
+ );
127
+
128
+ if (
129
+ !(
130
+ containingNode &&
131
+ ["Literal", "TemplateElement"].includes(
132
+ containingNode.type,
133
+ )
134
+ )
135
+ ) {
136
+ context.report({
137
+ node,
138
+ loc,
139
+ messageId: "mixedSpacesAndTabs",
140
+ });
141
+ }
142
+ }
143
+ }
144
+ });
145
+ },
146
+ };
147
+ },
148
+ };