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,103 @@
1
+ const require_chunk = require("../common/chunk.cjs"), require_ast_utils$1 = require("../common/ast-utils.cjs"), require_fix_tracker$1 = require("../common/fix-tracker.cjs");
2
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/no-extra-semi.js
3
+ /**
4
+ * @fileoverview Rule to flag use of unnecessary semicolons
5
+ * @author Nicholas C. Zakas
6
+ * @deprecated in ESLint v8.53.0
7
+ */
8
+ var require_no_extra_semi = /* @__PURE__ */ require_chunk.t(((exports, module) => {
9
+ let FixTracker = require_fix_tracker$1.t(), astUtils = require_ast_utils$1.t();
10
+ /** @type {import('../types').Rule.RuleModule} */
11
+ module.exports = {
12
+ meta: {
13
+ deprecated: {
14
+ message: "Formatting rules are being moved out of ESLint core.",
15
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
16
+ deprecatedSince: "8.53.0",
17
+ availableUntil: "11.0.0",
18
+ replacedBy: [{
19
+ message: "ESLint Stylistic now maintains deprecated stylistic core rules.",
20
+ url: "https://eslint.style/guide/migration",
21
+ plugin: {
22
+ name: "@stylistic/eslint-plugin",
23
+ url: "https://eslint.style"
24
+ },
25
+ rule: {
26
+ name: "no-extra-semi",
27
+ url: "https://eslint.style/rules/no-extra-semi"
28
+ }
29
+ }]
30
+ },
31
+ type: "suggestion",
32
+ docs: {
33
+ description: "Disallow unnecessary semicolons",
34
+ recommended: !1,
35
+ url: "https://eslint.org/docs/latest/rules/no-extra-semi"
36
+ },
37
+ fixable: "code",
38
+ schema: [],
39
+ messages: { unexpected: "Unnecessary semicolon." }
40
+ },
41
+ create(context) {
42
+ let sourceCode = context.sourceCode;
43
+ /**
44
+ * Checks if a node or token is fixable.
45
+ * A node is fixable if it can be removed without turning a subsequent statement into a directive after fixing other nodes.
46
+ * @param {Token} nodeOrToken The node or token to check.
47
+ * @returns {boolean} Whether or not the node is fixable.
48
+ */
49
+ function isFixable(nodeOrToken) {
50
+ let nextToken = sourceCode.getTokenAfter(nodeOrToken);
51
+ if (!nextToken || nextToken.type !== "String") return !0;
52
+ let stringNode = sourceCode.getNodeByRangeIndex(nextToken.range[0]);
53
+ return !astUtils.isTopLevelExpressionStatement(stringNode.parent);
54
+ }
55
+ /**
56
+ * Reports an unnecessary semicolon error.
57
+ * @param {Node|Token} nodeOrToken A node or a token to be reported.
58
+ * @returns {void}
59
+ */
60
+ function report(nodeOrToken) {
61
+ context.report({
62
+ node: nodeOrToken,
63
+ messageId: "unexpected",
64
+ fix: isFixable(nodeOrToken) ? (fixer) => new FixTracker(fixer, context.sourceCode).retainSurroundingTokens(nodeOrToken).remove(nodeOrToken) : null
65
+ });
66
+ }
67
+ /**
68
+ * Checks for a part of a class body.
69
+ * This checks tokens from a specified token to a next MethodDefinition or the end of class body.
70
+ * @param {Token} firstToken The first token to check.
71
+ * @returns {void}
72
+ */
73
+ function checkForPartOfClassBody(firstToken) {
74
+ for (let token = firstToken; token.type === "Punctuator" && !astUtils.isClosingBraceToken(token); token = sourceCode.getTokenAfter(token)) astUtils.isSemicolonToken(token) && report(token);
75
+ }
76
+ return {
77
+ EmptyStatement(node) {
78
+ let parent = node.parent;
79
+ [
80
+ "ForStatement",
81
+ "ForInStatement",
82
+ "ForOfStatement",
83
+ "WhileStatement",
84
+ "DoWhileStatement",
85
+ "IfStatement",
86
+ "LabeledStatement",
87
+ "WithStatement"
88
+ ].includes(parent.type) || report(node);
89
+ },
90
+ ClassBody(node) {
91
+ checkForPartOfClassBody(sourceCode.getFirstToken(node, 1));
92
+ },
93
+ "MethodDefinition, PropertyDefinition, StaticBlock"(node) {
94
+ checkForPartOfClassBody(sourceCode.getTokenAfter(node));
95
+ }
96
+ };
97
+ }
98
+ };
99
+ }));
100
+ //#endregion
101
+ //#region src-js/generated/plugin-eslint/rules/no-extra-semi.cjs
102
+ module.exports = require_no_extra_semi().create;
103
+ //#endregion
@@ -0,0 +1,136 @@
1
+ const require_chunk = require("../common/chunk.cjs");
2
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/shared/directives.js
3
+ /**
4
+ * @fileoverview Common utils for directives.
5
+ *
6
+ * This file contains only shared items for directives.
7
+ * If you make a utility for rules, please see `../rules/utils/ast-utils.js`.
8
+ *
9
+ * @author gfyoung <https://github.com/gfyoung>
10
+ */
11
+ var require_directives = /* @__PURE__ */ require_chunk.t(((exports, module) => {
12
+ module.exports = { directivesPattern: /^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\s|$)/u };
13
+ })), require_no_fallthrough = /* @__PURE__ */ require_chunk.t(((exports, module) => {
14
+ let { directivesPattern } = require_directives(), DEFAULT_FALLTHROUGH_COMMENT = /falls?\s?through/iu;
15
+ /**
16
+ * Checks all segments in a set and returns true if any are reachable.
17
+ * @param {Set<CodePathSegment>} segments The segments to check.
18
+ * @returns {boolean} True if any segment is reachable; false otherwise.
19
+ */
20
+ function isAnySegmentReachable(segments) {
21
+ for (let segment of segments) if (segment.reachable) return !0;
22
+ return !1;
23
+ }
24
+ /**
25
+ * Checks whether or not a given comment string is really a fallthrough comment and not an ESLint directive.
26
+ * @param {string} comment The comment string to check.
27
+ * @param {RegExp} fallthroughCommentPattern The regular expression used for checking for fallthrough comments.
28
+ * @returns {boolean} `true` if the comment string is truly a fallthrough comment.
29
+ */
30
+ function isFallThroughComment(comment, fallthroughCommentPattern) {
31
+ return fallthroughCommentPattern.test(comment) && !directivesPattern.test(comment.trim());
32
+ }
33
+ /**
34
+ * Checks whether or not a given case has a fallthrough comment.
35
+ * @param {ASTNode} caseWhichFallsThrough SwitchCase node which falls through.
36
+ * @param {ASTNode} subsequentCase The case after caseWhichFallsThrough.
37
+ * @param {RuleContext} context A rule context which stores comments.
38
+ * @param {RegExp} fallthroughCommentPattern A pattern to match comment to.
39
+ * @returns {null | object} the comment if the case has a valid fallthrough comment, otherwise null
40
+ */
41
+ function getFallthroughComment(caseWhichFallsThrough, subsequentCase, context, fallthroughCommentPattern) {
42
+ let sourceCode = context.sourceCode;
43
+ if (caseWhichFallsThrough.consequent.length === 1 && caseWhichFallsThrough.consequent[0].type === "BlockStatement") {
44
+ let trailingCloseBrace = sourceCode.getLastToken(caseWhichFallsThrough.consequent[0]), commentInBlock = sourceCode.getCommentsBefore(trailingCloseBrace).pop();
45
+ if (commentInBlock && isFallThroughComment(commentInBlock.value, fallthroughCommentPattern)) return commentInBlock;
46
+ }
47
+ let comment = sourceCode.getCommentsBefore(subsequentCase).pop();
48
+ return comment && isFallThroughComment(comment.value, fallthroughCommentPattern) ? comment : null;
49
+ }
50
+ /**
51
+ * Checks whether a node and a token are separated by blank lines
52
+ * @param {ASTNode} node The node to check
53
+ * @param {Token} token The token to compare against
54
+ * @returns {boolean} `true` if there are blank lines between node and token
55
+ */
56
+ function hasBlankLinesBetween(node, token) {
57
+ return token.loc.start.line > node.loc.end.line + 1;
58
+ }
59
+ /** @type {import('../types').Rule.RuleModule} */
60
+ module.exports = {
61
+ meta: {
62
+ type: "problem",
63
+ defaultOptions: [{
64
+ allowEmptyCase: !1,
65
+ reportUnusedFallthroughComment: !1
66
+ }],
67
+ docs: {
68
+ description: "Disallow fallthrough of `case` statements",
69
+ recommended: !0,
70
+ url: "https://eslint.org/docs/latest/rules/no-fallthrough"
71
+ },
72
+ schema: [{
73
+ type: "object",
74
+ properties: {
75
+ commentPattern: { type: "string" },
76
+ allowEmptyCase: { type: "boolean" },
77
+ reportUnusedFallthroughComment: { type: "boolean" }
78
+ },
79
+ additionalProperties: !1
80
+ }],
81
+ messages: {
82
+ unusedFallthroughComment: "Found a comment that would permit fallthrough, but case cannot fall through.",
83
+ case: "Expected a 'break' statement before 'case'.",
84
+ default: "Expected a 'break' statement before 'default'."
85
+ }
86
+ },
87
+ create(context) {
88
+ let codePathSegments = [], currentCodePathSegments = /* @__PURE__ */ new Set(), sourceCode = context.sourceCode, [{ allowEmptyCase, commentPattern, reportUnusedFallthroughComment }] = context.options, fallthroughCommentPattern = commentPattern ? new RegExp(commentPattern, "u") : DEFAULT_FALLTHROUGH_COMMENT, previousCase = null;
89
+ return {
90
+ onCodePathStart() {
91
+ codePathSegments.push(currentCodePathSegments), currentCodePathSegments = /* @__PURE__ */ new Set();
92
+ },
93
+ onCodePathEnd() {
94
+ currentCodePathSegments = codePathSegments.pop();
95
+ },
96
+ onUnreachableCodePathSegmentStart(segment) {
97
+ currentCodePathSegments.add(segment);
98
+ },
99
+ onUnreachableCodePathSegmentEnd(segment) {
100
+ currentCodePathSegments.delete(segment);
101
+ },
102
+ onCodePathSegmentStart(segment) {
103
+ currentCodePathSegments.add(segment);
104
+ },
105
+ onCodePathSegmentEnd(segment) {
106
+ currentCodePathSegments.delete(segment);
107
+ },
108
+ SwitchCase(node) {
109
+ if (previousCase && previousCase.node.parent === node.parent) {
110
+ let previousCaseFallthroughComment = getFallthroughComment(previousCase.node, node, context, fallthroughCommentPattern);
111
+ previousCase.isFallthrough && !previousCaseFallthroughComment ? context.report({
112
+ messageId: node.test ? "case" : "default",
113
+ node
114
+ }) : reportUnusedFallthroughComment && !previousCase.isSwitchExitReachable && previousCaseFallthroughComment && context.report({
115
+ messageId: "unusedFallthroughComment",
116
+ node: previousCaseFallthroughComment
117
+ });
118
+ }
119
+ previousCase = null;
120
+ },
121
+ "SwitchCase:exit"(node) {
122
+ let nextToken = sourceCode.getTokenAfter(node), isSwitchExitReachable = isAnySegmentReachable(currentCodePathSegments);
123
+ previousCase = {
124
+ node,
125
+ isSwitchExitReachable,
126
+ isFallthrough: isSwitchExitReachable && (node.consequent.length > 0 || !allowEmptyCase && hasBlankLinesBetween(node, nextToken)) && node.parent.cases.at(-1) !== node
127
+ };
128
+ }
129
+ };
130
+ }
131
+ };
132
+ }));
133
+ //#endregion
134
+ //#region src-js/generated/plugin-eslint/rules/no-fallthrough.cjs
135
+ module.exports = require_no_fallthrough().create;
136
+ //#endregion
@@ -0,0 +1,66 @@
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/no-floating-decimal.js
3
+ /**
4
+ * @fileoverview Rule to flag use of a leading/trailing decimal point in a numeric literal
5
+ * @author James Allardice
6
+ * @deprecated in ESLint v8.53.0
7
+ */
8
+ var require_no_floating_decimal = /* @__PURE__ */ require_chunk.t(((exports, module) => {
9
+ let astUtils = require_ast_utils$1.t();
10
+ /** @type {import('../types').Rule.RuleModule} */
11
+ module.exports = {
12
+ meta: {
13
+ deprecated: {
14
+ message: "Formatting rules are being moved out of ESLint core.",
15
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
16
+ deprecatedSince: "8.53.0",
17
+ availableUntil: "11.0.0",
18
+ replacedBy: [{
19
+ message: "ESLint Stylistic now maintains deprecated stylistic core rules.",
20
+ url: "https://eslint.style/guide/migration",
21
+ plugin: {
22
+ name: "@stylistic/eslint-plugin",
23
+ url: "https://eslint.style"
24
+ },
25
+ rule: {
26
+ name: "no-floating-decimal",
27
+ url: "https://eslint.style/rules/no-floating-decimal"
28
+ }
29
+ }]
30
+ },
31
+ type: "suggestion",
32
+ docs: {
33
+ description: "Disallow leading or trailing decimal points in numeric literals",
34
+ recommended: !1,
35
+ url: "https://eslint.org/docs/latest/rules/no-floating-decimal"
36
+ },
37
+ schema: [],
38
+ fixable: "code",
39
+ messages: {
40
+ leading: "A leading decimal point can be confused with a dot.",
41
+ trailing: "A trailing decimal point can be confused with a dot."
42
+ }
43
+ },
44
+ create(context) {
45
+ let sourceCode = context.sourceCode;
46
+ return { Literal(node) {
47
+ typeof node.value == "number" && (node.raw.startsWith(".") && context.report({
48
+ node,
49
+ messageId: "leading",
50
+ fix(fixer) {
51
+ let tokenBefore = sourceCode.getTokenBefore(node), needsSpaceBefore = tokenBefore && tokenBefore.range[1] === node.range[0] && !astUtils.canTokensBeAdjacent(tokenBefore, `0${node.raw}`);
52
+ return fixer.insertTextBefore(node, needsSpaceBefore ? " 0" : "0");
53
+ }
54
+ }), node.raw.indexOf(".") === node.raw.length - 1 && context.report({
55
+ node,
56
+ messageId: "trailing",
57
+ fix: (fixer) => fixer.insertTextAfter(node, "0")
58
+ }));
59
+ } };
60
+ }
61
+ };
62
+ }));
63
+ //#endregion
64
+ //#region src-js/generated/plugin-eslint/rules/no-floating-decimal.cjs
65
+ module.exports = require_no_floating_decimal().create;
66
+ //#endregion
@@ -0,0 +1,63 @@
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/no-func-assign.js
3
+ /**
4
+ * @fileoverview Rule to flag use of function declaration identifiers as variables.
5
+ * @author Ian Christian Myers
6
+ */
7
+ var require_no_func_assign = /* @__PURE__ */ require_chunk.t(((exports, module) => {
8
+ let astUtils = require_ast_utils$1.t();
9
+ /** @type {import('../types').Rule.RuleModule} */
10
+ module.exports = {
11
+ meta: {
12
+ type: "problem",
13
+ docs: {
14
+ description: "Disallow reassigning `function` declarations",
15
+ recommended: !0,
16
+ url: "https://eslint.org/docs/latest/rules/no-func-assign"
17
+ },
18
+ schema: [],
19
+ messages: { isAFunction: "'{{name}}' is a function." }
20
+ },
21
+ create(context) {
22
+ let sourceCode = context.sourceCode;
23
+ /**
24
+ * Reports a reference if is non initializer and writable.
25
+ * @param {References} references Collection of reference to check.
26
+ * @returns {void}
27
+ */
28
+ function checkReference(references) {
29
+ astUtils.getModifyingReferences(references).forEach((reference) => {
30
+ context.report({
31
+ node: reference.identifier,
32
+ messageId: "isAFunction",
33
+ data: { name: reference.identifier.name }
34
+ });
35
+ });
36
+ }
37
+ /**
38
+ * Finds and reports references that are non initializer and writable.
39
+ * @param {Variable} variable A variable to check.
40
+ * @returns {void}
41
+ */
42
+ function checkVariable(variable) {
43
+ variable.defs[0].type === "FunctionName" && checkReference(variable.references);
44
+ }
45
+ /**
46
+ * Checks parameters of a given function node.
47
+ * @param {ASTNode} node A function node to check.
48
+ * @returns {void}
49
+ */
50
+ function checkForFunction(node) {
51
+ sourceCode.getDeclaredVariables(node).forEach(checkVariable);
52
+ }
53
+ return {
54
+ FunctionDeclaration: checkForFunction,
55
+ FunctionExpression: checkForFunction
56
+ };
57
+ }
58
+ };
59
+ }));
60
+ //#endregion
61
+ //#region src-js/generated/plugin-eslint/rules/no-func-assign.cjs
62
+ module.exports = require_no_func_assign().create;
63
+ //#endregion
@@ -0,0 +1,62 @@
1
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/no-global-assign.js
2
+ /**
3
+ * @fileoverview Rule to disallow assignments to native objects or read-only global variables
4
+ * @author Ilya Volodin
5
+ */
6
+ var require_no_global_assign = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
7
+ /** @type {import('../types').Rule.RuleModule} */
8
+ module.exports = {
9
+ meta: {
10
+ type: "suggestion",
11
+ defaultOptions: [{ exceptions: [] }],
12
+ docs: {
13
+ description: "Disallow assignments to native objects or read-only global variables",
14
+ recommended: !0,
15
+ url: "https://eslint.org/docs/latest/rules/no-global-assign"
16
+ },
17
+ schema: [{
18
+ type: "object",
19
+ properties: { exceptions: {
20
+ type: "array",
21
+ items: { type: "string" },
22
+ uniqueItems: !0
23
+ } },
24
+ additionalProperties: !1
25
+ }],
26
+ messages: { globalShouldNotBeModified: "Read-only global '{{name}}' should not be modified." }
27
+ },
28
+ create(context) {
29
+ let sourceCode = context.sourceCode, [{ exceptions }] = context.options;
30
+ /**
31
+ * Reports write references.
32
+ * @param {Reference} reference A reference to check.
33
+ * @param {number} index The index of the reference in the references.
34
+ * @param {Reference[]} references The array that the reference belongs to.
35
+ * @returns {void}
36
+ */
37
+ function checkReference(reference, index, references) {
38
+ let identifier = reference.identifier;
39
+ reference.init === !1 && reference.isWrite() && (index === 0 || references[index - 1].identifier !== identifier) && context.report({
40
+ node: identifier,
41
+ messageId: "globalShouldNotBeModified",
42
+ data: { name: identifier.name }
43
+ });
44
+ }
45
+ /**
46
+ * Reports write references if a given variable is read-only builtin.
47
+ * @param {Variable} variable A variable to check.
48
+ * @returns {void}
49
+ */
50
+ function checkVariable(variable) {
51
+ variable.writeable === !1 && !exceptions.includes(variable.name) && variable.references.forEach(checkReference);
52
+ }
53
+ return { Program(node) {
54
+ sourceCode.getScope(node).variables.forEach(checkVariable);
55
+ } };
56
+ }
57
+ };
58
+ }));
59
+ //#endregion
60
+ //#region src-js/generated/plugin-eslint/rules/no-global-assign.cjs
61
+ module.exports = require_no_global_assign().create;
62
+ //#endregion
@@ -0,0 +1,219 @@
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/no-implicit-coercion.js
3
+ /**
4
+ * @fileoverview A rule to disallow the type conversions with shorter notations.
5
+ * @author Toru Nagashima
6
+ */
7
+ var require_no_implicit_coercion = /* @__PURE__ */ require_chunk.t(((exports, module) => {
8
+ let astUtils = require_ast_utils$1.t(), INDEX_OF_PATTERN = /^(?:i|lastI)ndexOf$/u, ALLOWABLE_OPERATORS = [
9
+ "~",
10
+ "!!",
11
+ "+",
12
+ "- -",
13
+ "-",
14
+ "*"
15
+ ];
16
+ /**
17
+ * Checks whether or not a node is a double logical negating.
18
+ * @param {ASTNode} node An UnaryExpression node to check.
19
+ * @returns {boolean} Whether or not the node is a double logical negating.
20
+ */
21
+ function isDoubleLogicalNegating(node) {
22
+ return node.operator === "!" && node.argument.type === "UnaryExpression" && node.argument.operator === "!";
23
+ }
24
+ /**
25
+ * Checks whether or not a node is a binary negating of `.indexOf()` method calling.
26
+ * @param {ASTNode} node An UnaryExpression node to check.
27
+ * @returns {boolean} Whether or not the node is a binary negating of `.indexOf()` method calling.
28
+ */
29
+ function isBinaryNegatingOfIndexOf(node) {
30
+ if (node.operator !== "~") return !1;
31
+ let callNode = astUtils.skipChainExpression(node.argument);
32
+ return callNode.type === "CallExpression" && astUtils.isSpecificMemberAccess(callNode.callee, null, INDEX_OF_PATTERN);
33
+ }
34
+ /**
35
+ * Checks whether or not a node is a multiplying by one.
36
+ * @param {BinaryExpression} node A BinaryExpression node to check.
37
+ * @returns {boolean} Whether or not the node is a multiplying by one.
38
+ */
39
+ function isMultiplyByOne(node) {
40
+ return node.operator === "*" && (node.left.type === "Literal" && node.left.value === 1 || node.right.type === "Literal" && node.right.value === 1);
41
+ }
42
+ /**
43
+ * Checks whether the given node logically represents multiplication by a fraction of `1`.
44
+ * For example, `a * 1` in `a * 1 / b` is technically multiplication by `1`, but the
45
+ * whole expression can be logically interpreted as `a * (1 / b)` rather than `(a * 1) / b`.
46
+ * @param {BinaryExpression} node A BinaryExpression node to check.
47
+ * @param {SourceCode} sourceCode The source code object.
48
+ * @returns {boolean} Whether or not the node is a multiplying by a fraction of `1`.
49
+ */
50
+ function isMultiplyByFractionOfOne(node, sourceCode) {
51
+ return node.type === "BinaryExpression" && node.operator === "*" && node.right.type === "Literal" && node.right.value === 1 && node.parent.type === "BinaryExpression" && node.parent.operator === "/" && node.parent.left === node && !astUtils.isParenthesised(sourceCode, node);
52
+ }
53
+ /**
54
+ * Checks whether the result of a node is numeric or not
55
+ * @param {ASTNode} node The node to test
56
+ * @returns {boolean} true if the node is a number literal or a `Number()`, `parseInt` or `parseFloat` call
57
+ */
58
+ function isNumeric(node) {
59
+ return node.type === "Literal" && typeof node.value == "number" || node.type === "CallExpression" && (node.callee.name === "Number" || node.callee.name === "parseInt" || node.callee.name === "parseFloat");
60
+ }
61
+ /**
62
+ * Returns the first non-numeric operand in a BinaryExpression. Designed to be
63
+ * used from bottom to up since it walks up the BinaryExpression trees using
64
+ * node.parent to find the result.
65
+ * @param {BinaryExpression} node The BinaryExpression node to be walked up on
66
+ * @returns {ASTNode|null} The first non-numeric item in the BinaryExpression tree or null
67
+ */
68
+ function getNonNumericOperand(node) {
69
+ let left = node.left, right = node.right;
70
+ return right.type !== "BinaryExpression" && !isNumeric(right) ? right : left.type !== "BinaryExpression" && !isNumeric(left) ? left : null;
71
+ }
72
+ /**
73
+ * Checks whether an expression evaluates to a string.
74
+ * @param {ASTNode} node node that represents the expression to check.
75
+ * @returns {boolean} Whether or not the expression evaluates to a string.
76
+ */
77
+ function isStringType(node) {
78
+ return astUtils.isStringLiteral(node) || node.type === "CallExpression" && node.callee.type === "Identifier" && node.callee.name === "String";
79
+ }
80
+ /**
81
+ * Checks whether a node is an empty string literal or not.
82
+ * @param {ASTNode} node The node to check.
83
+ * @returns {boolean} Whether or not the passed in node is an
84
+ * empty string literal or not.
85
+ */
86
+ function isEmptyString(node) {
87
+ return astUtils.isStringLiteral(node) && (node.value === "" || node.type === "TemplateLiteral" && node.quasis.length === 1 && node.quasis[0].value.cooked === "");
88
+ }
89
+ /**
90
+ * Checks whether or not a node is a concatenating with an empty string.
91
+ * @param {ASTNode} node A BinaryExpression node to check.
92
+ * @returns {boolean} Whether or not the node is a concatenating with an empty string.
93
+ */
94
+ function isConcatWithEmptyString(node) {
95
+ return node.operator === "+" && (isEmptyString(node.left) && !isStringType(node.right) || isEmptyString(node.right) && !isStringType(node.left));
96
+ }
97
+ /**
98
+ * Checks whether or not a node is appended with an empty string.
99
+ * @param {ASTNode} node An AssignmentExpression node to check.
100
+ * @returns {boolean} Whether or not the node is appended with an empty string.
101
+ */
102
+ function isAppendEmptyString(node) {
103
+ return node.operator === "+=" && isEmptyString(node.right);
104
+ }
105
+ /**
106
+ * Returns the operand that is not an empty string from a flagged BinaryExpression.
107
+ * @param {ASTNode} node The flagged BinaryExpression node to check.
108
+ * @returns {ASTNode} The operand that is not an empty string from a flagged BinaryExpression.
109
+ */
110
+ function getNonEmptyOperand(node) {
111
+ return isEmptyString(node.left) ? node.right : node.left;
112
+ }
113
+ /** @type {import('../types').Rule.RuleModule} */
114
+ module.exports = {
115
+ meta: {
116
+ hasSuggestions: !0,
117
+ type: "suggestion",
118
+ docs: {
119
+ description: "Disallow shorthand type conversions",
120
+ recommended: !1,
121
+ frozen: !0,
122
+ url: "https://eslint.org/docs/latest/rules/no-implicit-coercion"
123
+ },
124
+ fixable: "code",
125
+ schema: [{
126
+ type: "object",
127
+ properties: {
128
+ boolean: { type: "boolean" },
129
+ number: { type: "boolean" },
130
+ string: { type: "boolean" },
131
+ disallowTemplateShorthand: { type: "boolean" },
132
+ allow: {
133
+ type: "array",
134
+ items: { enum: ALLOWABLE_OPERATORS },
135
+ uniqueItems: !0
136
+ }
137
+ },
138
+ additionalProperties: !1
139
+ }],
140
+ defaultOptions: [{
141
+ allow: [],
142
+ boolean: !0,
143
+ disallowTemplateShorthand: !1,
144
+ number: !0,
145
+ string: !0
146
+ }],
147
+ messages: {
148
+ implicitCoercion: "Unexpected implicit coercion encountered. Use `{{recommendation}}` instead.",
149
+ useRecommendation: "Use `{{recommendation}}` instead."
150
+ }
151
+ },
152
+ create(context) {
153
+ let [options] = context.options, sourceCode = context.sourceCode;
154
+ /**
155
+ * Reports an error and autofixes the node
156
+ * @param {ASTNode} node An ast node to report the error on.
157
+ * @param {string} recommendation The recommended code for the issue
158
+ * @param {bool} shouldSuggest Whether this report should offer a suggestion
159
+ * @param {bool} shouldFix Whether this report should fix the node
160
+ * @returns {void}
161
+ */
162
+ function report(node, recommendation, shouldSuggest, shouldFix) {
163
+ /**
164
+ * Fix function
165
+ * @param {RuleFixer} fixer The fixer to fix.
166
+ * @returns {Fix} The fix object.
167
+ */
168
+ function fix(fixer) {
169
+ let tokenBefore = sourceCode.getTokenBefore(node);
170
+ return tokenBefore?.range[1] === node.range[0] && !astUtils.canTokensBeAdjacent(tokenBefore, recommendation) ? fixer.replaceText(node, ` ${recommendation}`) : fixer.replaceText(node, recommendation);
171
+ }
172
+ context.report({
173
+ node,
174
+ messageId: "implicitCoercion",
175
+ data: { recommendation },
176
+ fix(fixer) {
177
+ return shouldFix ? fix(fixer) : null;
178
+ },
179
+ suggest: [{
180
+ messageId: "useRecommendation",
181
+ data: { recommendation },
182
+ fix(fixer) {
183
+ return shouldFix || !shouldSuggest ? null : fix(fixer);
184
+ }
185
+ }]
186
+ });
187
+ }
188
+ return {
189
+ UnaryExpression(node) {
190
+ let operatorAllowed;
191
+ if (operatorAllowed = options.allow.includes("!!"), !operatorAllowed && options.boolean && isDoubleLogicalNegating(node) && report(node, `Boolean(${sourceCode.getText(node.argument.argument)})`, !0, astUtils.getVariableByName(sourceCode.getScope(node), "Boolean")?.identifiers.length === 0), operatorAllowed = options.allow.includes("~"), !operatorAllowed && options.boolean && isBinaryNegatingOfIndexOf(node)) {
192
+ let comparison = node.argument.type === "ChainExpression" ? ">= 0" : "!== -1";
193
+ report(node, `${sourceCode.getText(node.argument)} ${comparison}`, !1, !1);
194
+ }
195
+ operatorAllowed = options.allow.includes("+"), !operatorAllowed && options.number && node.operator === "+" && !isNumeric(node.argument) && report(node, `Number(${sourceCode.getText(node.argument)})`, !0, !1), operatorAllowed = options.allow.includes("- -"), !operatorAllowed && options.number && node.operator === "-" && node.argument.type === "UnaryExpression" && node.argument.operator === "-" && !isNumeric(node.argument.argument) && report(node, `Number(${sourceCode.getText(node.argument.argument)})`, !0, !1);
196
+ },
197
+ "BinaryExpression:exit"(node) {
198
+ let operatorAllowed;
199
+ operatorAllowed = options.allow.includes("*");
200
+ let nonNumericOperand = !operatorAllowed && options.number && isMultiplyByOne(node) && !isMultiplyByFractionOfOne(node, sourceCode) && getNonNumericOperand(node);
201
+ nonNumericOperand && report(node, `Number(${sourceCode.getText(nonNumericOperand)})`, !0, !1), operatorAllowed = options.allow.includes("-"), !operatorAllowed && options.number && node.operator === "-" && node.right.type === "Literal" && node.right.value === 0 && !isNumeric(node.left) && report(node, `Number(${sourceCode.getText(node.left)})`, !0, !1), operatorAllowed = options.allow.includes("+"), !operatorAllowed && options.string && isConcatWithEmptyString(node) && report(node, `String(${sourceCode.getText(getNonEmptyOperand(node))})`, !0, !1);
202
+ },
203
+ AssignmentExpression(node) {
204
+ if (!options.allow.includes("+") && options.string && isAppendEmptyString(node)) {
205
+ let code = sourceCode.getText(getNonEmptyOperand(node));
206
+ report(node, `${code} = String(${code})`, !0, !1);
207
+ }
208
+ },
209
+ TemplateLiteral(node) {
210
+ options.disallowTemplateShorthand && node.parent.type !== "TaggedTemplateExpression" && node.expressions.length === 1 && node.quasis[0].value.cooked === "" && node.quasis[1].value.cooked === "" && (isStringType(node.expressions[0]) || report(node, `String(${sourceCode.getText(node.expressions[0])})`, !0, !1));
211
+ }
212
+ };
213
+ }
214
+ };
215
+ }));
216
+ //#endregion
217
+ //#region src-js/generated/plugin-eslint/rules/no-implicit-coercion.cjs
218
+ module.exports = require_no_implicit_coercion().create;
219
+ //#endregion