oxlint-plugin-eslint 1.52.0

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 (305) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +36 -0
  3. package/common/ast-utils.cjs +5843 -0
  4. package/common/chunk.cjs +9 -0
  5. package/common/eslint-utils.cjs +1633 -0
  6. package/common/fix-tracker.cjs +89 -0
  7. package/common/ignore.cjs +123 -0
  8. package/common/keywords.cjs +15 -0
  9. package/common/regexpp.cjs +1720 -0
  10. package/common/regular-expressions.cjs +40 -0
  11. package/common/string-utils.cjs +39 -0
  12. package/index.js +7477 -0
  13. package/package.json +34 -0
  14. package/rules/accessor-pairs.cjs +233 -0
  15. package/rules/array-bracket-newline.cjs +172 -0
  16. package/rules/array-bracket-spacing.cjs +184 -0
  17. package/rules/array-callback-return.cjs +262 -0
  18. package/rules/array-element-newline.cjs +178 -0
  19. package/rules/arrow-body-style.cjs +135 -0
  20. package/rules/arrow-parens.cjs +130 -0
  21. package/rules/arrow-spacing.cjs +129 -0
  22. package/rules/block-scoped-var.cjs +101 -0
  23. package/rules/block-spacing.cjs +125 -0
  24. package/rules/brace-style.cjs +141 -0
  25. package/rules/callback-return.cjs +117 -0
  26. package/rules/camelcase.cjs +194 -0
  27. package/rules/capitalized-comments.cjs +168 -0
  28. package/rules/class-methods-use-this.cjs +155 -0
  29. package/rules/comma-dangle.cjs +274 -0
  30. package/rules/comma-spacing.cjs +111 -0
  31. package/rules/comma-style.cjs +180 -0
  32. package/rules/complexity.cjs +100 -0
  33. package/rules/computed-property-spacing.cjs +155 -0
  34. package/rules/consistent-return.cjs +113 -0
  35. package/rules/consistent-this.cjs +109 -0
  36. package/rules/constructor-super.cjs +207 -0
  37. package/rules/curly.cjs +173 -0
  38. package/rules/default-case-last.cjs +36 -0
  39. package/rules/default-case.cjs +50 -0
  40. package/rules/default-param-last.cjs +61 -0
  41. package/rules/dot-location.cjs +87 -0
  42. package/rules/dot-notation.cjs +77 -0
  43. package/rules/eol-last.cjs +91 -0
  44. package/rules/eqeqeq.cjs +127 -0
  45. package/rules/for-direction.cjs +94 -0
  46. package/rules/func-call-spacing.cjs +127 -0
  47. package/rules/func-name-matching.cjs +138 -0
  48. package/rules/func-names.cjs +121 -0
  49. package/rules/func-style.cjs +103 -0
  50. package/rules/function-call-argument-newline.cjs +109 -0
  51. package/rules/function-paren-newline.cjs +173 -0
  52. package/rules/generator-star-spacing.cjs +174 -0
  53. package/rules/getter-return.cjs +129 -0
  54. package/rules/global-require.cjs +84 -0
  55. package/rules/grouped-accessor-pairs.cjs +146 -0
  56. package/rules/guard-for-in.cjs +39 -0
  57. package/rules/handle-callback-err.cjs +86 -0
  58. package/rules/id-blacklist.cjs +135 -0
  59. package/rules/id-denylist.cjs +126 -0
  60. package/rules/id-length.cjs +119 -0
  61. package/rules/id-match.cjs +139 -0
  62. package/rules/implicit-arrow-linebreak.cjs +76 -0
  63. package/rules/indent-legacy.cjs +520 -0
  64. package/rules/indent.cjs +842 -0
  65. package/rules/init-declarations.cjs +88 -0
  66. package/rules/jsx-quotes.cjs +84 -0
  67. package/rules/key-spacing.cjs +399 -0
  68. package/rules/keyword-spacing.cjs +464 -0
  69. package/rules/line-comment-position.cjs +75 -0
  70. package/rules/linebreak-style.cjs +89 -0
  71. package/rules/lines-around-comment.cjs +290 -0
  72. package/rules/lines-around-directive.cjs +129 -0
  73. package/rules/lines-between-class-members.cjs +212 -0
  74. package/rules/logical-assignment-operators.cjs +305 -0
  75. package/rules/max-classes-per-file.cjs +61 -0
  76. package/rules/max-depth.cjs +117 -0
  77. package/rules/max-len.cjs +256 -0
  78. package/rules/max-lines-per-function.cjs +116 -0
  79. package/rules/max-lines.cjs +109 -0
  80. package/rules/max-nested-callbacks.cjs +78 -0
  81. package/rules/max-params.cjs +78 -0
  82. package/rules/max-statements-per-line.cjs +147 -0
  83. package/rules/max-statements.cjs +119 -0
  84. package/rules/multiline-comment-style.cjs +319 -0
  85. package/rules/multiline-ternary.cjs +106 -0
  86. package/rules/new-cap.cjs +139 -0
  87. package/rules/new-parens.cjs +70 -0
  88. package/rules/newline-after-var.cjs +159 -0
  89. package/rules/newline-before-return.cjs +128 -0
  90. package/rules/newline-per-chained-call.cjs +100 -0
  91. package/rules/no-alert.cjs +84 -0
  92. package/rules/no-array-constructor.cjs +91 -0
  93. package/rules/no-async-promise-executor.cjs +33 -0
  94. package/rules/no-await-in-loop.cjs +75 -0
  95. package/rules/no-bitwise.cjs +106 -0
  96. package/rules/no-buffer-constructor.cjs +51 -0
  97. package/rules/no-caller.cjs +34 -0
  98. package/rules/no-case-declarations.cjs +56 -0
  99. package/rules/no-catch-shadow.cjs +57 -0
  100. package/rules/no-class-assign.cjs +55 -0
  101. package/rules/no-compare-neg-zero.cjs +52 -0
  102. package/rules/no-cond-assign.cjs +104 -0
  103. package/rules/no-confusing-arrow.cjs +87 -0
  104. package/rules/no-console.cjs +138 -0
  105. package/rules/no-const-assign.cjs +50 -0
  106. package/rules/no-constant-binary-expression.cjs +284 -0
  107. package/rules/no-constant-condition.cjs +119 -0
  108. package/rules/no-constructor-return.cjs +43 -0
  109. package/rules/no-continue.cjs +33 -0
  110. package/rules/no-control-regex.cjs +74 -0
  111. package/rules/no-debugger.cjs +33 -0
  112. package/rules/no-delete-var.cjs +32 -0
  113. package/rules/no-div-regex.cjs +39 -0
  114. package/rules/no-dupe-args.cjs +61 -0
  115. package/rules/no-dupe-class-members.cjs +77 -0
  116. package/rules/no-dupe-else-if.cjs +74 -0
  117. package/rules/no-dupe-keys.cjs +88 -0
  118. package/rules/no-duplicate-case.cjs +49 -0
  119. package/rules/no-duplicate-imports.cjs +166 -0
  120. package/rules/no-else-return.cjs +182 -0
  121. package/rules/no-empty-character-class.cjs +47 -0
  122. package/rules/no-empty-function.cjs +141 -0
  123. package/rules/no-empty-pattern.cjs +50 -0
  124. package/rules/no-empty-static-block.cjs +50 -0
  125. package/rules/no-empty.cjs +78 -0
  126. package/rules/no-eq-null.cjs +34 -0
  127. package/rules/no-eval.cjs +165 -0
  128. package/rules/no-ex-assign.cjs +45 -0
  129. package/rules/no-extend-native.cjs +103 -0
  130. package/rules/no-extra-bind.cjs +127 -0
  131. package/rules/no-extra-boolean-cast.cjs +159 -0
  132. package/rules/no-extra-label.cjs +116 -0
  133. package/rules/no-extra-parens.cjs +665 -0
  134. package/rules/no-extra-semi.cjs +103 -0
  135. package/rules/no-fallthrough.cjs +136 -0
  136. package/rules/no-floating-decimal.cjs +66 -0
  137. package/rules/no-func-assign.cjs +63 -0
  138. package/rules/no-global-assign.cjs +62 -0
  139. package/rules/no-implicit-coercion.cjs +219 -0
  140. package/rules/no-implicit-globals.cjs +77 -0
  141. package/rules/no-implied-eval.cjs +87 -0
  142. package/rules/no-import-assign.cjs +123 -0
  143. package/rules/no-inline-comments.cjs +57 -0
  144. package/rules/no-inner-declarations.cjs +82 -0
  145. package/rules/no-invalid-regexp.cjs +130 -0
  146. package/rules/no-invalid-this.cjs +90 -0
  147. package/rules/no-irregular-whitespace.cjs +157 -0
  148. package/rules/no-iterator.cjs +34 -0
  149. package/rules/no-label-var.cjs +46 -0
  150. package/rules/no-labels.cjs +106 -0
  151. package/rules/no-lone-blocks.cjs +75 -0
  152. package/rules/no-lonely-if.cjs +42 -0
  153. package/rules/no-loop-func.cjs +143 -0
  154. package/rules/no-loss-of-precision.cjs +160 -0
  155. package/rules/no-magic-numbers.cjs +222 -0
  156. package/rules/no-misleading-character-class.cjs +500 -0
  157. package/rules/no-mixed-operators.cjs +197 -0
  158. package/rules/no-mixed-requires.cjs +117 -0
  159. package/rules/no-mixed-spaces-and-tabs.cjs +87 -0
  160. package/rules/no-multi-assign.cjs +38 -0
  161. package/rules/no-multi-spaces.cjs +95 -0
  162. package/rules/no-multi-str.cjs +44 -0
  163. package/rules/no-multiple-empty-lines.cjs +112 -0
  164. package/rules/no-native-reassign.cjs +72 -0
  165. package/rules/no-negated-condition.cjs +77 -0
  166. package/rules/no-negated-in-lhs.cjs +43 -0
  167. package/rules/no-nested-ternary.cjs +33 -0
  168. package/rules/no-new-func.cjs +50 -0
  169. package/rules/no-new-native-nonconstructor.cjs +42 -0
  170. package/rules/no-new-object.cjs +47 -0
  171. package/rules/no-new-require.cjs +50 -0
  172. package/rules/no-new-symbol.cjs +48 -0
  173. package/rules/no-new-wrappers.cjs +44 -0
  174. package/rules/no-new.cjs +33 -0
  175. package/rules/no-nonoctal-decimal-escape.cjs +80 -0
  176. package/rules/no-obj-calls.cjs +64 -0
  177. package/rules/no-object-constructor.cjs +69 -0
  178. package/rules/no-octal-escape.cjs +35 -0
  179. package/rules/no-octal.cjs +32 -0
  180. package/rules/no-param-reassign.cjs +135 -0
  181. package/rules/no-path-concat.cjs +52 -0
  182. package/rules/no-plusplus.cjs +64 -0
  183. package/rules/no-process-env.cjs +51 -0
  184. package/rules/no-process-exit.cjs +50 -0
  185. package/rules/no-promise-executor-return.cjs +131 -0
  186. package/rules/no-proto.cjs +34 -0
  187. package/rules/no-prototype-builtins.cjs +85 -0
  188. package/rules/no-redeclare.cjs +103 -0
  189. package/rules/no-regex-spaces.cjs +115 -0
  190. package/rules/no-restricted-exports.cjs +117 -0
  191. package/rules/no-restricted-globals.cjs +147 -0
  192. package/rules/no-restricted-imports.cjs +421 -0
  193. package/rules/no-restricted-modules.cjs +144 -0
  194. package/rules/no-restricted-properties.cjs +123 -0
  195. package/rules/no-restricted-syntax.cjs +49 -0
  196. package/rules/no-return-assign.cjs +45 -0
  197. package/rules/no-return-await.cjs +88 -0
  198. package/rules/no-script-url.cjs +49 -0
  199. package/rules/no-self-assign.cjs +88 -0
  200. package/rules/no-self-compare.cjs +53 -0
  201. package/rules/no-sequences.cjs +81 -0
  202. package/rules/no-setter-return.cjs +110 -0
  203. package/rules/no-shadow-restricted-names.cjs +60 -0
  204. package/rules/no-shadow.cjs +302 -0
  205. package/rules/no-spaced-func.cjs +69 -0
  206. package/rules/no-sparse-arrays.cjs +40 -0
  207. package/rules/no-sync.cjs +58 -0
  208. package/rules/no-tabs.cjs +73 -0
  209. package/rules/no-template-curly-in-string.cjs +33 -0
  210. package/rules/no-ternary.cjs +33 -0
  211. package/rules/no-this-before-super.cjs +177 -0
  212. package/rules/no-throw-literal.cjs +40 -0
  213. package/rules/no-trailing-spaces.cjs +123 -0
  214. package/rules/no-unassigned-vars.cjs +54 -0
  215. package/rules/no-undef-init.cjs +46 -0
  216. package/rules/no-undef.cjs +51 -0
  217. package/rules/no-undefined.cjs +58 -0
  218. package/rules/no-underscore-dangle.cjs +211 -0
  219. package/rules/no-unexpected-multiline.cjs +76 -0
  220. package/rules/no-unmodified-loop-condition.cjs +849 -0
  221. package/rules/no-unneeded-ternary.cjs +112 -0
  222. package/rules/no-unreachable-loop.cjs +128 -0
  223. package/rules/no-unreachable.cjs +195 -0
  224. package/rules/no-unsafe-finally.cjs +67 -0
  225. package/rules/no-unsafe-negation.cjs +86 -0
  226. package/rules/no-unsafe-optional-chaining.cjs +164 -0
  227. package/rules/no-unused-expressions.cjs +163 -0
  228. package/rules/no-unused-labels.cjs +97 -0
  229. package/rules/no-unused-private-class-members.cjs +69 -0
  230. package/rules/no-unused-vars.cjs +639 -0
  231. package/rules/no-use-before-define.cjs +245 -0
  232. package/rules/no-useless-assignment.cjs +250 -0
  233. package/rules/no-useless-backreference.cjs +137 -0
  234. package/rules/no-useless-call.cjs +57 -0
  235. package/rules/no-useless-catch.cjs +38 -0
  236. package/rules/no-useless-computed-key.cjs +106 -0
  237. package/rules/no-useless-concat.cjs +78 -0
  238. package/rules/no-useless-constructor.cjs +152 -0
  239. package/rules/no-useless-escape.cjs +164 -0
  240. package/rules/no-useless-rename.cjs +94 -0
  241. package/rules/no-useless-return.cjs +229 -0
  242. package/rules/no-var.cjs +235 -0
  243. package/rules/no-void.cjs +39 -0
  244. package/rules/no-warning-comments.cjs +112 -0
  245. package/rules/no-whitespace-before-property.cjs +72 -0
  246. package/rules/no-with.cjs +32 -0
  247. package/rules/nonblock-statement-body-position.cjs +107 -0
  248. package/rules/object-curly-newline.cjs +194 -0
  249. package/rules/object-curly-spacing.cjs +225 -0
  250. package/rules/object-property-newline.cjs +81 -0
  251. package/rules/object-shorthand.cjs +284 -0
  252. package/rules/one-var-declaration-per-line.cjs +75 -0
  253. package/rules/one-var.cjs +378 -0
  254. package/rules/operator-assignment.cjs +146 -0
  255. package/rules/operator-linebreak.cjs +150 -0
  256. package/rules/padded-blocks.cjs +192 -0
  257. package/rules/padding-line-between-statements.cjs +377 -0
  258. package/rules/prefer-arrow-callback.cjs +185 -0
  259. package/rules/prefer-const.cjs +240 -0
  260. package/rules/prefer-destructuring.cjs +188 -0
  261. package/rules/prefer-exponentiation-operator.cjs +100 -0
  262. package/rules/prefer-named-capture-group.cjs +111 -0
  263. package/rules/prefer-numeric-literals.cjs +75 -0
  264. package/rules/prefer-object-has-own.cjs +54 -0
  265. package/rules/prefer-object-spread.cjs +170 -0
  266. package/rules/prefer-promise-reject-errors.cjs +62 -0
  267. package/rules/prefer-reflect.cjs +100 -0
  268. package/rules/prefer-regex-literals.cjs +256 -0
  269. package/rules/prefer-rest-params.cjs +80 -0
  270. package/rules/prefer-spread.cjs +57 -0
  271. package/rules/prefer-template.cjs +147 -0
  272. package/rules/preserve-caught-error.cjs +196 -0
  273. package/rules/quote-props.cjs +224 -0
  274. package/rules/quotes.cjs +187 -0
  275. package/rules/radix.cjs +124 -0
  276. package/rules/require-atomic-updates.cjs +197 -0
  277. package/rules/require-await.cjs +90 -0
  278. package/rules/require-unicode-regexp.cjs +101 -0
  279. package/rules/require-yield.cjs +56 -0
  280. package/rules/rest-spread-spacing.cjs +99 -0
  281. package/rules/semi-spacing.cjs +215 -0
  282. package/rules/semi-style.cjs +116 -0
  283. package/rules/semi.cjs +239 -0
  284. package/rules/sort-imports.cjs +140 -0
  285. package/rules/sort-keys.cjs +165 -0
  286. package/rules/sort-vars.cjs +50 -0
  287. package/rules/space-before-blocks.cjs +132 -0
  288. package/rules/space-before-function-paren.cjs +126 -0
  289. package/rules/space-in-parens.cjs +175 -0
  290. package/rules/space-infix-ops.cjs +133 -0
  291. package/rules/space-unary-ops.cjs +237 -0
  292. package/rules/spaced-comment.cjs +233 -0
  293. package/rules/strict.cjs +206 -0
  294. package/rules/switch-colon-spacing.cjs +114 -0
  295. package/rules/symbol-description.cjs +49 -0
  296. package/rules/template-curly-spacing.cjs +112 -0
  297. package/rules/template-tag-spacing.cjs +82 -0
  298. package/rules/unicode-bom.cjs +52 -0
  299. package/rules/use-isnan.cjs +144 -0
  300. package/rules/valid-typeof.cjs +104 -0
  301. package/rules/vars-on-top.cjs +94 -0
  302. package/rules/wrap-iife.cjs +131 -0
  303. package/rules/wrap-regex.cjs +57 -0
  304. package/rules/yield-star-spacing.cjs +115 -0
  305. package/rules/yoda.cjs +185 -0
@@ -0,0 +1,305 @@
1
+ const require_chunk = require("../common/chunk.cjs"), require_ast_utils$1 = require("../common/ast-utils.cjs");
2
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/logical-assignment-operators.js
3
+ /**
4
+ * @fileoverview Rule to replace assignment expressions with logical operator assignment
5
+ * @author Daniel Martens
6
+ */
7
+ var require_logical_assignment_operators = /* @__PURE__ */ require_chunk.t(((exports, module) => {
8
+ let astUtils = require_ast_utils$1.t(), baseTypes = new Set([
9
+ "Identifier",
10
+ "Super",
11
+ "ThisExpression"
12
+ ]);
13
+ /**
14
+ * Returns true iff either "undefined" or a void expression (eg. "void 0")
15
+ * @param {ASTNode} expression Expression to check
16
+ * @param {import('eslint-scope').Scope} scope Scope of the expression
17
+ * @returns {boolean} True iff "undefined" or "void ..."
18
+ */
19
+ function isUndefined(expression, scope) {
20
+ return expression.type === "Identifier" && expression.name === "undefined" ? astUtils.isReferenceToGlobalVariable(scope, expression) : expression.type === "UnaryExpression" && expression.operator === "void" && expression.argument.type === "Literal" && expression.argument.value === 0;
21
+ }
22
+ /**
23
+ * Returns true iff the reference is either an identifier or member expression
24
+ * @param {ASTNode} expression Expression to check
25
+ * @returns {boolean} True for identifiers and member expressions
26
+ */
27
+ function isReference(expression) {
28
+ return expression.type === "Identifier" && expression.name !== "undefined" || expression.type === "MemberExpression";
29
+ }
30
+ /**
31
+ * Returns true iff the expression checks for nullish with loose equals.
32
+ * Examples: value == null, value == void 0
33
+ * @param {ASTNode} expression Test condition
34
+ * @param {import('eslint-scope').Scope} scope Scope of the expression
35
+ * @returns {boolean} True iff implicit nullish comparison
36
+ */
37
+ function isImplicitNullishComparison(expression, scope) {
38
+ if (expression.type !== "BinaryExpression" || expression.operator !== "==") return !1;
39
+ let reference = isReference(expression.left) ? "left" : "right", nullish = reference === "left" ? "right" : "left";
40
+ return isReference(expression[reference]) && (astUtils.isNullLiteral(expression[nullish]) || isUndefined(expression[nullish], scope));
41
+ }
42
+ /**
43
+ * Condition with two equal comparisons.
44
+ * @param {ASTNode} expression Condition
45
+ * @returns {boolean} True iff matches ? === ? || ? === ?
46
+ */
47
+ function isDoubleComparison(expression) {
48
+ return expression.type === "LogicalExpression" && expression.operator === "||" && expression.left.type === "BinaryExpression" && expression.left.operator === "===" && expression.right.type === "BinaryExpression" && expression.right.operator === "===";
49
+ }
50
+ /**
51
+ * Returns true iff the expression checks for undefined and null.
52
+ * Example: value === null || value === undefined
53
+ * @param {ASTNode} expression Test condition
54
+ * @param {import('eslint-scope').Scope} scope Scope of the expression
55
+ * @returns {boolean} True iff explicit nullish comparison
56
+ */
57
+ function isExplicitNullishComparison(expression, scope) {
58
+ if (!isDoubleComparison(expression)) return !1;
59
+ let leftReference = isReference(expression.left.left) ? "left" : "right", leftNullish = leftReference === "left" ? "right" : "left", rightReference = isReference(expression.right.left) ? "left" : "right", rightNullish = rightReference === "left" ? "right" : "left";
60
+ return astUtils.isSameReference(expression.left[leftReference], expression.right[rightReference]) && (astUtils.isNullLiteral(expression.left[leftNullish]) && isUndefined(expression.right[rightNullish], scope) || isUndefined(expression.left[leftNullish], scope) && astUtils.isNullLiteral(expression.right[rightNullish]));
61
+ }
62
+ /**
63
+ * Returns true for Boolean(arg) calls
64
+ * @param {ASTNode} expression Test condition
65
+ * @param {import('eslint-scope').Scope} scope Scope of the expression
66
+ * @returns {boolean} Whether the expression is a boolean cast
67
+ */
68
+ function isBooleanCast(expression, scope) {
69
+ return expression.type === "CallExpression" && expression.callee.name === "Boolean" && expression.arguments.length === 1 && astUtils.isReferenceToGlobalVariable(scope, expression.callee);
70
+ }
71
+ /**
72
+ * Returns true for:
73
+ * truthiness checks: value, Boolean(value), !!value
74
+ * falsiness checks: !value, !Boolean(value)
75
+ * nullish checks: value == null, value === undefined || value === null
76
+ * @param {ASTNode} expression Test condition
77
+ * @param {import('eslint-scope').Scope} scope Scope of the expression
78
+ * @returns {?{ reference: ASTNode, operator: '??'|'||'|'&&'}} Null if not a known existence
79
+ */
80
+ function getExistence(expression, scope) {
81
+ let isNegated = expression.type === "UnaryExpression" && expression.operator === "!", base = isNegated ? expression.argument : expression;
82
+ switch (!0) {
83
+ case isReference(base): return {
84
+ reference: base,
85
+ operator: isNegated ? "||" : "&&"
86
+ };
87
+ case base.type === "UnaryExpression" && base.operator === "!" && isReference(base.argument): return {
88
+ reference: base.argument,
89
+ operator: "&&"
90
+ };
91
+ case isBooleanCast(base, scope) && isReference(base.arguments[0]): return {
92
+ reference: base.arguments[0],
93
+ operator: isNegated ? "||" : "&&"
94
+ };
95
+ case isImplicitNullishComparison(expression, scope): return {
96
+ reference: isReference(expression.left) ? expression.left : expression.right,
97
+ operator: "??"
98
+ };
99
+ case isExplicitNullishComparison(expression, scope): return {
100
+ reference: isReference(expression.left.left) ? expression.left.left : expression.left.right,
101
+ operator: "??"
102
+ };
103
+ default: return null;
104
+ }
105
+ }
106
+ /**
107
+ * Returns true iff the node is inside a with block
108
+ * @param {ASTNode} node Node to check
109
+ * @returns {boolean} True iff passed node is inside a with block
110
+ */
111
+ function isInsideWithBlock(node) {
112
+ return node.type === "Program" ? !1 : node.parent.type === "WithStatement" && node.parent.body === node ? !0 : isInsideWithBlock(node.parent);
113
+ }
114
+ /**
115
+ * Gets the leftmost operand of a consecutive logical expression.
116
+ * @param {SourceCode} sourceCode The ESLint source code object
117
+ * @param {LogicalExpression} node LogicalExpression
118
+ * @returns {Expression} Leftmost operand
119
+ */
120
+ function getLeftmostOperand(sourceCode, node) {
121
+ let left = node.left;
122
+ for (; left.type === "LogicalExpression" && left.operator === node.operator;) {
123
+ if (astUtils.isParenthesised(sourceCode, left)) return left;
124
+ left = left.left;
125
+ }
126
+ return left;
127
+ }
128
+ /** @type {import('../types').Rule.RuleModule} */
129
+ module.exports = {
130
+ meta: {
131
+ type: "suggestion",
132
+ docs: {
133
+ description: "Require or disallow logical assignment operator shorthand",
134
+ recommended: !1,
135
+ frozen: !0,
136
+ url: "https://eslint.org/docs/latest/rules/logical-assignment-operators"
137
+ },
138
+ schema: {
139
+ type: "array",
140
+ oneOf: [{
141
+ items: [{ const: "always" }, {
142
+ type: "object",
143
+ properties: { enforceForIfStatements: { type: "boolean" } },
144
+ additionalProperties: !1
145
+ }],
146
+ minItems: 0,
147
+ maxItems: 2
148
+ }, {
149
+ items: [{ const: "never" }],
150
+ minItems: 1,
151
+ maxItems: 1
152
+ }]
153
+ },
154
+ fixable: "code",
155
+ hasSuggestions: !0,
156
+ messages: {
157
+ assignment: "Assignment (=) can be replaced with operator assignment ({{operator}}).",
158
+ useLogicalOperator: "Convert this assignment to use the operator {{ operator }}.",
159
+ logical: "Logical expression can be replaced with an assignment ({{ operator }}).",
160
+ convertLogical: "Replace this logical expression with an assignment with the operator {{ operator }}.",
161
+ if: "'if' statement can be replaced with a logical operator assignment with operator {{ operator }}.",
162
+ convertIf: "Replace this 'if' statement with a logical assignment with operator {{ operator }}.",
163
+ unexpected: "Unexpected logical operator assignment ({{operator}}) shorthand.",
164
+ separate: "Separate the logical assignment into an assignment with a logical operator."
165
+ }
166
+ },
167
+ create(context) {
168
+ let mode = context.options[0] === "never" ? "never" : "always", checkIf = mode === "always" && context.options.length > 1 && context.options[1].enforceForIfStatements, sourceCode = context.sourceCode, isStrict = sourceCode.getScope(sourceCode.ast).isStrict;
169
+ /**
170
+ * Returns false if the access could be a getter
171
+ * @param {ASTNode} node Assignment expression
172
+ * @returns {boolean} True iff the fix is safe
173
+ */
174
+ function cannotBeGetter(node) {
175
+ return node.type === "Identifier" && (isStrict || !isInsideWithBlock(node));
176
+ }
177
+ /**
178
+ * Check whether only a single property is accessed
179
+ * @param {ASTNode} node reference
180
+ * @returns {boolean} True iff a single property is accessed
181
+ */
182
+ function accessesSingleProperty(node) {
183
+ return !isStrict && isInsideWithBlock(node) ? node.type === "Identifier" : node.type === "MemberExpression" && baseTypes.has(node.object.type) && (!node.computed || node.property.type !== "MemberExpression" && node.property.type !== "ChainExpression");
184
+ }
185
+ /**
186
+ * Adds a fixer or suggestion whether on the fix is safe.
187
+ * @param {{ messageId: string, node: ASTNode }} descriptor Report descriptor without fix or suggest
188
+ * @param {{ messageId: string, fix: Function }} suggestion Adds the fix or the whole suggestion as only element in "suggest" to suggestion
189
+ * @param {boolean} shouldBeFixed Fix iff the condition is true
190
+ * @returns {Object} Descriptor with either an added fix or suggestion
191
+ */
192
+ function createConditionalFixer(descriptor, suggestion, shouldBeFixed) {
193
+ return shouldBeFixed ? {
194
+ ...descriptor,
195
+ fix: suggestion.fix
196
+ } : {
197
+ ...descriptor,
198
+ suggest: [suggestion]
199
+ };
200
+ }
201
+ /**
202
+ * Returns the operator token for assignments and binary expressions
203
+ * @param {ASTNode} node AssignmentExpression or BinaryExpression
204
+ * @returns {import('eslint').AST.Token} Operator token between the left and right expression
205
+ */
206
+ function getOperatorToken(node) {
207
+ return sourceCode.getFirstTokenBetween(node.left, node.right, (token) => token.value === node.operator);
208
+ }
209
+ return mode === "never" ? { AssignmentExpression(assignment) {
210
+ if (!astUtils.isLogicalAssignmentOperator(assignment.operator)) return;
211
+ let descriptor = {
212
+ messageId: "unexpected",
213
+ node: assignment,
214
+ data: { operator: assignment.operator }
215
+ };
216
+ context.report(createConditionalFixer(descriptor, {
217
+ messageId: "separate",
218
+ *fix(ruleFixer) {
219
+ if (sourceCode.getCommentsInside(assignment).length > 0) return;
220
+ let operatorToken = getOperatorToken(assignment);
221
+ yield ruleFixer.replaceText(operatorToken, "=");
222
+ let assignmentText = sourceCode.getText(assignment.left), operator = assignment.operator.slice(0, -1);
223
+ yield ruleFixer.insertTextAfter(operatorToken, ` ${assignmentText} ${operator}`);
224
+ let precedence = astUtils.getPrecedence(assignment.right) <= astUtils.getPrecedence({
225
+ type: "LogicalExpression",
226
+ operator
227
+ }), mixed = assignment.operator === "??=" && astUtils.isLogicalExpression(assignment.right);
228
+ !astUtils.isParenthesised(sourceCode, assignment.right) && (precedence || mixed) && (yield ruleFixer.insertTextBefore(assignment.right, "("), yield ruleFixer.insertTextAfter(assignment.right, ")"));
229
+ }
230
+ }, cannotBeGetter(assignment.left)));
231
+ } } : {
232
+ "AssignmentExpression[operator='='][right.type='LogicalExpression']"(assignment) {
233
+ let leftOperand = getLeftmostOperand(sourceCode, assignment.right);
234
+ if (!astUtils.isSameReference(assignment.left, leftOperand)) return;
235
+ let descriptor = {
236
+ messageId: "assignment",
237
+ node: assignment,
238
+ data: { operator: `${assignment.right.operator}=` }
239
+ }, suggestion = {
240
+ messageId: "useLogicalOperator",
241
+ data: { operator: `${assignment.right.operator}=` },
242
+ *fix(ruleFixer) {
243
+ if (sourceCode.getCommentsInside(assignment).length > 0) return;
244
+ let assignmentOperatorToken = getOperatorToken(assignment);
245
+ yield ruleFixer.insertTextBefore(assignmentOperatorToken, assignment.right.operator);
246
+ let logicalOperatorToken = getOperatorToken(leftOperand.parent), firstRightOperandToken = sourceCode.getTokenAfter(logicalOperatorToken);
247
+ yield ruleFixer.removeRange([leftOperand.parent.range[0], firstRightOperandToken.range[0]]);
248
+ }
249
+ };
250
+ context.report(createConditionalFixer(descriptor, suggestion, cannotBeGetter(assignment.left)));
251
+ },
252
+ "LogicalExpression[right.type=\"AssignmentExpression\"][right.operator=\"=\"]"(logical) {
253
+ if (isReference(logical.left) && astUtils.isSameReference(logical.left, logical.right.left)) {
254
+ let descriptor = {
255
+ messageId: "logical",
256
+ node: logical,
257
+ data: { operator: `${logical.operator}=` }
258
+ }, suggestion = {
259
+ messageId: "convertLogical",
260
+ data: { operator: `${logical.operator}=` },
261
+ *fix(ruleFixer) {
262
+ if (sourceCode.getCommentsInside(logical).length > 0) return;
263
+ let parentPrecedence = astUtils.getPrecedence(logical.parent), requiresOuterParenthesis = logical.parent.type !== "ExpressionStatement" && (parentPrecedence === -1 || astUtils.getPrecedence({ type: "AssignmentExpression" }) < parentPrecedence);
264
+ !astUtils.isParenthesised(sourceCode, logical) && requiresOuterParenthesis && (yield ruleFixer.insertTextBefore(logical, "("), yield ruleFixer.insertTextAfter(logical, ")")), yield ruleFixer.removeRange([logical.range[0], logical.right.range[0]]), yield ruleFixer.removeRange([logical.right.range[1], logical.range[1]]);
265
+ let operatorToken = getOperatorToken(logical.right);
266
+ yield ruleFixer.insertTextBefore(operatorToken, logical.operator);
267
+ }
268
+ }, fix = cannotBeGetter(logical.left) || accessesSingleProperty(logical.left);
269
+ context.report(createConditionalFixer(descriptor, suggestion, fix));
270
+ }
271
+ },
272
+ "IfStatement[alternate=null]"(ifNode) {
273
+ if (!checkIf) return;
274
+ let hasBody = ifNode.consequent.type === "BlockStatement";
275
+ if (hasBody && ifNode.consequent.body.length !== 1) return;
276
+ let body = hasBody ? ifNode.consequent.body[0] : ifNode.consequent, scope = sourceCode.getScope(ifNode), existence = getExistence(ifNode.test, scope);
277
+ if (body.type === "ExpressionStatement" && body.expression.type === "AssignmentExpression" && body.expression.operator === "=" && existence !== null && astUtils.isSameReference(existence.reference, body.expression.left)) {
278
+ let descriptor = {
279
+ messageId: "if",
280
+ node: ifNode,
281
+ data: { operator: `${existence.operator}=` }
282
+ }, suggestion = {
283
+ messageId: "convertIf",
284
+ data: { operator: `${existence.operator}=` },
285
+ *fix(ruleFixer) {
286
+ if (sourceCode.getCommentsInside(ifNode).length > 0) return;
287
+ let firstBodyToken = sourceCode.getFirstToken(body), prevToken = sourceCode.getTokenBefore(ifNode);
288
+ if (prevToken !== null && prevToken.value !== ";" && prevToken.value !== "{" && firstBodyToken.type !== "Identifier" && firstBodyToken.type !== "Keyword") return;
289
+ let operatorToken = getOperatorToken(body.expression);
290
+ yield ruleFixer.insertTextBefore(operatorToken, existence.operator), yield ruleFixer.removeRange([ifNode.range[0], body.range[0]]), yield ruleFixer.removeRange([body.range[1], ifNode.range[1]]);
291
+ let nextToken = sourceCode.getTokenAfter(body.expression);
292
+ hasBody && nextToken !== null && nextToken.value !== ";" && (yield ruleFixer.insertTextAfter(ifNode, ";"));
293
+ }
294
+ }, shouldBeFixed = cannotBeGetter(existence.reference) || ifNode.test.type !== "LogicalExpression" && accessesSingleProperty(existence.reference);
295
+ context.report(createConditionalFixer(descriptor, suggestion, shouldBeFixed));
296
+ }
297
+ }
298
+ };
299
+ }
300
+ };
301
+ }));
302
+ //#endregion
303
+ //#region src-js/generated/plugin-eslint/rules/logical-assignment-operators.cjs
304
+ module.exports = require_logical_assignment_operators().create;
305
+ //#endregion
@@ -0,0 +1,61 @@
1
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/max-classes-per-file.js
2
+ /**
3
+ * @fileoverview Enforce a maximum number of classes per file
4
+ * @author James Garbutt <https://github.com/43081j>
5
+ */
6
+ var require_max_classes_per_file = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
7
+ /** @type {import('../types').Rule.RuleModule} */
8
+ module.exports = {
9
+ meta: {
10
+ type: "suggestion",
11
+ docs: {
12
+ description: "Enforce a maximum number of classes per file",
13
+ recommended: !1,
14
+ url: "https://eslint.org/docs/latest/rules/max-classes-per-file"
15
+ },
16
+ schema: [{ oneOf: [{
17
+ type: "integer",
18
+ minimum: 1
19
+ }, {
20
+ type: "object",
21
+ properties: {
22
+ ignoreExpressions: { type: "boolean" },
23
+ max: {
24
+ type: "integer",
25
+ minimum: 1
26
+ }
27
+ },
28
+ additionalProperties: !1
29
+ }] }],
30
+ messages: { maximumExceeded: "File has too many classes ({{ classCount }}). Maximum allowed is {{ max }}." }
31
+ },
32
+ create(context) {
33
+ let [option = {}] = context.options, [ignoreExpressions, max] = typeof option == "number" ? [!1, option || 1] : [option.ignoreExpressions, option.max || 1], classCount = 0;
34
+ return {
35
+ Program() {
36
+ classCount = 0;
37
+ },
38
+ "Program:exit"(node) {
39
+ classCount > max && context.report({
40
+ node,
41
+ messageId: "maximumExceeded",
42
+ data: {
43
+ classCount,
44
+ max
45
+ }
46
+ });
47
+ },
48
+ ClassDeclaration() {
49
+ classCount++;
50
+ },
51
+ ClassExpression() {
52
+ ignoreExpressions || classCount++;
53
+ }
54
+ };
55
+ }
56
+ };
57
+ }));
58
+ //#endregion
59
+ //#region src-js/generated/plugin-eslint/rules/max-classes-per-file.cjs
60
+ module.exports = require_max_classes_per_file().create;
61
+ //#endregion
@@ -0,0 +1,117 @@
1
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/max-depth.js
2
+ /**
3
+ * @fileoverview A rule to set the maximum depth block can be nested in a function.
4
+ * @author Ian Christian Myers
5
+ */
6
+ var require_max_depth = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
7
+ /** @type {import('../types').Rule.RuleModule} */
8
+ module.exports = {
9
+ meta: {
10
+ type: "suggestion",
11
+ docs: {
12
+ description: "Enforce a maximum depth that blocks can be nested",
13
+ recommended: !1,
14
+ url: "https://eslint.org/docs/latest/rules/max-depth"
15
+ },
16
+ schema: [{ oneOf: [{
17
+ type: "integer",
18
+ minimum: 0
19
+ }, {
20
+ type: "object",
21
+ properties: {
22
+ maximum: {
23
+ type: "integer",
24
+ minimum: 0
25
+ },
26
+ max: {
27
+ type: "integer",
28
+ minimum: 0
29
+ }
30
+ },
31
+ additionalProperties: !1
32
+ }] }],
33
+ messages: { tooDeeply: "Blocks are nested too deeply ({{depth}}). Maximum allowed is {{maxDepth}}." }
34
+ },
35
+ create(context) {
36
+ let functionStack = [], option = context.options[0], maxDepth = 4;
37
+ typeof option == "object" && (Object.hasOwn(option, "maximum") || Object.hasOwn(option, "max")) && (maxDepth = option.maximum || option.max), typeof option == "number" && (maxDepth = option);
38
+ /**
39
+ * When parsing a new function, store it in our function stack
40
+ * @returns {void}
41
+ * @private
42
+ */
43
+ function startFunction() {
44
+ functionStack.push(0);
45
+ }
46
+ /**
47
+ * When parsing is done then pop out the reference
48
+ * @returns {void}
49
+ * @private
50
+ */
51
+ function endFunction() {
52
+ functionStack.pop();
53
+ }
54
+ /**
55
+ * Save the block and Evaluate the node
56
+ * @param {ASTNode} node node to evaluate
57
+ * @returns {void}
58
+ * @private
59
+ */
60
+ function pushBlock(node) {
61
+ let len = ++functionStack[functionStack.length - 1];
62
+ len > maxDepth && context.report({
63
+ node,
64
+ messageId: "tooDeeply",
65
+ data: {
66
+ depth: len,
67
+ maxDepth
68
+ }
69
+ });
70
+ }
71
+ /**
72
+ * Pop the saved block
73
+ * @returns {void}
74
+ * @private
75
+ */
76
+ function popBlock() {
77
+ functionStack[functionStack.length - 1]--;
78
+ }
79
+ return {
80
+ Program: startFunction,
81
+ FunctionDeclaration: startFunction,
82
+ FunctionExpression: startFunction,
83
+ ArrowFunctionExpression: startFunction,
84
+ StaticBlock: startFunction,
85
+ IfStatement(node) {
86
+ node.parent.type !== "IfStatement" && pushBlock(node);
87
+ },
88
+ SwitchStatement: pushBlock,
89
+ TryStatement: pushBlock,
90
+ DoWhileStatement: pushBlock,
91
+ WhileStatement: pushBlock,
92
+ WithStatement: pushBlock,
93
+ ForStatement: pushBlock,
94
+ ForInStatement: pushBlock,
95
+ ForOfStatement: pushBlock,
96
+ "IfStatement:exit": popBlock,
97
+ "SwitchStatement:exit": popBlock,
98
+ "TryStatement:exit": popBlock,
99
+ "DoWhileStatement:exit": popBlock,
100
+ "WhileStatement:exit": popBlock,
101
+ "WithStatement:exit": popBlock,
102
+ "ForStatement:exit": popBlock,
103
+ "ForInStatement:exit": popBlock,
104
+ "ForOfStatement:exit": popBlock,
105
+ "FunctionDeclaration:exit": endFunction,
106
+ "FunctionExpression:exit": endFunction,
107
+ "ArrowFunctionExpression:exit": endFunction,
108
+ "StaticBlock:exit": endFunction,
109
+ "Program:exit": endFunction
110
+ };
111
+ }
112
+ };
113
+ }));
114
+ //#endregion
115
+ //#region src-js/generated/plugin-eslint/rules/max-depth.cjs
116
+ module.exports = require_max_depth().create;
117
+ //#endregion