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,224 @@
1
+ /**
2
+ * @fileoverview Rule to flag unnecessary bind calls
3
+ * @author Bence Dányi <bence@danyi.me>
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ const astUtils = require("./utils/ast-utils");
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Helpers
15
+ //------------------------------------------------------------------------------
16
+
17
+ const SIDE_EFFECT_FREE_NODE_TYPES = new Set([
18
+ "Literal",
19
+ "Identifier",
20
+ "ThisExpression",
21
+ "FunctionExpression",
22
+ ]);
23
+
24
+ //------------------------------------------------------------------------------
25
+ // Rule Definition
26
+ //------------------------------------------------------------------------------
27
+
28
+ /** @type {import('../types').Rule.RuleModule} */
29
+ module.exports = {
30
+ meta: {
31
+ type: "suggestion",
32
+
33
+ docs: {
34
+ description: "Disallow unnecessary calls to `.bind()`",
35
+ recommended: false,
36
+ url: "https://eslint.org/docs/latest/rules/no-extra-bind",
37
+ },
38
+
39
+ schema: [],
40
+ fixable: "code",
41
+
42
+ messages: {
43
+ unexpected: "The function binding is unnecessary.",
44
+ },
45
+ },
46
+
47
+ create(context) {
48
+ const sourceCode = context.sourceCode;
49
+ let scopeInfo = null;
50
+
51
+ /**
52
+ * Checks if a node is free of side effects.
53
+ *
54
+ * This check is stricter than it needs to be, in order to keep the implementation simple.
55
+ * @param {ASTNode} node A node to check.
56
+ * @returns {boolean} True if the node is known to be side-effect free, false otherwise.
57
+ */
58
+ function isSideEffectFree(node) {
59
+ return SIDE_EFFECT_FREE_NODE_TYPES.has(node.type);
60
+ }
61
+
62
+ /**
63
+ * Reports a given function node.
64
+ * @param {ASTNode} node A node to report. This is a FunctionExpression or
65
+ * an ArrowFunctionExpression.
66
+ * @returns {void}
67
+ */
68
+ function report(node) {
69
+ const memberNode = node.parent;
70
+ const callNode =
71
+ memberNode.parent.type === "ChainExpression"
72
+ ? memberNode.parent.parent
73
+ : memberNode.parent;
74
+
75
+ context.report({
76
+ node: callNode,
77
+ messageId: "unexpected",
78
+ loc: memberNode.property.loc,
79
+
80
+ fix(fixer) {
81
+ if (!isSideEffectFree(callNode.arguments[0])) {
82
+ return null;
83
+ }
84
+
85
+ /*
86
+ * The list of the first/last token pair of a removal range.
87
+ * This is two parts because closing parentheses may exist between the method name and arguments.
88
+ * E.g. `(function(){}.bind ) (obj)`
89
+ * ^^^^^ ^^^^^ < removal ranges
90
+ * E.g. `(function(){}?.['bind'] ) ?.(obj)`
91
+ * ^^^^^^^^^^ ^^^^^^^ < removal ranges
92
+ */
93
+ const tokenPairs = [
94
+ [
95
+ // `.`, `?.`, or `[` token.
96
+ sourceCode.getTokenAfter(
97
+ memberNode.object,
98
+ astUtils.isNotClosingParenToken,
99
+ ),
100
+
101
+ // property name or `]` token.
102
+ sourceCode.getLastToken(memberNode),
103
+ ],
104
+ [
105
+ // `?.` or `(` token of arguments.
106
+ sourceCode.getTokenAfter(
107
+ memberNode,
108
+ astUtils.isNotClosingParenToken,
109
+ ),
110
+
111
+ // `)` token of arguments.
112
+ sourceCode.getLastToken(callNode),
113
+ ],
114
+ ];
115
+ const firstTokenToRemove = tokenPairs[0][0];
116
+ const lastTokenToRemove = tokenPairs[1][1];
117
+
118
+ if (
119
+ sourceCode.commentsExistBetween(
120
+ firstTokenToRemove,
121
+ lastTokenToRemove,
122
+ )
123
+ ) {
124
+ return null;
125
+ }
126
+
127
+ return tokenPairs.map(([start, end]) =>
128
+ fixer.removeRange([start.range[0], end.range[1]]),
129
+ );
130
+ },
131
+ });
132
+ }
133
+
134
+ /**
135
+ * Checks whether or not a given function node is the callee of `.bind()`
136
+ * method.
137
+ *
138
+ * e.g. `(function() {}.bind(foo))`
139
+ * @param {ASTNode} node A node to report. This is a FunctionExpression or
140
+ * an ArrowFunctionExpression.
141
+ * @returns {boolean} `true` if the node is the callee of `.bind()` method.
142
+ */
143
+ function isCalleeOfBindMethod(node) {
144
+ if (!astUtils.isSpecificMemberAccess(node.parent, null, "bind")) {
145
+ return false;
146
+ }
147
+
148
+ // The node of `*.bind` member access.
149
+ const bindNode =
150
+ node.parent.parent.type === "ChainExpression"
151
+ ? node.parent.parent
152
+ : node.parent;
153
+
154
+ return (
155
+ bindNode.parent.type === "CallExpression" &&
156
+ bindNode.parent.callee === bindNode &&
157
+ bindNode.parent.arguments.length === 1 &&
158
+ bindNode.parent.arguments[0].type !== "SpreadElement"
159
+ );
160
+ }
161
+
162
+ /**
163
+ * Adds a scope information object to the stack.
164
+ * @param {ASTNode} node A node to add. This node is a FunctionExpression
165
+ * or a FunctionDeclaration node.
166
+ * @returns {void}
167
+ */
168
+ function enterFunction(node) {
169
+ scopeInfo = {
170
+ isBound: isCalleeOfBindMethod(node),
171
+ thisFound: false,
172
+ upper: scopeInfo,
173
+ };
174
+ }
175
+
176
+ /**
177
+ * Removes the scope information object from the top of the stack.
178
+ * At the same time, this reports the function node if the function has
179
+ * `.bind()` and the `this` keywords found.
180
+ * @param {ASTNode} node A node to remove. This node is a
181
+ * FunctionExpression or a FunctionDeclaration node.
182
+ * @returns {void}
183
+ */
184
+ function exitFunction(node) {
185
+ if (scopeInfo.isBound && !scopeInfo.thisFound) {
186
+ report(node);
187
+ }
188
+
189
+ scopeInfo = scopeInfo.upper;
190
+ }
191
+
192
+ /**
193
+ * Reports a given arrow function if the function is callee of `.bind()`
194
+ * method.
195
+ * @param {ASTNode} node A node to report. This node is an
196
+ * ArrowFunctionExpression.
197
+ * @returns {void}
198
+ */
199
+ function exitArrowFunction(node) {
200
+ if (isCalleeOfBindMethod(node)) {
201
+ report(node);
202
+ }
203
+ }
204
+
205
+ /**
206
+ * Set the mark as the `this` keyword was found in this scope.
207
+ * @returns {void}
208
+ */
209
+ function markAsThisFound() {
210
+ if (scopeInfo) {
211
+ scopeInfo.thisFound = true;
212
+ }
213
+ }
214
+
215
+ return {
216
+ "ArrowFunctionExpression:exit": exitArrowFunction,
217
+ FunctionDeclaration: enterFunction,
218
+ "FunctionDeclaration:exit": exitFunction,
219
+ FunctionExpression: enterFunction,
220
+ "FunctionExpression:exit": exitFunction,
221
+ ThisExpression: markAsThisFound,
222
+ };
223
+ },
224
+ };
@@ -0,0 +1,420 @@
1
+ /**
2
+ * @fileoverview Rule to flag unnecessary double negation in Boolean contexts
3
+ * @author Brandon Mills
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+ const eslintUtils = require("@eslint-community/eslint-utils");
14
+
15
+ const precedence = astUtils.getPrecedence;
16
+
17
+ //------------------------------------------------------------------------------
18
+ // Rule Definition
19
+ //------------------------------------------------------------------------------
20
+
21
+ /** @type {import('../types').Rule.RuleModule} */
22
+ module.exports = {
23
+ meta: {
24
+ type: "suggestion",
25
+
26
+ defaultOptions: [{}],
27
+
28
+ docs: {
29
+ description: "Disallow unnecessary boolean casts",
30
+ recommended: true,
31
+ frozen: true,
32
+ url: "https://eslint.org/docs/latest/rules/no-extra-boolean-cast",
33
+ },
34
+
35
+ schema: [
36
+ {
37
+ anyOf: [
38
+ {
39
+ type: "object",
40
+ properties: {
41
+ enforceForInnerExpressions: {
42
+ type: "boolean",
43
+ },
44
+ },
45
+ additionalProperties: false,
46
+ },
47
+
48
+ // deprecated
49
+ {
50
+ type: "object",
51
+ properties: {
52
+ enforceForLogicalOperands: {
53
+ type: "boolean",
54
+ },
55
+ },
56
+ additionalProperties: false,
57
+ },
58
+ ],
59
+ },
60
+ ],
61
+ fixable: "code",
62
+
63
+ messages: {
64
+ unexpectedCall: "Redundant Boolean call.",
65
+ unexpectedNegation: "Redundant double negation.",
66
+ },
67
+ },
68
+
69
+ create(context) {
70
+ const sourceCode = context.sourceCode;
71
+ const [{ enforceForLogicalOperands, enforceForInnerExpressions }] =
72
+ context.options;
73
+
74
+ // Node types which have a test which will coerce values to booleans.
75
+ const BOOLEAN_NODE_TYPES = new Set([
76
+ "IfStatement",
77
+ "DoWhileStatement",
78
+ "WhileStatement",
79
+ "ConditionalExpression",
80
+ "ForStatement",
81
+ ]);
82
+
83
+ /**
84
+ * Check if a node is a Boolean function or constructor.
85
+ * @param {ASTNode} node the node
86
+ * @returns {boolean} If the node is Boolean function or constructor
87
+ */
88
+ function isBooleanFunctionOrConstructorCall(node) {
89
+ // Boolean(<bool>) and new Boolean(<bool>)
90
+ return (
91
+ (node.type === "CallExpression" ||
92
+ node.type === "NewExpression") &&
93
+ node.callee.type === "Identifier" &&
94
+ node.callee.name === "Boolean"
95
+ );
96
+ }
97
+
98
+ /**
99
+ * Check if a node is in a context where its value would be coerced to a boolean at runtime.
100
+ * @param {ASTNode} node The node
101
+ * @returns {boolean} If it is in a boolean context
102
+ */
103
+ function isInBooleanContext(node) {
104
+ return (
105
+ (isBooleanFunctionOrConstructorCall(node.parent) &&
106
+ node === node.parent.arguments[0]) ||
107
+ (BOOLEAN_NODE_TYPES.has(node.parent.type) &&
108
+ node === node.parent.test) ||
109
+ // !<bool>
110
+ (node.parent.type === "UnaryExpression" &&
111
+ node.parent.operator === "!")
112
+ );
113
+ }
114
+
115
+ /**
116
+ * Checks whether the node is a context that should report an error
117
+ * Acts recursively if it is in a logical context
118
+ * @param {ASTNode} node the node
119
+ * @returns {boolean} If the node is in one of the flagged contexts
120
+ */
121
+ function isInFlaggedContext(node) {
122
+ if (node.parent.type === "ChainExpression") {
123
+ return isInFlaggedContext(node.parent);
124
+ }
125
+
126
+ /*
127
+ * legacy behavior - enforceForLogicalOperands will only recurse on
128
+ * logical expressions, not on other contexts.
129
+ * enforceForInnerExpressions will recurse on logical expressions
130
+ * as well as the other recursive syntaxes.
131
+ */
132
+
133
+ if (enforceForLogicalOperands || enforceForInnerExpressions) {
134
+ if (node.parent.type === "LogicalExpression") {
135
+ if (
136
+ node.parent.operator === "||" ||
137
+ node.parent.operator === "&&"
138
+ ) {
139
+ return isInFlaggedContext(node.parent);
140
+ }
141
+
142
+ // Check the right hand side of a `??` operator.
143
+ if (
144
+ enforceForInnerExpressions &&
145
+ node.parent.operator === "??" &&
146
+ node.parent.right === node
147
+ ) {
148
+ return isInFlaggedContext(node.parent);
149
+ }
150
+ }
151
+ }
152
+
153
+ if (enforceForInnerExpressions) {
154
+ if (
155
+ node.parent.type === "ConditionalExpression" &&
156
+ (node.parent.consequent === node ||
157
+ node.parent.alternate === node)
158
+ ) {
159
+ return isInFlaggedContext(node.parent);
160
+ }
161
+
162
+ /*
163
+ * Check last expression only in a sequence, i.e. if ((1, 2, Boolean(3))) {}, since
164
+ * the others don't affect the result of the expression.
165
+ */
166
+ if (
167
+ node.parent.type === "SequenceExpression" &&
168
+ node.parent.expressions.at(-1) === node
169
+ ) {
170
+ return isInFlaggedContext(node.parent);
171
+ }
172
+ }
173
+
174
+ return isInBooleanContext(node);
175
+ }
176
+
177
+ /**
178
+ * Check if a node has comments inside.
179
+ * @param {ASTNode} node The node to check.
180
+ * @returns {boolean} `true` if it has comments inside.
181
+ */
182
+ function hasCommentsInside(node) {
183
+ return Boolean(sourceCode.getCommentsInside(node).length);
184
+ }
185
+
186
+ /**
187
+ * Checks if the given node is wrapped in grouping parentheses. Parentheses for constructs such as if() don't count.
188
+ * @param {ASTNode} node The node to check.
189
+ * @returns {boolean} `true` if the node is parenthesized.
190
+ * @private
191
+ */
192
+ function isParenthesized(node) {
193
+ return eslintUtils.isParenthesized(1, node, sourceCode);
194
+ }
195
+
196
+ /**
197
+ * Determines whether the given node needs to be parenthesized when replacing the previous node.
198
+ * It assumes that `previousNode` is the node to be reported by this rule, so it has a limited list
199
+ * of possible parent node types. By the same assumption, the node's role in a particular parent is already known.
200
+ * @param {ASTNode} previousNode Previous node.
201
+ * @param {ASTNode} node The node to check.
202
+ * @throws {Error} (Unreachable.)
203
+ * @returns {boolean} `true` if the node needs to be parenthesized.
204
+ */
205
+ function needsParens(previousNode, node) {
206
+ if (previousNode.parent.type === "ChainExpression") {
207
+ return needsParens(previousNode.parent, node);
208
+ }
209
+
210
+ if (isParenthesized(previousNode)) {
211
+ // parentheses around the previous node will stay, so there is no need for an additional pair
212
+ return false;
213
+ }
214
+
215
+ // parent of the previous node will become parent of the replacement node
216
+ const parent = previousNode.parent;
217
+
218
+ switch (parent.type) {
219
+ case "CallExpression":
220
+ case "NewExpression":
221
+ return node.type === "SequenceExpression";
222
+ case "IfStatement":
223
+ case "DoWhileStatement":
224
+ case "WhileStatement":
225
+ case "ForStatement":
226
+ case "SequenceExpression":
227
+ return false;
228
+ case "ConditionalExpression":
229
+ if (previousNode === parent.test) {
230
+ return precedence(node) <= precedence(parent);
231
+ }
232
+ if (
233
+ previousNode === parent.consequent ||
234
+ previousNode === parent.alternate
235
+ ) {
236
+ return (
237
+ precedence(node) <
238
+ precedence({ type: "AssignmentExpression" })
239
+ );
240
+ }
241
+
242
+ /* c8 ignore next */
243
+ throw new Error(
244
+ "Ternary child must be test, consequent, or alternate.",
245
+ );
246
+ case "UnaryExpression":
247
+ return precedence(node) < precedence(parent);
248
+ case "LogicalExpression":
249
+ if (
250
+ astUtils.isMixedLogicalAndCoalesceExpressions(
251
+ node,
252
+ parent,
253
+ )
254
+ ) {
255
+ return true;
256
+ }
257
+ if (previousNode === parent.left) {
258
+ return precedence(node) < precedence(parent);
259
+ }
260
+ return precedence(node) <= precedence(parent);
261
+
262
+ /* c8 ignore next */
263
+ default:
264
+ throw new Error(`Unexpected parent type: ${parent.type}`);
265
+ }
266
+ }
267
+
268
+ return {
269
+ UnaryExpression(node) {
270
+ const parent = node.parent;
271
+
272
+ // Exit early if it's guaranteed not to match
273
+ if (
274
+ node.operator !== "!" ||
275
+ parent.type !== "UnaryExpression" ||
276
+ parent.operator !== "!"
277
+ ) {
278
+ return;
279
+ }
280
+
281
+ if (isInFlaggedContext(parent)) {
282
+ context.report({
283
+ node: parent,
284
+ messageId: "unexpectedNegation",
285
+ fix(fixer) {
286
+ if (hasCommentsInside(parent)) {
287
+ return null;
288
+ }
289
+
290
+ if (needsParens(parent, node.argument)) {
291
+ return fixer.replaceText(
292
+ parent,
293
+ `(${sourceCode.getText(node.argument)})`,
294
+ );
295
+ }
296
+
297
+ let prefix = "";
298
+ const tokenBefore =
299
+ sourceCode.getTokenBefore(parent);
300
+ const firstReplacementToken =
301
+ sourceCode.getFirstToken(node.argument);
302
+
303
+ if (
304
+ tokenBefore &&
305
+ tokenBefore.range[1] === parent.range[0] &&
306
+ !astUtils.canTokensBeAdjacent(
307
+ tokenBefore,
308
+ firstReplacementToken,
309
+ )
310
+ ) {
311
+ prefix = " ";
312
+ }
313
+
314
+ return fixer.replaceText(
315
+ parent,
316
+ prefix + sourceCode.getText(node.argument),
317
+ );
318
+ },
319
+ });
320
+ }
321
+ },
322
+
323
+ CallExpression(node) {
324
+ if (
325
+ node.callee.type !== "Identifier" ||
326
+ node.callee.name !== "Boolean"
327
+ ) {
328
+ return;
329
+ }
330
+
331
+ if (isInFlaggedContext(node)) {
332
+ context.report({
333
+ node,
334
+ messageId: "unexpectedCall",
335
+ fix(fixer) {
336
+ const parent = node.parent;
337
+
338
+ if (node.arguments.length === 0) {
339
+ if (
340
+ parent.type === "UnaryExpression" &&
341
+ parent.operator === "!"
342
+ ) {
343
+ /*
344
+ * !Boolean() -> true
345
+ */
346
+
347
+ if (hasCommentsInside(parent)) {
348
+ return null;
349
+ }
350
+
351
+ const replacement = "true";
352
+ let prefix = "";
353
+ const tokenBefore =
354
+ sourceCode.getTokenBefore(parent);
355
+
356
+ if (
357
+ tokenBefore &&
358
+ tokenBefore.range[1] ===
359
+ parent.range[0] &&
360
+ !astUtils.canTokensBeAdjacent(
361
+ tokenBefore,
362
+ replacement,
363
+ )
364
+ ) {
365
+ prefix = " ";
366
+ }
367
+
368
+ return fixer.replaceText(
369
+ parent,
370
+ prefix + replacement,
371
+ );
372
+ }
373
+
374
+ /*
375
+ * Boolean() -> false
376
+ */
377
+
378
+ if (hasCommentsInside(node)) {
379
+ return null;
380
+ }
381
+
382
+ return fixer.replaceText(node, "false");
383
+ }
384
+
385
+ if (node.arguments.length === 1) {
386
+ const argument = node.arguments[0];
387
+
388
+ if (
389
+ argument.type === "SpreadElement" ||
390
+ hasCommentsInside(node)
391
+ ) {
392
+ return null;
393
+ }
394
+
395
+ /*
396
+ * Boolean(expression) -> expression
397
+ */
398
+
399
+ if (needsParens(node, argument)) {
400
+ return fixer.replaceText(
401
+ node,
402
+ `(${sourceCode.getText(argument)})`,
403
+ );
404
+ }
405
+
406
+ return fixer.replaceText(
407
+ node,
408
+ sourceCode.getText(argument),
409
+ );
410
+ }
411
+
412
+ // two or more arguments
413
+ return null;
414
+ },
415
+ });
416
+ }
417
+ },
418
+ };
419
+ },
420
+ };