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,270 @@
1
+ /**
2
+ * @fileoverview Rule to replace assignment expressions with operator assignment
3
+ * @author Brandon Mills
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ const astUtils = require("./utils/ast-utils");
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Helpers
15
+ //------------------------------------------------------------------------------
16
+
17
+ /**
18
+ * Checks whether an operator is commutative and has an operator assignment
19
+ * shorthand form.
20
+ * @param {string} operator Operator to check.
21
+ * @returns {boolean} True if the operator is commutative and has a
22
+ * shorthand form.
23
+ */
24
+ function isCommutativeOperatorWithShorthand(operator) {
25
+ return ["*", "&", "^", "|"].includes(operator);
26
+ }
27
+
28
+ /**
29
+ * Checks whether an operator is not commutative and has an operator assignment
30
+ * shorthand form.
31
+ * @param {string} operator Operator to check.
32
+ * @returns {boolean} True if the operator is not commutative and has
33
+ * a shorthand form.
34
+ */
35
+ function isNonCommutativeOperatorWithShorthand(operator) {
36
+ return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].includes(operator);
37
+ }
38
+
39
+ //------------------------------------------------------------------------------
40
+ // Rule Definition
41
+ //------------------------------------------------------------------------------
42
+
43
+ /**
44
+ * Determines if the left side of a node can be safely fixed (i.e. if it activates the same getters/setters and)
45
+ * toString calls regardless of whether assignment shorthand is used)
46
+ * @param {ASTNode} node The node on the left side of the expression
47
+ * @returns {boolean} `true` if the node can be fixed
48
+ */
49
+ function canBeFixed(node) {
50
+ return (
51
+ node.type === "Identifier" ||
52
+ (node.type === "MemberExpression" &&
53
+ (node.object.type === "Identifier" ||
54
+ node.object.type === "ThisExpression") &&
55
+ (!node.computed || node.property.type === "Literal"))
56
+ );
57
+ }
58
+
59
+ /** @type {import('../types').Rule.RuleModule} */
60
+ module.exports = {
61
+ meta: {
62
+ type: "suggestion",
63
+
64
+ defaultOptions: ["always"],
65
+
66
+ docs: {
67
+ description:
68
+ "Require or disallow assignment operator shorthand where possible",
69
+ recommended: false,
70
+ frozen: true,
71
+ url: "https://eslint.org/docs/latest/rules/operator-assignment",
72
+ },
73
+
74
+ schema: [
75
+ {
76
+ enum: ["always", "never"],
77
+ },
78
+ ],
79
+
80
+ fixable: "code",
81
+ messages: {
82
+ replaced:
83
+ "Assignment (=) can be replaced with operator assignment ({{operator}}).",
84
+ unexpected:
85
+ "Unexpected operator assignment ({{operator}}) shorthand.",
86
+ },
87
+ },
88
+
89
+ create(context) {
90
+ const never = context.options[0] === "never";
91
+ const sourceCode = context.sourceCode;
92
+
93
+ /**
94
+ * Returns the operator token of an AssignmentExpression or BinaryExpression
95
+ * @param {ASTNode} node An AssignmentExpression or BinaryExpression node
96
+ * @returns {Token} The operator token in the node
97
+ */
98
+ function getOperatorToken(node) {
99
+ return sourceCode.getFirstTokenBetween(
100
+ node.left,
101
+ node.right,
102
+ token => token.value === node.operator,
103
+ );
104
+ }
105
+
106
+ /**
107
+ * Ensures that an assignment uses the shorthand form where possible.
108
+ * @param {ASTNode} node An AssignmentExpression node.
109
+ * @returns {void}
110
+ */
111
+ function verify(node) {
112
+ if (
113
+ node.operator !== "=" ||
114
+ node.right.type !== "BinaryExpression"
115
+ ) {
116
+ return;
117
+ }
118
+
119
+ const left = node.left;
120
+ const expr = node.right;
121
+ const operator = expr.operator;
122
+
123
+ if (
124
+ isCommutativeOperatorWithShorthand(operator) ||
125
+ isNonCommutativeOperatorWithShorthand(operator)
126
+ ) {
127
+ const replacementOperator = `${operator}=`;
128
+
129
+ if (astUtils.isSameReference(left, expr.left, true)) {
130
+ context.report({
131
+ node,
132
+ messageId: "replaced",
133
+ data: { operator: replacementOperator },
134
+ fix(fixer) {
135
+ if (canBeFixed(left) && canBeFixed(expr.left)) {
136
+ const equalsToken = getOperatorToken(node);
137
+ const operatorToken = getOperatorToken(expr);
138
+ const leftText = sourceCode
139
+ .getText()
140
+ .slice(node.range[0], equalsToken.range[0]);
141
+ const rightText = sourceCode
142
+ .getText()
143
+ .slice(
144
+ operatorToken.range[1],
145
+ node.right.range[1],
146
+ );
147
+
148
+ // Check for comments that would be removed.
149
+ if (
150
+ sourceCode.commentsExistBetween(
151
+ equalsToken,
152
+ operatorToken,
153
+ )
154
+ ) {
155
+ return null;
156
+ }
157
+
158
+ return fixer.replaceText(
159
+ node,
160
+ `${leftText}${replacementOperator}${rightText}`,
161
+ );
162
+ }
163
+ return null;
164
+ },
165
+ });
166
+ } else if (
167
+ astUtils.isSameReference(left, expr.right, true) &&
168
+ isCommutativeOperatorWithShorthand(operator)
169
+ ) {
170
+ /*
171
+ * This case can't be fixed safely.
172
+ * If `a` and `b` both have custom valueOf() behavior, then fixing `a = b * a` to `a *= b` would
173
+ * change the execution order of the valueOf() functions.
174
+ */
175
+ context.report({
176
+ node,
177
+ messageId: "replaced",
178
+ data: { operator: replacementOperator },
179
+ });
180
+ }
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Warns if an assignment expression uses operator assignment shorthand.
186
+ * @param {ASTNode} node An AssignmentExpression node.
187
+ * @returns {void}
188
+ */
189
+ function prohibit(node) {
190
+ if (
191
+ node.operator !== "=" &&
192
+ !astUtils.isLogicalAssignmentOperator(node.operator)
193
+ ) {
194
+ context.report({
195
+ node,
196
+ messageId: "unexpected",
197
+ data: { operator: node.operator },
198
+ fix(fixer) {
199
+ if (canBeFixed(node.left)) {
200
+ const firstToken = sourceCode.getFirstToken(node);
201
+ const operatorToken = getOperatorToken(node);
202
+ const leftText = sourceCode
203
+ .getText()
204
+ .slice(node.range[0], operatorToken.range[0]);
205
+ const newOperator = node.operator.slice(0, -1);
206
+ let rightText;
207
+
208
+ // Check for comments that would be duplicated.
209
+ if (
210
+ sourceCode.commentsExistBetween(
211
+ firstToken,
212
+ operatorToken,
213
+ )
214
+ ) {
215
+ return null;
216
+ }
217
+
218
+ // If this change would modify precedence (e.g. `foo *= bar + 1` => `foo = foo * (bar + 1)`), parenthesize the right side.
219
+ if (
220
+ astUtils.getPrecedence(node.right) <=
221
+ astUtils.getPrecedence({
222
+ type: "BinaryExpression",
223
+ operator: newOperator,
224
+ }) &&
225
+ !astUtils.isParenthesised(
226
+ sourceCode,
227
+ node.right,
228
+ )
229
+ ) {
230
+ rightText = `${sourceCode.text.slice(operatorToken.range[1], node.right.range[0])}(${sourceCode.getText(node.right)})`;
231
+ } else {
232
+ const tokenAfterOperator =
233
+ sourceCode.getTokenAfter(operatorToken, {
234
+ includeComments: true,
235
+ });
236
+ let rightTextPrefix = "";
237
+
238
+ if (
239
+ operatorToken.range[1] ===
240
+ tokenAfterOperator.range[0] &&
241
+ !astUtils.canTokensBeAdjacent(
242
+ {
243
+ type: "Punctuator",
244
+ value: newOperator,
245
+ },
246
+ tokenAfterOperator,
247
+ )
248
+ ) {
249
+ rightTextPrefix = " "; // foo+=+bar -> foo= foo+ +bar
250
+ }
251
+
252
+ rightText = `${rightTextPrefix}${sourceCode.text.slice(operatorToken.range[1], node.range[1])}`;
253
+ }
254
+
255
+ return fixer.replaceText(
256
+ node,
257
+ `${leftText}= ${leftText}${newOperator}${rightText}`,
258
+ );
259
+ }
260
+ return null;
261
+ },
262
+ });
263
+ }
264
+ }
265
+
266
+ return {
267
+ AssignmentExpression: !never ? verify : prohibit,
268
+ };
269
+ },
270
+ };
@@ -0,0 +1,315 @@
1
+ /**
2
+ * @fileoverview Operator linebreak - enforces operator linebreak style of two types: after and before
3
+ * @author Benoît Zugmeyer
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const astUtils = require("./utils/ast-utils");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Rule Definition
17
+ //------------------------------------------------------------------------------
18
+
19
+ /** @type {import('../types').Rule.RuleModule} */
20
+ module.exports = {
21
+ meta: {
22
+ deprecated: {
23
+ message: "Formatting rules are being moved out of ESLint core.",
24
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
25
+ deprecatedSince: "8.53.0",
26
+ availableUntil: "11.0.0",
27
+ replacedBy: [
28
+ {
29
+ message:
30
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
31
+ url: "https://eslint.style/guide/migration",
32
+ plugin: {
33
+ name: "@stylistic/eslint-plugin",
34
+ url: "https://eslint.style",
35
+ },
36
+ rule: {
37
+ name: "operator-linebreak",
38
+ url: "https://eslint.style/rules/operator-linebreak",
39
+ },
40
+ },
41
+ ],
42
+ },
43
+ type: "layout",
44
+
45
+ docs: {
46
+ description: "Enforce consistent linebreak style for operators",
47
+ recommended: false,
48
+ url: "https://eslint.org/docs/latest/rules/operator-linebreak",
49
+ },
50
+
51
+ schema: [
52
+ {
53
+ enum: ["after", "before", "none", null],
54
+ },
55
+ {
56
+ type: "object",
57
+ properties: {
58
+ overrides: {
59
+ type: "object",
60
+ additionalProperties: {
61
+ enum: ["after", "before", "none", "ignore"],
62
+ },
63
+ },
64
+ },
65
+ additionalProperties: false,
66
+ },
67
+ ],
68
+
69
+ fixable: "code",
70
+
71
+ messages: {
72
+ operatorAtBeginning:
73
+ "'{{operator}}' should be placed at the beginning of the line.",
74
+ operatorAtEnd:
75
+ "'{{operator}}' should be placed at the end of the line.",
76
+ badLinebreak: "Bad line breaking before and after '{{operator}}'.",
77
+ noLinebreak:
78
+ "There should be no line break before or after '{{operator}}'.",
79
+ },
80
+ },
81
+
82
+ create(context) {
83
+ const usedDefaultGlobal = !context.options[0];
84
+ const globalStyle = context.options[0] || "after";
85
+ const options = context.options[1] || {};
86
+ const styleOverrides = options.overrides
87
+ ? Object.assign({}, options.overrides)
88
+ : {};
89
+
90
+ if (usedDefaultGlobal && !styleOverrides["?"]) {
91
+ styleOverrides["?"] = "before";
92
+ }
93
+
94
+ if (usedDefaultGlobal && !styleOverrides[":"]) {
95
+ styleOverrides[":"] = "before";
96
+ }
97
+
98
+ const sourceCode = context.sourceCode;
99
+
100
+ //--------------------------------------------------------------------------
101
+ // Helpers
102
+ //--------------------------------------------------------------------------
103
+
104
+ /**
105
+ * Gets a fixer function to fix rule issues
106
+ * @param {Token} operatorToken The operator token of an expression
107
+ * @param {string} desiredStyle The style for the rule. One of 'before', 'after', 'none'
108
+ * @returns {Function} A fixer function
109
+ */
110
+ function getFixer(operatorToken, desiredStyle) {
111
+ return fixer => {
112
+ const tokenBefore = sourceCode.getTokenBefore(operatorToken);
113
+ const tokenAfter = sourceCode.getTokenAfter(operatorToken);
114
+ const textBefore = sourceCode.text.slice(
115
+ tokenBefore.range[1],
116
+ operatorToken.range[0],
117
+ );
118
+ const textAfter = sourceCode.text.slice(
119
+ operatorToken.range[1],
120
+ tokenAfter.range[0],
121
+ );
122
+ const hasLinebreakBefore = !astUtils.isTokenOnSameLine(
123
+ tokenBefore,
124
+ operatorToken,
125
+ );
126
+ const hasLinebreakAfter = !astUtils.isTokenOnSameLine(
127
+ operatorToken,
128
+ tokenAfter,
129
+ );
130
+ let newTextBefore, newTextAfter;
131
+
132
+ if (
133
+ hasLinebreakBefore !== hasLinebreakAfter &&
134
+ desiredStyle !== "none"
135
+ ) {
136
+ // If there is a comment before and after the operator, don't do a fix.
137
+ if (
138
+ sourceCode.getTokenBefore(operatorToken, {
139
+ includeComments: true,
140
+ }) !== tokenBefore &&
141
+ sourceCode.getTokenAfter(operatorToken, {
142
+ includeComments: true,
143
+ }) !== tokenAfter
144
+ ) {
145
+ return null;
146
+ }
147
+
148
+ /*
149
+ * If there is only one linebreak and it's on the wrong side of the operator, swap the text before and after the operator.
150
+ * foo &&
151
+ * bar
152
+ * would get fixed to
153
+ * foo
154
+ * && bar
155
+ */
156
+ newTextBefore = textAfter;
157
+ newTextAfter = textBefore;
158
+ } else {
159
+ const LINEBREAK_REGEX =
160
+ astUtils.createGlobalLinebreakMatcher();
161
+
162
+ // Otherwise, if no linebreak is desired and no comments interfere, replace the linebreaks with empty strings.
163
+ newTextBefore =
164
+ desiredStyle === "before" || textBefore.trim()
165
+ ? textBefore
166
+ : textBefore.replace(LINEBREAK_REGEX, "");
167
+ newTextAfter =
168
+ desiredStyle === "after" || textAfter.trim()
169
+ ? textAfter
170
+ : textAfter.replace(LINEBREAK_REGEX, "");
171
+
172
+ // If there was no change (due to interfering comments), don't output a fix.
173
+ if (
174
+ newTextBefore === textBefore &&
175
+ newTextAfter === textAfter
176
+ ) {
177
+ return null;
178
+ }
179
+ }
180
+
181
+ if (
182
+ newTextAfter === "" &&
183
+ tokenAfter.type === "Punctuator" &&
184
+ "+-".includes(operatorToken.value) &&
185
+ tokenAfter.value === operatorToken.value
186
+ ) {
187
+ // To avoid accidentally creating a ++ or -- operator, insert a space if the operator is a +/- and the following token is a unary +/-.
188
+ newTextAfter += " ";
189
+ }
190
+
191
+ return fixer.replaceTextRange(
192
+ [tokenBefore.range[1], tokenAfter.range[0]],
193
+ newTextBefore + operatorToken.value + newTextAfter,
194
+ );
195
+ };
196
+ }
197
+
198
+ /**
199
+ * Checks the operator placement
200
+ * @param {ASTNode} node The node to check
201
+ * @param {ASTNode} rightSide The node that comes after the operator in `node`
202
+ * @param {string} operator The operator
203
+ * @private
204
+ * @returns {void}
205
+ */
206
+ function validateNode(node, rightSide, operator) {
207
+ /*
208
+ * Find the operator token by searching from the right side, because between the left side and the operator
209
+ * there could be additional tokens from type annotations. Search specifically for the token which
210
+ * value equals the operator, in order to skip possible opening parentheses before the right side node.
211
+ */
212
+ const operatorToken = sourceCode.getTokenBefore(
213
+ rightSide,
214
+ token => token.value === operator,
215
+ );
216
+ const leftToken = sourceCode.getTokenBefore(operatorToken);
217
+ const rightToken = sourceCode.getTokenAfter(operatorToken);
218
+ const operatorStyleOverride = styleOverrides[operator];
219
+ const style = operatorStyleOverride || globalStyle;
220
+ const fix = getFixer(operatorToken, style);
221
+
222
+ // if single line
223
+ if (
224
+ astUtils.isTokenOnSameLine(leftToken, operatorToken) &&
225
+ astUtils.isTokenOnSameLine(operatorToken, rightToken)
226
+ ) {
227
+ // do nothing.
228
+ } else if (
229
+ operatorStyleOverride !== "ignore" &&
230
+ !astUtils.isTokenOnSameLine(leftToken, operatorToken) &&
231
+ !astUtils.isTokenOnSameLine(operatorToken, rightToken)
232
+ ) {
233
+ // lone operator
234
+ context.report({
235
+ node,
236
+ loc: operatorToken.loc,
237
+ messageId: "badLinebreak",
238
+ data: {
239
+ operator,
240
+ },
241
+ fix,
242
+ });
243
+ } else if (
244
+ style === "before" &&
245
+ astUtils.isTokenOnSameLine(leftToken, operatorToken)
246
+ ) {
247
+ context.report({
248
+ node,
249
+ loc: operatorToken.loc,
250
+ messageId: "operatorAtBeginning",
251
+ data: {
252
+ operator,
253
+ },
254
+ fix,
255
+ });
256
+ } else if (
257
+ style === "after" &&
258
+ astUtils.isTokenOnSameLine(operatorToken, rightToken)
259
+ ) {
260
+ context.report({
261
+ node,
262
+ loc: operatorToken.loc,
263
+ messageId: "operatorAtEnd",
264
+ data: {
265
+ operator,
266
+ },
267
+ fix,
268
+ });
269
+ } else if (style === "none") {
270
+ context.report({
271
+ node,
272
+ loc: operatorToken.loc,
273
+ messageId: "noLinebreak",
274
+ data: {
275
+ operator,
276
+ },
277
+ fix,
278
+ });
279
+ }
280
+ }
281
+
282
+ /**
283
+ * Validates a binary expression using `validateNode`
284
+ * @param {BinaryExpression|LogicalExpression|AssignmentExpression} node node to be validated
285
+ * @returns {void}
286
+ */
287
+ function validateBinaryExpression(node) {
288
+ validateNode(node, node.right, node.operator);
289
+ }
290
+
291
+ //--------------------------------------------------------------------------
292
+ // Public
293
+ //--------------------------------------------------------------------------
294
+
295
+ return {
296
+ BinaryExpression: validateBinaryExpression,
297
+ LogicalExpression: validateBinaryExpression,
298
+ AssignmentExpression: validateBinaryExpression,
299
+ VariableDeclarator(node) {
300
+ if (node.init) {
301
+ validateNode(node, node.init, "=");
302
+ }
303
+ },
304
+ PropertyDefinition(node) {
305
+ if (node.value) {
306
+ validateNode(node, node.value, "=");
307
+ }
308
+ },
309
+ ConditionalExpression(node) {
310
+ validateNode(node, node.consequent, "?");
311
+ validateNode(node, node.alternate, ":");
312
+ },
313
+ };
314
+ },
315
+ };