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,117 @@
1
+ /**
2
+ * @fileoverview A rule to disallow duplicate name in class members.
3
+ * @author Toru Nagashima
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const astUtils = require("./utils/ast-utils");
9
+
10
+ //------------------------------------------------------------------------------
11
+ // Rule Definition
12
+ //------------------------------------------------------------------------------
13
+
14
+ /** @type {import('../types').Rule.RuleModule} */
15
+ module.exports = {
16
+ meta: {
17
+ type: "problem",
18
+ dialects: ["javascript", "typescript"],
19
+ language: "javascript",
20
+
21
+ docs: {
22
+ description: "Disallow duplicate class members",
23
+ recommended: true,
24
+ url: "https://eslint.org/docs/latest/rules/no-dupe-class-members",
25
+ },
26
+
27
+ schema: [],
28
+
29
+ messages: {
30
+ unexpected: "Duplicate name '{{name}}'.",
31
+ },
32
+ },
33
+
34
+ create(context) {
35
+ let stack = [];
36
+
37
+ /**
38
+ * Gets state of a given member name.
39
+ * @param {string} name A name of a member.
40
+ * @param {boolean} isStatic A flag which specifies that is a static member.
41
+ * @returns {Object} A state of a given member name.
42
+ * - retv.init {boolean} A flag which shows the name is declared as normal member.
43
+ * - retv.get {boolean} A flag which shows the name is declared as getter.
44
+ * - retv.set {boolean} A flag which shows the name is declared as setter.
45
+ */
46
+ function getState(name, isStatic) {
47
+ const stateMap = stack.at(-1);
48
+ const key = `$${name}`; // to avoid "__proto__".
49
+
50
+ if (!stateMap[key]) {
51
+ stateMap[key] = {
52
+ nonStatic: { init: false, get: false, set: false },
53
+ static: { init: false, get: false, set: false },
54
+ };
55
+ }
56
+
57
+ return stateMap[key][isStatic ? "static" : "nonStatic"];
58
+ }
59
+
60
+ return {
61
+ // Initializes the stack of state of member declarations.
62
+ Program() {
63
+ stack = [];
64
+ },
65
+
66
+ // Initializes state of member declarations for the class.
67
+ ClassBody() {
68
+ stack.push(Object.create(null));
69
+ },
70
+
71
+ // Disposes the state for the class.
72
+ "ClassBody:exit"() {
73
+ stack.pop();
74
+ },
75
+
76
+ // Reports the node if its name has been declared already.
77
+ "MethodDefinition, PropertyDefinition"(node) {
78
+ if (
79
+ node.value &&
80
+ node.value.type === "TSEmptyBodyFunctionExpression"
81
+ ) {
82
+ return;
83
+ }
84
+
85
+ const name = astUtils.getStaticPropertyName(node);
86
+ const kind =
87
+ node.type === "MethodDefinition" ? node.kind : "field";
88
+
89
+ if (name === null || kind === "constructor") {
90
+ return;
91
+ }
92
+
93
+ const state = getState(name, node.static);
94
+ let isDuplicate;
95
+
96
+ if (kind === "get") {
97
+ isDuplicate = state.init || state.get;
98
+ state.get = true;
99
+ } else if (kind === "set") {
100
+ isDuplicate = state.init || state.set;
101
+ state.set = true;
102
+ } else {
103
+ isDuplicate = state.init || state.get || state.set;
104
+ state.init = true;
105
+ }
106
+
107
+ if (isDuplicate) {
108
+ context.report({
109
+ loc: node.key.loc,
110
+ messageId: "unexpected",
111
+ data: { name },
112
+ });
113
+ }
114
+ },
115
+ };
116
+ },
117
+ };
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @fileoverview Rule to disallow duplicate conditions in if-else-if chains
3
+ * @author Milos Djermanovic
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Determines whether the first given array is a subset of the second given array.
20
+ * @param {Function} comparator A function to compare two elements, should return `true` if they are equal.
21
+ * @param {Array} arrA The array to compare from.
22
+ * @param {Array} arrB The array to compare against.
23
+ * @returns {boolean} `true` if the array `arrA` is a subset of the array `arrB`.
24
+ */
25
+ function isSubsetByComparator(comparator, arrA, arrB) {
26
+ return arrA.every(a => arrB.some(b => comparator(a, b)));
27
+ }
28
+
29
+ /**
30
+ * Splits the given node by the given logical operator.
31
+ * @param {string} operator Logical operator `||` or `&&`.
32
+ * @param {ASTNode} node The node to split.
33
+ * @returns {ASTNode[]} Array of conditions that makes the node when joined by the operator.
34
+ */
35
+ function splitByLogicalOperator(operator, node) {
36
+ if (node.type === "LogicalExpression" && node.operator === operator) {
37
+ return [
38
+ ...splitByLogicalOperator(operator, node.left),
39
+ ...splitByLogicalOperator(operator, node.right),
40
+ ];
41
+ }
42
+ return [node];
43
+ }
44
+
45
+ const splitByOr = splitByLogicalOperator.bind(null, "||");
46
+ const splitByAnd = splitByLogicalOperator.bind(null, "&&");
47
+
48
+ //------------------------------------------------------------------------------
49
+ // Rule Definition
50
+ //------------------------------------------------------------------------------
51
+
52
+ /** @type {import('../types').Rule.RuleModule} */
53
+ module.exports = {
54
+ meta: {
55
+ type: "problem",
56
+
57
+ docs: {
58
+ description: "Disallow duplicate conditions in if-else-if chains",
59
+ recommended: true,
60
+ url: "https://eslint.org/docs/latest/rules/no-dupe-else-if",
61
+ },
62
+
63
+ schema: [],
64
+
65
+ messages: {
66
+ unexpected:
67
+ "This branch can never execute. Its condition is a duplicate or covered by previous conditions in the if-else-if chain.",
68
+ },
69
+ },
70
+
71
+ create(context) {
72
+ const sourceCode = context.sourceCode;
73
+
74
+ /**
75
+ * Determines whether the two given nodes are considered to be equal. In particular, given that the nodes
76
+ * represent expressions in a boolean context, `||` and `&&` can be considered as commutative operators.
77
+ * @param {ASTNode} a First node.
78
+ * @param {ASTNode} b Second node.
79
+ * @returns {boolean} `true` if the nodes are considered to be equal.
80
+ */
81
+ function equal(a, b) {
82
+ if (a.type !== b.type) {
83
+ return false;
84
+ }
85
+
86
+ if (
87
+ a.type === "LogicalExpression" &&
88
+ (a.operator === "||" || a.operator === "&&") &&
89
+ a.operator === b.operator
90
+ ) {
91
+ return (
92
+ (equal(a.left, b.left) && equal(a.right, b.right)) ||
93
+ (equal(a.left, b.right) && equal(a.right, b.left))
94
+ );
95
+ }
96
+
97
+ return astUtils.equalTokens(a, b, sourceCode);
98
+ }
99
+
100
+ const isSubset = isSubsetByComparator.bind(null, equal);
101
+
102
+ return {
103
+ IfStatement(node) {
104
+ const test = node.test,
105
+ conditionsToCheck =
106
+ test.type === "LogicalExpression" &&
107
+ test.operator === "&&"
108
+ ? [test, ...splitByAnd(test)]
109
+ : [test];
110
+ let current = node,
111
+ listToCheck = conditionsToCheck.map(c =>
112
+ splitByOr(c).map(splitByAnd),
113
+ );
114
+
115
+ while (
116
+ current.parent &&
117
+ current.parent.type === "IfStatement" &&
118
+ current.parent.alternate === current
119
+ ) {
120
+ current = current.parent;
121
+
122
+ const currentOrOperands = splitByOr(current.test).map(
123
+ splitByAnd,
124
+ );
125
+
126
+ listToCheck = listToCheck.map(orOperands =>
127
+ orOperands.filter(
128
+ orOperand =>
129
+ !currentOrOperands.some(currentOrOperand =>
130
+ isSubset(currentOrOperand, orOperand),
131
+ ),
132
+ ),
133
+ );
134
+
135
+ if (
136
+ listToCheck.some(orOperands => orOperands.length === 0)
137
+ ) {
138
+ context.report({ node: test, messageId: "unexpected" });
139
+ break;
140
+ }
141
+ }
142
+ },
143
+ };
144
+ },
145
+ };
@@ -0,0 +1,165 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of duplicate keys in an object.
3
+ * @author Ian Christian Myers
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ const GET_KIND = /^(?:init|get)$/u;
19
+ const SET_KIND = /^(?:init|set)$/u;
20
+
21
+ /**
22
+ * The class which stores properties' information of an object.
23
+ */
24
+ class ObjectInfo {
25
+ /**
26
+ * @param {ObjectInfo|null} upper The information of the outer object.
27
+ * @param {ASTNode} node The ObjectExpression node of this information.
28
+ */
29
+ constructor(upper, node) {
30
+ this.upper = upper;
31
+ this.node = node;
32
+ this.properties = new Map();
33
+ }
34
+
35
+ /**
36
+ * Gets the information of the given Property node.
37
+ * @param {ASTNode} node The Property node to get.
38
+ * @returns {{get: boolean, set: boolean}} The information of the property.
39
+ */
40
+ getPropertyInfo(node) {
41
+ const name = astUtils.getStaticPropertyName(node);
42
+
43
+ if (!this.properties.has(name)) {
44
+ this.properties.set(name, { get: false, set: false });
45
+ }
46
+ return this.properties.get(name);
47
+ }
48
+
49
+ /**
50
+ * Checks whether the given property has been defined already or not.
51
+ * @param {ASTNode} node The Property node to check.
52
+ * @returns {boolean} `true` if the property has been defined.
53
+ */
54
+ isPropertyDefined(node) {
55
+ const entry = this.getPropertyInfo(node);
56
+
57
+ return (
58
+ (GET_KIND.test(node.kind) && entry.get) ||
59
+ (SET_KIND.test(node.kind) && entry.set)
60
+ );
61
+ }
62
+
63
+ /**
64
+ * Defines the given property.
65
+ * @param {ASTNode} node The Property node to define.
66
+ * @returns {void}
67
+ */
68
+ defineProperty(node) {
69
+ const entry = this.getPropertyInfo(node);
70
+
71
+ if (GET_KIND.test(node.kind)) {
72
+ entry.get = true;
73
+ }
74
+ if (SET_KIND.test(node.kind)) {
75
+ entry.set = true;
76
+ }
77
+ }
78
+ }
79
+
80
+ //------------------------------------------------------------------------------
81
+ // Rule Definition
82
+ //------------------------------------------------------------------------------
83
+
84
+ /** @type {import('../types').Rule.RuleModule} */
85
+ module.exports = {
86
+ meta: {
87
+ type: "problem",
88
+
89
+ docs: {
90
+ description: "Disallow duplicate keys in object literals",
91
+ recommended: true,
92
+ url: "https://eslint.org/docs/latest/rules/no-dupe-keys",
93
+ },
94
+
95
+ schema: [],
96
+
97
+ messages: {
98
+ unexpected: "Duplicate key '{{name}}'.",
99
+ },
100
+ },
101
+
102
+ create(context) {
103
+ let info = null;
104
+
105
+ return {
106
+ ObjectExpression(node) {
107
+ info = new ObjectInfo(info, node);
108
+ },
109
+ "ObjectExpression:exit"() {
110
+ info = info.upper;
111
+ },
112
+
113
+ Property(node) {
114
+ const name = astUtils.getStaticPropertyName(node);
115
+
116
+ // Skip destructuring.
117
+ if (node.parent.type !== "ObjectExpression") {
118
+ return;
119
+ }
120
+
121
+ // Skip if the name is not static.
122
+ if (name === null) {
123
+ return;
124
+ }
125
+
126
+ /*
127
+ * Skip if the property node is a proto setter.
128
+ * Proto setter is a special syntax that sets
129
+ * object's prototype instead of creating a property.
130
+ * It can be in one of the following forms:
131
+ *
132
+ * __proto__: <expression>
133
+ * '__proto__': <expression>
134
+ * "__proto__": <expression>
135
+ *
136
+ * Duplicate proto setters produce parsing errors,
137
+ * so we can just skip them to not interfere with
138
+ * regular properties named "__proto__".
139
+ */
140
+ if (
141
+ name === "__proto__" &&
142
+ node.kind === "init" &&
143
+ !node.computed &&
144
+ !node.shorthand &&
145
+ !node.method
146
+ ) {
147
+ return;
148
+ }
149
+
150
+ // Reports if the name is defined already.
151
+ if (info.isPropertyDefined(node)) {
152
+ context.report({
153
+ node: info.node,
154
+ loc: node.key.loc,
155
+ messageId: "unexpected",
156
+ data: { name },
157
+ });
158
+ }
159
+
160
+ // Update info.
161
+ info.defineProperty(node);
162
+ },
163
+ };
164
+ },
165
+ };
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @fileoverview Rule to disallow a duplicate case label.
3
+ * @author Dieter Oberkofler
4
+ * @author Burak Yigit Kaya
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const astUtils = require("./utils/ast-utils");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Rule Definition
17
+ //------------------------------------------------------------------------------
18
+
19
+ /** @type {import('../types').Rule.RuleModule} */
20
+ module.exports = {
21
+ meta: {
22
+ type: "problem",
23
+
24
+ docs: {
25
+ description: "Disallow duplicate case labels",
26
+ recommended: true,
27
+ url: "https://eslint.org/docs/latest/rules/no-duplicate-case",
28
+ },
29
+
30
+ schema: [],
31
+
32
+ messages: {
33
+ unexpected: "Duplicate case label.",
34
+ },
35
+ },
36
+
37
+ create(context) {
38
+ const sourceCode = context.sourceCode;
39
+
40
+ /**
41
+ * Determines whether the two given nodes are considered to be equal.
42
+ * @param {ASTNode} a First node.
43
+ * @param {ASTNode} b Second node.
44
+ * @returns {boolean} `true` if the nodes are considered to be equal.
45
+ */
46
+ function equal(a, b) {
47
+ if (a.type !== b.type) {
48
+ return false;
49
+ }
50
+
51
+ return astUtils.equalTokens(a, b, sourceCode);
52
+ }
53
+ return {
54
+ SwitchStatement(node) {
55
+ const previousTests = [];
56
+
57
+ for (const switchCase of node.cases) {
58
+ if (switchCase.test) {
59
+ const test = switchCase.test;
60
+
61
+ if (
62
+ previousTests.some(previousTest =>
63
+ equal(previousTest, test),
64
+ )
65
+ ) {
66
+ context.report({
67
+ node: switchCase,
68
+ messageId: "unexpected",
69
+ });
70
+ } else {
71
+ previousTests.push(test);
72
+ }
73
+ }
74
+ }
75
+ },
76
+ };
77
+ },
78
+ };