bahlint 28.58.6934-dev-001

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 +354 -0
  3. package/bin/bahlint.js +267 -0
  4. package/bin/eslint.js +194 -0
  5. package/conf/ecma-version.js +16 -0
  6. package/conf/globals.js +169 -0
  7. package/conf/replacements.json +26 -0
  8. package/conf/rule-type-list.json +91 -0
  9. package/lib/api.js +39 -0
  10. package/lib/cli-engine/formatters/formatters-meta.json +18 -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 +521 -0
  18. package/lib/config/config-loader.js +668 -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 +1989 -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,332 @@
1
+ /**
2
+ * @fileoverview Prefer destructuring from arrays and objects
3
+ * @author Alex LaFroscia
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 PRECEDENCE_OF_ASSIGNMENT_EXPR = astUtils.getPrecedence({
18
+ type: "AssignmentExpression",
19
+ });
20
+
21
+ //------------------------------------------------------------------------------
22
+ // Rule Definition
23
+ //------------------------------------------------------------------------------
24
+
25
+ /** @type {import('../types').Rule.RuleModule} */
26
+ module.exports = {
27
+ meta: {
28
+ type: "suggestion",
29
+
30
+ docs: {
31
+ description: "Require destructuring from arrays and/or objects",
32
+ recommended: false,
33
+ frozen: true,
34
+ url: "https://eslint.org/docs/latest/rules/prefer-destructuring",
35
+ },
36
+
37
+ fixable: "code",
38
+
39
+ schema: [
40
+ {
41
+ /*
42
+ * old support {array: Boolean, object: Boolean}
43
+ * new support {VariableDeclarator: {}, AssignmentExpression: {}}
44
+ */
45
+ oneOf: [
46
+ {
47
+ type: "object",
48
+ properties: {
49
+ VariableDeclarator: {
50
+ type: "object",
51
+ properties: {
52
+ array: {
53
+ type: "boolean",
54
+ },
55
+ object: {
56
+ type: "boolean",
57
+ },
58
+ },
59
+ additionalProperties: false,
60
+ },
61
+ AssignmentExpression: {
62
+ type: "object",
63
+ properties: {
64
+ array: {
65
+ type: "boolean",
66
+ },
67
+ object: {
68
+ type: "boolean",
69
+ },
70
+ },
71
+ additionalProperties: false,
72
+ },
73
+ },
74
+ additionalProperties: false,
75
+ },
76
+ {
77
+ type: "object",
78
+ properties: {
79
+ array: {
80
+ type: "boolean",
81
+ },
82
+ object: {
83
+ type: "boolean",
84
+ },
85
+ },
86
+ additionalProperties: false,
87
+ },
88
+ ],
89
+ },
90
+ {
91
+ type: "object",
92
+ properties: {
93
+ enforceForRenamedProperties: {
94
+ type: "boolean",
95
+ },
96
+ },
97
+ additionalProperties: false,
98
+ },
99
+ ],
100
+
101
+ messages: {
102
+ preferDestructuring: "Use {{type}} destructuring.",
103
+ },
104
+ },
105
+ create(context) {
106
+ const enabledTypes = context.options[0];
107
+ const enforceForRenamedProperties =
108
+ context.options[1] &&
109
+ context.options[1].enforceForRenamedProperties;
110
+ let normalizedOptions = {
111
+ VariableDeclarator: { array: true, object: true },
112
+ AssignmentExpression: { array: true, object: true },
113
+ };
114
+
115
+ if (enabledTypes) {
116
+ normalizedOptions =
117
+ typeof enabledTypes.array !== "undefined" ||
118
+ typeof enabledTypes.object !== "undefined"
119
+ ? {
120
+ VariableDeclarator: enabledTypes,
121
+ AssignmentExpression: enabledTypes,
122
+ }
123
+ : enabledTypes;
124
+ }
125
+
126
+ //--------------------------------------------------------------------------
127
+ // Helpers
128
+ //--------------------------------------------------------------------------
129
+
130
+ /**
131
+ * Checks if destructuring type should be checked.
132
+ * @param {string} nodeType "AssignmentExpression" or "VariableDeclarator"
133
+ * @param {string} destructuringType "array" or "object"
134
+ * @returns {boolean} `true` if the destructuring type should be checked for the given node
135
+ */
136
+ function shouldCheck(nodeType, destructuringType) {
137
+ return (
138
+ normalizedOptions &&
139
+ normalizedOptions[nodeType] &&
140
+ normalizedOptions[nodeType][destructuringType]
141
+ );
142
+ }
143
+
144
+ /**
145
+ * Determines if the given node is accessing an array index
146
+ *
147
+ * This is used to differentiate array index access from object property
148
+ * access.
149
+ * @param {ASTNode} node the node to evaluate
150
+ * @returns {boolean} whether or not the node is an integer
151
+ */
152
+ function isArrayIndexAccess(node) {
153
+ return Number.isInteger(node.property.value);
154
+ }
155
+
156
+ /**
157
+ * Report that the given node should use destructuring
158
+ * @param {ASTNode} reportNode the node to report
159
+ * @param {string} type the type of destructuring that should have been done
160
+ * @param {Function|null} fix the fix function or null to pass to context.report
161
+ * @returns {void}
162
+ */
163
+ function report(reportNode, type, fix) {
164
+ context.report({
165
+ node: reportNode,
166
+ messageId: "preferDestructuring",
167
+ data: { type },
168
+ fix,
169
+ });
170
+ }
171
+
172
+ /**
173
+ * Determines if a node should be fixed into object destructuring
174
+ *
175
+ * The fixer only fixes the simplest case of object destructuring,
176
+ * like: `let x = a.x`;
177
+ *
178
+ * Assignment expression is not fixed.
179
+ * Array destructuring is not fixed.
180
+ * Renamed property is not fixed.
181
+ * @param {ASTNode} node the node to evaluate
182
+ * @returns {boolean} whether or not the node should be fixed
183
+ */
184
+ function shouldFix(node) {
185
+ return (
186
+ node.type === "VariableDeclarator" &&
187
+ node.id.type === "Identifier" &&
188
+ node.init.type === "MemberExpression" &&
189
+ !node.init.computed &&
190
+ node.init.property.type === "Identifier" &&
191
+ node.id.name === node.init.property.name
192
+ );
193
+ }
194
+
195
+ /**
196
+ * Fix a node into object destructuring.
197
+ * This function only handles the simplest case of object destructuring,
198
+ * see {@link shouldFix}.
199
+ * @param {SourceCodeFixer} fixer the fixer object
200
+ * @param {ASTNode} node the node to be fixed.
201
+ * @returns {Object} a fix for the node
202
+ */
203
+ function fixIntoObjectDestructuring(fixer, node) {
204
+ const rightNode = node.init;
205
+ const sourceCode = context.sourceCode;
206
+
207
+ // Don't fix if that would remove any comments. Only comments inside `rightNode.object` can be preserved.
208
+ if (
209
+ sourceCode.getCommentsInside(node).length >
210
+ sourceCode.getCommentsInside(rightNode.object).length
211
+ ) {
212
+ return null;
213
+ }
214
+
215
+ let objectText = sourceCode.getText(rightNode.object);
216
+
217
+ if (
218
+ astUtils.getPrecedence(rightNode.object) <
219
+ PRECEDENCE_OF_ASSIGNMENT_EXPR
220
+ ) {
221
+ objectText = `(${objectText})`;
222
+ }
223
+
224
+ return fixer.replaceText(
225
+ node,
226
+ `{${rightNode.property.name}} = ${objectText}`,
227
+ );
228
+ }
229
+
230
+ /**
231
+ * Check that the `prefer-destructuring` rules are followed based on the
232
+ * given left- and right-hand side of the assignment.
233
+ *
234
+ * Pulled out into a separate method so that VariableDeclarators and
235
+ * AssignmentExpressions can share the same verification logic.
236
+ * @param {ASTNode} leftNode the left-hand side of the assignment
237
+ * @param {ASTNode} rightNode the right-hand side of the assignment
238
+ * @param {ASTNode} reportNode the node to report the error on
239
+ * @returns {void}
240
+ */
241
+ function performCheck(leftNode, rightNode, reportNode) {
242
+ if (
243
+ rightNode.type !== "MemberExpression" ||
244
+ rightNode.object.type === "Super" ||
245
+ rightNode.property.type === "PrivateIdentifier"
246
+ ) {
247
+ return;
248
+ }
249
+
250
+ if (isArrayIndexAccess(rightNode)) {
251
+ if (shouldCheck(reportNode.type, "array")) {
252
+ report(reportNode, "array", null);
253
+ }
254
+ return;
255
+ }
256
+
257
+ const fix = shouldFix(reportNode)
258
+ ? fixer => fixIntoObjectDestructuring(fixer, reportNode)
259
+ : null;
260
+
261
+ if (
262
+ shouldCheck(reportNode.type, "object") &&
263
+ enforceForRenamedProperties
264
+ ) {
265
+ report(reportNode, "object", fix);
266
+ return;
267
+ }
268
+
269
+ if (shouldCheck(reportNode.type, "object")) {
270
+ const property = rightNode.property;
271
+
272
+ if (
273
+ (property.type === "Literal" &&
274
+ leftNode.name === property.value) ||
275
+ (property.type === "Identifier" &&
276
+ leftNode.name === property.name &&
277
+ !rightNode.computed)
278
+ ) {
279
+ report(reportNode, "object", fix);
280
+ }
281
+ }
282
+ }
283
+
284
+ /**
285
+ * Check if a given variable declarator is coming from an property access
286
+ * that should be using destructuring instead
287
+ * @param {ASTNode} node the variable declarator to check
288
+ * @returns {void}
289
+ */
290
+ function checkVariableDeclarator(node) {
291
+ // Skip if variable is declared without assignment
292
+ if (!node.init) {
293
+ return;
294
+ }
295
+
296
+ // Variable declarations using explicit resource management cannot use destructuring (parse error)
297
+ if (
298
+ node.parent.kind === "using" ||
299
+ node.parent.kind === "await using"
300
+ ) {
301
+ return;
302
+ }
303
+
304
+ // We only care about member expressions past this point
305
+ if (node.init.type !== "MemberExpression") {
306
+ return;
307
+ }
308
+
309
+ performCheck(node.id, node.init, node);
310
+ }
311
+
312
+ /**
313
+ * Run the `prefer-destructuring` check on an AssignmentExpression
314
+ * @param {ASTNode} node the AssignmentExpression node
315
+ * @returns {void}
316
+ */
317
+ function checkAssignmentExpression(node) {
318
+ if (node.operator === "=") {
319
+ performCheck(node.left, node.right, node);
320
+ }
321
+ }
322
+
323
+ //--------------------------------------------------------------------------
324
+ // Public
325
+ //--------------------------------------------------------------------------
326
+
327
+ return {
328
+ VariableDeclarator: checkVariableDeclarator,
329
+ AssignmentExpression: checkAssignmentExpression,
330
+ };
331
+ },
332
+ };
@@ -0,0 +1,235 @@
1
+ /**
2
+ * @fileoverview Rule to disallow Math.pow in favor of the ** operator
3
+ * @author Milos Djermanovic
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+ const { CALL, ReferenceTracker } = require("@eslint-community/eslint-utils");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Helpers
17
+ //------------------------------------------------------------------------------
18
+
19
+ const PRECEDENCE_OF_EXPONENTIATION_EXPR = astUtils.getPrecedence({
20
+ type: "BinaryExpression",
21
+ operator: "**",
22
+ });
23
+
24
+ /**
25
+ * Determines whether the given node needs parens if used as the base in an exponentiation binary expression.
26
+ * @param {ASTNode} base The node to check.
27
+ * @returns {boolean} `true` if the node needs to be parenthesised.
28
+ */
29
+ function doesBaseNeedParens(base) {
30
+ return (
31
+ // '**' is right-associative, parens are needed when Math.pow(a ** b, c) is converted to (a ** b) ** c
32
+ astUtils.getPrecedence(base) <= PRECEDENCE_OF_EXPONENTIATION_EXPR ||
33
+ // An unary operator cannot be used immediately before an exponentiation expression
34
+ base.type === "AwaitExpression" ||
35
+ base.type === "UnaryExpression"
36
+ );
37
+ }
38
+
39
+ /**
40
+ * Determines whether the given node needs parens if used as the exponent in an exponentiation binary expression.
41
+ * @param {ASTNode} exponent The node to check.
42
+ * @returns {boolean} `true` if the node needs to be parenthesised.
43
+ */
44
+ function doesExponentNeedParens(exponent) {
45
+ // '**' is right-associative, there is no need for parens when Math.pow(a, b ** c) is converted to a ** b ** c
46
+ return astUtils.getPrecedence(exponent) < PRECEDENCE_OF_EXPONENTIATION_EXPR;
47
+ }
48
+
49
+ /**
50
+ * Determines whether an exponentiation binary expression at the place of the given node would need parens.
51
+ * @param {ASTNode} node A node that would be replaced by an exponentiation binary expression.
52
+ * @param {SourceCode} sourceCode A SourceCode object.
53
+ * @returns {boolean} `true` if the expression needs to be parenthesised.
54
+ */
55
+ function doesExponentiationExpressionNeedParens(node, sourceCode) {
56
+ const parent =
57
+ node.parent.type === "ChainExpression"
58
+ ? node.parent.parent
59
+ : node.parent;
60
+
61
+ const parentPrecedence = astUtils.getPrecedence(parent);
62
+ const needsParens =
63
+ parent.type === "ClassDeclaration" ||
64
+ (parent.type.endsWith("Expression") &&
65
+ (parentPrecedence === -1 ||
66
+ parentPrecedence >= PRECEDENCE_OF_EXPONENTIATION_EXPR) &&
67
+ !(
68
+ parent.type === "BinaryExpression" &&
69
+ parent.operator === "**" &&
70
+ parent.right === node
71
+ ) &&
72
+ !(
73
+ (parent.type === "CallExpression" ||
74
+ parent.type === "NewExpression") &&
75
+ parent.arguments.includes(node)
76
+ ) &&
77
+ !(
78
+ parent.type === "MemberExpression" &&
79
+ parent.computed &&
80
+ parent.property === node
81
+ ) &&
82
+ !(parent.type === "ArrayExpression"));
83
+
84
+ return needsParens && !astUtils.isParenthesised(sourceCode, node);
85
+ }
86
+
87
+ /**
88
+ * Optionally parenthesizes given text.
89
+ * @param {string} text The text to parenthesize.
90
+ * @param {boolean} shouldParenthesize If `true`, the text will be parenthesised.
91
+ * @returns {string} parenthesised or unchanged text.
92
+ */
93
+ function parenthesizeIfShould(text, shouldParenthesize) {
94
+ return shouldParenthesize ? `(${text})` : text;
95
+ }
96
+
97
+ //------------------------------------------------------------------------------
98
+ // Rule Definition
99
+ //------------------------------------------------------------------------------
100
+
101
+ /** @type {import('../types').Rule.RuleModule} */
102
+ module.exports = {
103
+ meta: {
104
+ type: "suggestion",
105
+
106
+ docs: {
107
+ description:
108
+ "Disallow the use of `Math.pow` in favor of the `**` operator",
109
+ recommended: false,
110
+ frozen: true,
111
+ url: "https://eslint.org/docs/latest/rules/prefer-exponentiation-operator",
112
+ },
113
+
114
+ schema: [],
115
+ fixable: "code",
116
+
117
+ messages: {
118
+ useExponentiation: "Use the '**' operator instead of 'Math.pow'.",
119
+ },
120
+ },
121
+
122
+ create(context) {
123
+ const sourceCode = context.sourceCode;
124
+
125
+ /**
126
+ * Reports the given node.
127
+ * @param {ASTNode} node 'Math.pow()' node to report.
128
+ * @returns {void}
129
+ */
130
+ function report(node) {
131
+ context.report({
132
+ node,
133
+ messageId: "useExponentiation",
134
+ fix(fixer) {
135
+ if (
136
+ node.arguments.length !== 2 ||
137
+ node.arguments.some(
138
+ arg => arg.type === "SpreadElement",
139
+ ) ||
140
+ sourceCode.getCommentsInside(node).length > 0
141
+ ) {
142
+ return null;
143
+ }
144
+
145
+ const base = node.arguments[0],
146
+ exponent = node.arguments[1],
147
+ baseText = sourceCode.getText(base),
148
+ exponentText = sourceCode.getText(exponent),
149
+ shouldParenthesizeBase = doesBaseNeedParens(base),
150
+ shouldParenthesizeExponent =
151
+ doesExponentNeedParens(exponent),
152
+ shouldParenthesizeAll =
153
+ doesExponentiationExpressionNeedParens(
154
+ node,
155
+ sourceCode,
156
+ );
157
+
158
+ let prefix = "",
159
+ suffix = "";
160
+
161
+ if (!shouldParenthesizeAll) {
162
+ if (!shouldParenthesizeBase) {
163
+ const firstReplacementToken =
164
+ sourceCode.getFirstToken(base),
165
+ tokenBefore = sourceCode.getTokenBefore(node);
166
+
167
+ if (
168
+ tokenBefore &&
169
+ tokenBefore.range[1] === node.range[0] &&
170
+ !astUtils.canTokensBeAdjacent(
171
+ tokenBefore,
172
+ firstReplacementToken,
173
+ )
174
+ ) {
175
+ prefix = " "; // a+Math.pow(++b, c) -> a+ ++b**c
176
+ }
177
+ }
178
+ if (!shouldParenthesizeExponent) {
179
+ const lastReplacementToken =
180
+ sourceCode.getLastToken(exponent),
181
+ tokenAfter = sourceCode.getTokenAfter(node);
182
+
183
+ if (
184
+ tokenAfter &&
185
+ node.range[1] === tokenAfter.range[0] &&
186
+ !astUtils.canTokensBeAdjacent(
187
+ lastReplacementToken,
188
+ tokenAfter,
189
+ )
190
+ ) {
191
+ suffix = " "; // Math.pow(a, b)in c -> a**b in c
192
+ }
193
+ }
194
+ }
195
+
196
+ const baseReplacement = parenthesizeIfShould(
197
+ baseText,
198
+ shouldParenthesizeBase,
199
+ ),
200
+ exponentReplacement = parenthesizeIfShould(
201
+ exponentText,
202
+ shouldParenthesizeExponent,
203
+ ),
204
+ replacement = parenthesizeIfShould(
205
+ `${baseReplacement}**${exponentReplacement}`,
206
+ shouldParenthesizeAll,
207
+ );
208
+
209
+ return fixer.replaceText(
210
+ node,
211
+ `${prefix}${replacement}${suffix}`,
212
+ );
213
+ },
214
+ });
215
+ }
216
+
217
+ return {
218
+ Program(node) {
219
+ const scope = sourceCode.getScope(node);
220
+ const tracker = new ReferenceTracker(scope);
221
+ const trackMap = {
222
+ Math: {
223
+ pow: { [CALL]: true },
224
+ },
225
+ };
226
+
227
+ for (const { node: refNode } of tracker.iterateGlobalReferences(
228
+ trackMap,
229
+ )) {
230
+ report(refNode);
231
+ }
232
+ },
233
+ };
234
+ },
235
+ };