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,7 @@
1
+ "use strict";
2
+
3
+ const { ESLint } = require("./eslint");
4
+
5
+ module.exports = {
6
+ ESLint,
7
+ };
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @fileoverview Worker thread for multithread linting.
3
+ * @author Francesco Trotta
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const hrtimeBigint = process.hrtime.bigint;
9
+
10
+ const startTime = hrtimeBigint();
11
+
12
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins -- enable V8's code cache if supported
13
+ require("node:module").enableCompileCache?.();
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Requirements
17
+ //------------------------------------------------------------------------------
18
+
19
+ const { parentPort, threadId, workerData } = require("node:worker_threads");
20
+ const {
21
+ createConfigLoader,
22
+ createDebug,
23
+ createDefaultConfigs,
24
+ createLinter,
25
+ createLintResultCache,
26
+ getCacheFile,
27
+ lintFile,
28
+ loadOptionsFromModule,
29
+ processOptions,
30
+ } = require("./eslint-helpers");
31
+ const { WarningService } = require("../services/warning-service");
32
+ const timing = require("../linter/timing");
33
+
34
+ const depsLoadedTime = hrtimeBigint();
35
+
36
+ //------------------------------------------------------------------------------
37
+ // Typedefs
38
+ //------------------------------------------------------------------------------
39
+
40
+ /** @typedef {import("../types").ESLint.LintResult} LintResult */
41
+ /** @typedef {import("../types").ESLint.Options} ESLintOptions */
42
+ /** @typedef {LintResult & { index?: number; }} IndexedLintResult */
43
+ /** @typedef {IndexedLintResult[] & { netLintingDuration: bigint; timings?: Record<string, number>; }} WorkerLintResults */
44
+ /**
45
+ * @typedef {Object} WorkerData - Data passed to the worker thread.
46
+ * @property {ESLintOptions | string} eslintOptionsOrURL - The unprocessed ESLint options or the URL of the options module.
47
+ * @property {Uint32Array<SharedArrayBuffer>} filePathIndexArray - Shared counter used to track the next file to lint.
48
+ * @property {string[]} filePaths - File paths to lint.
49
+ */
50
+
51
+ //------------------------------------------------------------------------------
52
+ // Helpers
53
+ //------------------------------------------------------------------------------
54
+
55
+ const debug = createDebug(`eslint:worker:thread-${threadId}`);
56
+
57
+ //------------------------------------------------------------------------------
58
+ // Main
59
+ //------------------------------------------------------------------------------
60
+
61
+ /*
62
+ * Prevent timing module from printing profiling output from worker threads.
63
+ * The main thread is responsible for displaying any aggregated timings.
64
+ */
65
+ timing.disableDisplay();
66
+
67
+ debug("Dependencies loaded in %t", depsLoadedTime - startTime);
68
+
69
+ (async () => {
70
+ /** @type {WorkerData} */
71
+ const { eslintOptionsOrURL, filePathIndexArray, filePaths } = workerData;
72
+ const eslintOptions =
73
+ typeof eslintOptionsOrURL === "object"
74
+ ? eslintOptionsOrURL
75
+ : await loadOptionsFromModule(eslintOptionsOrURL);
76
+ const processedESLintOptions = processOptions(eslintOptions);
77
+
78
+ const warningService = new WarningService();
79
+
80
+ // These warnings are always emitted by the controlling thread.
81
+ warningService.emitEmptyConfigWarning =
82
+ warningService.emitInactiveFlagWarning = () => {};
83
+
84
+ const linter = createLinter(processedESLintOptions, warningService);
85
+
86
+ const cacheFilePath = getCacheFile(
87
+ processedESLintOptions.cacheLocation,
88
+ processedESLintOptions.cwd,
89
+ );
90
+
91
+ const lintResultCache = createLintResultCache(
92
+ processedESLintOptions,
93
+ cacheFilePath,
94
+ );
95
+ const defaultConfigs = createDefaultConfigs(eslintOptions.plugins);
96
+
97
+ const configLoader = createConfigLoader(
98
+ processedESLintOptions,
99
+ defaultConfigs,
100
+ linter,
101
+ warningService,
102
+ );
103
+
104
+ /** @type {WorkerLintResults} */
105
+ const indexedResults = [];
106
+ let loadConfigTotalDuration = 0n;
107
+ const readFileCounter = { duration: 0n };
108
+
109
+ const lintingStartTime = hrtimeBigint();
110
+ debug(
111
+ "Linting started %t after dependencies loaded",
112
+ lintingStartTime - depsLoadedTime,
113
+ );
114
+
115
+ for (;;) {
116
+ const fileLintingStartTime = hrtimeBigint();
117
+
118
+ // It seems hard to produce an arithmetic overflow under realistic conditions here.
119
+ const index = Atomics.add(filePathIndexArray, 0, 1);
120
+
121
+ const filePath = filePaths[index];
122
+ if (!filePath) {
123
+ break;
124
+ }
125
+
126
+ const loadConfigEnterTime = hrtimeBigint();
127
+ const configs = await configLoader.loadConfigArrayForFile(filePath);
128
+ const loadConfigExitTime = hrtimeBigint();
129
+ const loadConfigDuration = loadConfigExitTime - loadConfigEnterTime;
130
+ debug(
131
+ 'Config array for file "%s" loaded in %t',
132
+ filePath,
133
+ loadConfigDuration,
134
+ );
135
+ loadConfigTotalDuration += loadConfigDuration;
136
+
137
+ /** @type {IndexedLintResult} */
138
+ const result = await lintFile(
139
+ filePath,
140
+ configs,
141
+ processedESLintOptions,
142
+ linter,
143
+ lintResultCache,
144
+ readFileCounter,
145
+ );
146
+ if (result) {
147
+ result.index = index;
148
+ indexedResults.push(result);
149
+ }
150
+
151
+ const fileLintingEndTime = hrtimeBigint();
152
+ debug(
153
+ 'File "%s" processed in %t',
154
+ filePath,
155
+ fileLintingEndTime - fileLintingStartTime,
156
+ );
157
+ }
158
+
159
+ const lintingDuration = hrtimeBigint() - lintingStartTime;
160
+
161
+ /*
162
+ * The net linting duration is the total linting time minus the time spent loading configs and reading files.
163
+ * It captures the processing time dedicated to computation-intensive tasks that are highly parallelizable and not repeated across threads.
164
+ */
165
+ indexedResults.netLintingDuration =
166
+ lintingDuration - loadConfigTotalDuration - readFileCounter.duration;
167
+
168
+ if (timing.enabled) {
169
+ indexedResults.timings = timing.getData();
170
+ }
171
+
172
+ parentPort.postMessage(indexedResults);
173
+ })();
@@ -0,0 +1,336 @@
1
+ /**
2
+ * @fileoverview JavaScript Language Object
3
+ * @author Nicholas C. Zakas
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //-----------------------------------------------------------------------------
9
+ // Requirements
10
+ //-----------------------------------------------------------------------------
11
+
12
+ const { SourceCode } = require("./source-code");
13
+ const createDebug = require("debug");
14
+ const astUtils = require("../../shared/ast-utils");
15
+ const espree = require("espree");
16
+ const eslintScope = require("eslint-scope");
17
+ const evk = require("eslint-visitor-keys");
18
+ const { validateLanguageOptions } = require("./validate-language-options");
19
+ const { LATEST_ECMA_VERSION } = require("../../../conf/ecma-version");
20
+
21
+ //-----------------------------------------------------------------------------
22
+ // Type Definitions
23
+ //-----------------------------------------------------------------------------
24
+
25
+ /** @typedef {import("@eslint/core").File} File */
26
+ /** @typedef {import("@eslint/core").Language} Language */
27
+ /** @typedef {import("@eslint/core").OkParseResult} OkParseResult */
28
+ /** @typedef {import("../../types").Linter.LanguageOptions} JSLanguageOptions */
29
+
30
+ //-----------------------------------------------------------------------------
31
+ // Helpers
32
+ //-----------------------------------------------------------------------------
33
+
34
+ const debug = createDebug("eslint:languages:js");
35
+ const DEFAULT_ECMA_VERSION = 5;
36
+ const parserSymbol = Symbol.for("eslint.RuleTester.parser");
37
+
38
+ /**
39
+ * Analyze scope of the given AST.
40
+ * @param {ASTNode} ast The `Program` node to analyze.
41
+ * @param {JSLanguageOptions} languageOptions The parser options.
42
+ * @param {Record<string, string[]>} visitorKeys The visitor keys.
43
+ * @returns {ScopeManager} The analysis result.
44
+ */
45
+ function analyzeScope(ast, languageOptions, visitorKeys) {
46
+ const parserOptions = languageOptions.parserOptions;
47
+ const ecmaFeatures = parserOptions.ecmaFeatures || {};
48
+ const ecmaVersion = languageOptions.ecmaVersion || DEFAULT_ECMA_VERSION;
49
+
50
+ return eslintScope.analyze(ast, {
51
+ ignoreEval: true,
52
+ nodejsScope: ecmaFeatures.globalReturn,
53
+ impliedStrict: ecmaFeatures.impliedStrict,
54
+ ecmaVersion: typeof ecmaVersion === "number" ? ecmaVersion : 6,
55
+ sourceType: languageOptions.sourceType || "script",
56
+ childVisitorKeys: visitorKeys || evk.KEYS,
57
+ fallback: evk.getKeys,
58
+ jsx: ecmaFeatures.jsx,
59
+ });
60
+ }
61
+
62
+ /**
63
+ * Determines if a given object is Espree.
64
+ * @param {Object} parser The parser to check.
65
+ * @returns {boolean} True if the parser is Espree or false if not.
66
+ */
67
+ function isEspree(parser) {
68
+ return !!(parser === espree || parser[parserSymbol] === espree);
69
+ }
70
+
71
+ /**
72
+ * Normalize ECMAScript version from the initial config into languageOptions (year)
73
+ * format.
74
+ * @param {any} [ecmaVersion] ECMAScript version from the initial config
75
+ * @returns {number} normalized ECMAScript version
76
+ */
77
+ function normalizeEcmaVersionForLanguageOptions(ecmaVersion) {
78
+ switch (ecmaVersion) {
79
+ case 3:
80
+ return 3;
81
+
82
+ // void 0 = no ecmaVersion specified so use the default
83
+ case 5:
84
+ case void 0:
85
+ return 5;
86
+
87
+ default:
88
+ if (typeof ecmaVersion === "number") {
89
+ return ecmaVersion >= 2015 ? ecmaVersion : ecmaVersion + 2009;
90
+ }
91
+ }
92
+
93
+ /*
94
+ * We default to the latest supported ecmaVersion for everything else.
95
+ * Remember, this is for languageOptions.ecmaVersion, which sets the version
96
+ * that is used for a number of processes inside of ESLint. It's normally
97
+ * safe to assume people want the latest unless otherwise specified.
98
+ */
99
+ return LATEST_ECMA_VERSION;
100
+ }
101
+
102
+ //-----------------------------------------------------------------------------
103
+ // Exports
104
+ //-----------------------------------------------------------------------------
105
+
106
+ /**
107
+ * @type {Language}
108
+ */
109
+ module.exports = {
110
+ fileType: "text",
111
+ lineStart: 1,
112
+ columnStart: 0,
113
+ nodeTypeKey: "type",
114
+ visitorKeys: evk.KEYS,
115
+
116
+ defaultLanguageOptions: {
117
+ sourceType: "module",
118
+ ecmaVersion: "latest",
119
+ parser: espree,
120
+ parserOptions: {},
121
+ },
122
+
123
+ validateLanguageOptions,
124
+
125
+ /**
126
+ * Normalizes the language options.
127
+ * @param {Object} languageOptions The language options to normalize.
128
+ * @returns {Object} The normalized language options.
129
+ */
130
+ normalizeLanguageOptions(languageOptions) {
131
+ languageOptions.ecmaVersion = normalizeEcmaVersionForLanguageOptions(
132
+ languageOptions.ecmaVersion,
133
+ );
134
+
135
+ // Espree expects this information to be passed in
136
+ if (isEspree(languageOptions.parser)) {
137
+ const parserOptions = languageOptions.parserOptions;
138
+
139
+ if (languageOptions.sourceType) {
140
+ parserOptions.sourceType = languageOptions.sourceType;
141
+
142
+ if (
143
+ parserOptions.sourceType === "module" &&
144
+ parserOptions.ecmaFeatures &&
145
+ parserOptions.ecmaFeatures.globalReturn
146
+ ) {
147
+ parserOptions.ecmaFeatures.globalReturn = false;
148
+ }
149
+ }
150
+ }
151
+
152
+ return languageOptions;
153
+ },
154
+
155
+ /**
156
+ * Determines if a given node matches a given selector class.
157
+ * @param {string} className The class name to check.
158
+ * @param {ASTNode} node The node to check.
159
+ * @param {Array<ASTNode>} ancestry The ancestry of the node.
160
+ * @returns {boolean} True if there's a match, false if not.
161
+ * @throws {Error} When an unknown class name is passed.
162
+ */
163
+ matchesSelectorClass(className, node, ancestry) {
164
+ /*
165
+ * Copyright (c) 2013, Joel Feenstra
166
+ * All rights reserved.
167
+ *
168
+ * Redistribution and use in source and binary forms, with or without
169
+ * modification, are permitted provided that the following conditions are met:
170
+ * * Redistributions of source code must retain the above copyright
171
+ * notice, this list of conditions and the following disclaimer.
172
+ * * Redistributions in binary form must reproduce the above copyright
173
+ * notice, this list of conditions and the following disclaimer in the
174
+ * documentation and/or other materials provided with the distribution.
175
+ * * Neither the name of the ESQuery nor the names of its contributors may
176
+ * be used to endorse or promote products derived from this software without
177
+ * specific prior written permission.
178
+ *
179
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
180
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
181
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
182
+ * DISCLAIMED. IN NO EVENT SHALL JOEL FEENSTRA BE LIABLE FOR ANY
183
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
184
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
185
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
186
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
187
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
188
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
189
+ */
190
+
191
+ switch (className.toLowerCase()) {
192
+ case "statement":
193
+ if (node.type.slice(-9) === "Statement") {
194
+ return true;
195
+ }
196
+
197
+ // fallthrough: interface Declaration <: Statement { }
198
+
199
+ case "declaration":
200
+ return node.type.slice(-11) === "Declaration";
201
+
202
+ case "pattern":
203
+ if (node.type.slice(-7) === "Pattern") {
204
+ return true;
205
+ }
206
+
207
+ // fallthrough: interface Expression <: Node, Pattern { }
208
+
209
+ case "expression":
210
+ return (
211
+ node.type.slice(-10) === "Expression" ||
212
+ node.type.slice(-7) === "Literal" ||
213
+ (node.type === "Identifier" &&
214
+ (ancestry.length === 0 ||
215
+ ancestry[0].type !== "MetaProperty")) ||
216
+ node.type === "MetaProperty"
217
+ );
218
+
219
+ case "function":
220
+ return (
221
+ node.type === "FunctionDeclaration" ||
222
+ node.type === "FunctionExpression" ||
223
+ node.type === "ArrowFunctionExpression"
224
+ );
225
+
226
+ default:
227
+ throw new Error(`Unknown class name: ${className}`);
228
+ }
229
+ },
230
+
231
+ /**
232
+ * Parses the given file into an AST.
233
+ * @param {File} file The virtual file to parse.
234
+ * @param {Object} options Additional options passed from ESLint.
235
+ * @param {JSLanguageOptions} options.languageOptions The language options.
236
+ * @returns {Object} The result of parsing.
237
+ */
238
+ parse(file, { languageOptions }) {
239
+ // Note: BOM already removed
240
+ const { body: text, path: filePath } = file;
241
+ const textToParse = text.replace(
242
+ astUtils.shebangPattern,
243
+ (match, captured) => `//${captured}`,
244
+ );
245
+ const { ecmaVersion, sourceType, parser } = languageOptions;
246
+ const parserOptions = Object.assign(
247
+ { ecmaVersion, sourceType },
248
+ languageOptions.parserOptions,
249
+ {
250
+ loc: true,
251
+ range: true,
252
+ tokens: true,
253
+ comment: true,
254
+ eslintVisitorKeys: true,
255
+ eslintScopeManager: true,
256
+ filePath,
257
+ },
258
+ );
259
+
260
+ /*
261
+ * Check for parsing errors first. If there's a parsing error, nothing
262
+ * else can happen. However, a parsing error does not throw an error
263
+ * from this method - it's just considered a fatal error message, a
264
+ * problem that ESLint identified just like any other.
265
+ */
266
+ try {
267
+ debug("Parsing:", filePath);
268
+ const parseResult =
269
+ typeof parser.parseForESLint === "function"
270
+ ? parser.parseForESLint(textToParse, parserOptions)
271
+ : { ast: parser.parse(textToParse, parserOptions) };
272
+
273
+ debug("Parsing successful:", filePath);
274
+
275
+ const {
276
+ ast,
277
+ services: parserServices = {},
278
+ visitorKeys = evk.KEYS,
279
+ scopeManager,
280
+ } = parseResult;
281
+
282
+ return {
283
+ ok: true,
284
+ ast,
285
+ parserServices,
286
+ visitorKeys,
287
+ scopeManager,
288
+ };
289
+ } catch (ex) {
290
+ // If the message includes a leading line number, strip it:
291
+ const message = ex.message.replace(/^line \d+:/iu, "").trim();
292
+
293
+ debug("%s\n%s", message, ex.stack);
294
+
295
+ return {
296
+ ok: false,
297
+ errors: [
298
+ {
299
+ message,
300
+ line: ex.lineNumber,
301
+ column: ex.column,
302
+ },
303
+ ],
304
+ };
305
+ }
306
+ },
307
+
308
+ /**
309
+ * Creates a new `SourceCode` object from the given information.
310
+ * @param {File} file The virtual file to create a `SourceCode` object from.
311
+ * @param {OkParseResult} parseResult The result returned from `parse()`.
312
+ * @param {Object} options Additional options passed from ESLint.
313
+ * @param {JSLanguageOptions} options.languageOptions The language options.
314
+ * @returns {SourceCode} The new `SourceCode` object.
315
+ */
316
+ createSourceCode(file, parseResult, { languageOptions }) {
317
+ const { body: text, path: filePath, bom: hasBOM } = file;
318
+ const { ast, parserServices, visitorKeys } = parseResult;
319
+
320
+ debug("Scope analysis:", filePath);
321
+ const scopeManager =
322
+ parseResult.scopeManager ||
323
+ analyzeScope(ast, languageOptions, visitorKeys);
324
+
325
+ debug("Scope analysis successful:", filePath);
326
+
327
+ return new SourceCode({
328
+ text,
329
+ ast,
330
+ hasBOM,
331
+ parserServices,
332
+ scopeManager,
333
+ visitorKeys,
334
+ });
335
+ },
336
+ };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ const SourceCode = require("./source-code");
4
+
5
+ module.exports = {
6
+ SourceCode,
7
+ };