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,182 @@
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-else-return.js
3
+ /**
4
+ * @fileoverview Rule to flag `else` after a `return` in `if`
5
+ * @author Ian Christian Myers
6
+ */
7
+ var require_no_else_return = /* @__PURE__ */ require_chunk.t(((exports, module) => {
8
+ let astUtils = require_ast_utils$1.t(), FixTracker = require_fix_tracker$1.t();
9
+ /** @type {import('../types').Rule.RuleModule} */
10
+ module.exports = {
11
+ meta: {
12
+ type: "suggestion",
13
+ defaultOptions: [{ allowElseIf: !0 }],
14
+ docs: {
15
+ description: "Disallow `else` blocks after `return` statements in `if` statements",
16
+ recommended: !1,
17
+ frozen: !0,
18
+ url: "https://eslint.org/docs/latest/rules/no-else-return"
19
+ },
20
+ schema: [{
21
+ type: "object",
22
+ properties: { allowElseIf: { type: "boolean" } },
23
+ additionalProperties: !1
24
+ }],
25
+ fixable: "code",
26
+ messages: { unexpected: "Unnecessary 'else' after 'return'." }
27
+ },
28
+ create(context) {
29
+ let [{ allowElseIf }] = context.options, sourceCode = context.sourceCode;
30
+ /**
31
+ * Checks whether the given names can be safely used to declare block-scoped variables
32
+ * in the given scope. Name collisions can produce redeclaration syntax errors,
33
+ * or silently change references and modify behavior of the original code.
34
+ *
35
+ * This is not a generic function. In particular, it is assumed that the scope is a function scope or
36
+ * a function's inner scope, and that the names can be valid identifiers in the given scope.
37
+ * @param {string[]} names Array of variable names.
38
+ * @param {eslint-scope.Scope} scope Function scope or a function's inner scope.
39
+ * @returns {boolean} True if all names can be safely declared, false otherwise.
40
+ */
41
+ function isSafeToDeclare(names, scope) {
42
+ if (names.length === 0) return !0;
43
+ let functionScope = scope.variableScope;
44
+ if (scope.variables.filter(({ defs }) => defs.length > 0).some(({ name }) => names.includes(name)) || scope !== functionScope && scope.upper.type === "catch" && scope.upper.variables.some(({ name }) => names.includes(name)) || scope.variables.filter(({ defs, references }) => defs.length === 0 && references.length > 0).some(({ name }) => names.includes(name)) || scope.through.some((t) => names.includes(t.identifier.name))) return !1;
45
+ if (scope !== functionScope) {
46
+ let scopeNodeRange = scope.block.range;
47
+ if (functionScope.variables.filter(({ name }) => names.includes(name)).some((v) => v.defs.some(({ node: { range } }) => scopeNodeRange[0] <= range[0] && range[1] <= scopeNodeRange[1]))) return !1;
48
+ }
49
+ return !0;
50
+ }
51
+ /**
52
+ * Checks whether the removal of `else` and its braces is safe from variable name collisions.
53
+ * @param {Node} node The 'else' node.
54
+ * @param {eslint-scope.Scope} scope The scope in which the node and the whole 'if' statement is.
55
+ * @returns {boolean} True if it is safe, false otherwise.
56
+ */
57
+ function isSafeFromNameCollisions(node, scope) {
58
+ if (node.type === "FunctionDeclaration") return !1;
59
+ if (node.type !== "BlockStatement") return !0;
60
+ let elseBlockScope = scope.childScopes.find(({ block }) => block === node);
61
+ return elseBlockScope ? isSafeToDeclare(elseBlockScope.variables.map(({ name }) => name), scope) : !0;
62
+ }
63
+ /**
64
+ * Display the context report if rule is violated
65
+ * @param {Node} elseNode The 'else' node
66
+ * @returns {void}
67
+ */
68
+ function displayReport(elseNode) {
69
+ let currentScope = sourceCode.getScope(elseNode.parent);
70
+ context.report({
71
+ node: elseNode,
72
+ messageId: "unexpected",
73
+ fix(fixer) {
74
+ if (!isSafeFromNameCollisions(elseNode, currentScope)) return null;
75
+ let startToken = sourceCode.getFirstToken(elseNode), elseToken = sourceCode.getTokenBefore(startToken), source = sourceCode.getText(elseNode), lastIfToken = sourceCode.getTokenBefore(elseToken), fixedSource, firstTokenOfElseBlock;
76
+ firstTokenOfElseBlock = startToken.type === "Punctuator" && startToken.value === "{" ? sourceCode.getTokenAfter(startToken) : startToken;
77
+ let ifBlockMaybeUnsafe = elseNode.parent.consequent.type !== "BlockStatement" && lastIfToken.value !== ";", elseBlockUnsafe = /^[([/+`-]/u.test(firstTokenOfElseBlock.value);
78
+ if (ifBlockMaybeUnsafe && elseBlockUnsafe) return null;
79
+ let endToken = sourceCode.getLastToken(elseNode), lastTokenOfElseBlock = sourceCode.getTokenBefore(endToken);
80
+ if (lastTokenOfElseBlock.value !== ";") {
81
+ let nextToken = sourceCode.getTokenAfter(endToken), nextTokenUnsafe = nextToken && /^[([/+`-]/u.test(nextToken.value), nextTokenOnSameLine = nextToken && nextToken.loc.start.line === lastTokenOfElseBlock.loc.start.line;
82
+ if (nextTokenUnsafe || nextTokenOnSameLine && nextToken.value !== "}") return null;
83
+ }
84
+ return fixedSource = startToken.type === "Punctuator" && startToken.value === "{" ? source.slice(1, -1) : source, new FixTracker(fixer, sourceCode).retainEnclosingFunction(elseNode).replaceTextRange([elseToken.range[0], elseNode.range[1]], fixedSource);
85
+ }
86
+ });
87
+ }
88
+ /**
89
+ * Check to see if the node is a ReturnStatement
90
+ * @param {Node} node The node being evaluated
91
+ * @returns {boolean} True if node is a return
92
+ */
93
+ function checkForReturn(node) {
94
+ return node.type === "ReturnStatement";
95
+ }
96
+ /**
97
+ * Naive return checking, does not iterate through the whole
98
+ * BlockStatement because we make the assumption that the ReturnStatement
99
+ * will be the last node in the body of the BlockStatement.
100
+ * @param {Node} node The consequent/alternate node
101
+ * @returns {boolean} True if it has a return
102
+ */
103
+ function naiveHasReturn(node) {
104
+ if (node.type === "BlockStatement") {
105
+ let lastChildNode = node.body.at(-1);
106
+ return lastChildNode && checkForReturn(lastChildNode);
107
+ }
108
+ return checkForReturn(node);
109
+ }
110
+ /**
111
+ * Check to see if the node is valid for evaluation,
112
+ * meaning it has an else.
113
+ * @param {Node} node The node being evaluated
114
+ * @returns {boolean} True if the node is valid
115
+ */
116
+ function hasElse(node) {
117
+ return node.alternate && node.consequent;
118
+ }
119
+ /**
120
+ * If the consequent is an IfStatement, check to see if it has an else
121
+ * and both its consequent and alternate path return, meaning this is
122
+ * a nested case of rule violation. If-Else not considered currently.
123
+ * @param {Node} node The consequent node
124
+ * @returns {boolean} True if this is a nested rule violation
125
+ */
126
+ function checkForIf(node) {
127
+ return node.type === "IfStatement" && hasElse(node) && naiveHasReturn(node.alternate) && naiveHasReturn(node.consequent);
128
+ }
129
+ /**
130
+ * Check the consequent/body node to make sure it is not
131
+ * a ReturnStatement or an IfStatement that returns on both
132
+ * code paths.
133
+ * @param {Node} node The consequent or body node
134
+ * @returns {boolean} `true` if it is a Return/If node that always returns.
135
+ */
136
+ function checkForReturnOrIf(node) {
137
+ return checkForReturn(node) || checkForIf(node);
138
+ }
139
+ /**
140
+ * Check whether a node returns in every codepath.
141
+ * @param {Node} node The node to be checked
142
+ * @returns {boolean} `true` if it returns on every codepath.
143
+ */
144
+ function alwaysReturns(node) {
145
+ return node.type === "BlockStatement" ? node.body.some(checkForReturnOrIf) : checkForReturnOrIf(node);
146
+ }
147
+ /**
148
+ * Check the if statement, but don't catch else-if blocks.
149
+ * @returns {void}
150
+ * @param {Node} node The node for the if statement to check
151
+ * @private
152
+ */
153
+ function checkIfWithoutElse(node) {
154
+ let parent = node.parent;
155
+ if (!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)) return;
156
+ let consequents = [], alternate;
157
+ for (let currentNode = node; currentNode.type === "IfStatement"; currentNode = currentNode.alternate) {
158
+ if (!currentNode.alternate) return;
159
+ consequents.push(currentNode.consequent), alternate = currentNode.alternate;
160
+ }
161
+ consequents.every(alwaysReturns) && displayReport(alternate);
162
+ }
163
+ /**
164
+ * Check the if statement
165
+ * @returns {void}
166
+ * @param {Node} node The node for the if statement to check
167
+ * @private
168
+ */
169
+ function checkIfWithElse(node) {
170
+ let parent = node.parent;
171
+ if (!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)) return;
172
+ let alternate = node.alternate;
173
+ alternate && alwaysReturns(node.consequent) && displayReport(alternate);
174
+ }
175
+ return { "IfStatement:exit": allowElseIf ? checkIfWithoutElse : checkIfWithElse };
176
+ }
177
+ };
178
+ }));
179
+ //#endregion
180
+ //#region src-js/generated/plugin-eslint/rules/no-else-return.cjs
181
+ module.exports = require_no_else_return().create;
182
+ //#endregion
@@ -0,0 +1,47 @@
1
+ const require_chunk = require("../common/chunk.cjs"), require_regexpp$1 = require("../common/regexpp.cjs");
2
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/no-empty-character-class.js
3
+ /**
4
+ * @fileoverview Rule to flag the use of empty character classes in regular expressions
5
+ * @author Ian Christian Myers
6
+ */
7
+ var require_no_empty_character_class = /* @__PURE__ */ require_chunk.t(((exports, module) => {
8
+ let { RegExpParser, visitRegExpAST } = require_regexpp$1.t(), parser = new RegExpParser(), QUICK_TEST_REGEX = /\[\]/u;
9
+ /** @type {import('../types').Rule.RuleModule} */
10
+ module.exports = {
11
+ meta: {
12
+ type: "problem",
13
+ docs: {
14
+ description: "Disallow empty character classes in regular expressions",
15
+ recommended: !0,
16
+ url: "https://eslint.org/docs/latest/rules/no-empty-character-class"
17
+ },
18
+ schema: [],
19
+ messages: { unexpected: "Empty class." }
20
+ },
21
+ create(context) {
22
+ return { "Literal[regex]"(node) {
23
+ let { pattern, flags } = node.regex;
24
+ if (!QUICK_TEST_REGEX.test(pattern)) return;
25
+ let regExpAST;
26
+ try {
27
+ regExpAST = parser.parsePattern(pattern, 0, pattern.length, {
28
+ unicode: flags.includes("u"),
29
+ unicodeSets: flags.includes("v")
30
+ });
31
+ } catch {
32
+ return;
33
+ }
34
+ visitRegExpAST(regExpAST, { onCharacterClassEnter(characterClass) {
35
+ !characterClass.negate && characterClass.elements.length === 0 && context.report({
36
+ node,
37
+ messageId: "unexpected"
38
+ });
39
+ } });
40
+ } };
41
+ }
42
+ };
43
+ }));
44
+ //#endregion
45
+ //#region src-js/generated/plugin-eslint/rules/no-empty-character-class.cjs
46
+ module.exports = require_no_empty_character_class().create;
47
+ //#endregion
@@ -0,0 +1,141 @@
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-empty-function.js
3
+ /**
4
+ * @fileoverview Rule to disallow empty functions.
5
+ * @author Toru Nagashima
6
+ */
7
+ var require_no_empty_function = /* @__PURE__ */ require_chunk.t(((exports, module) => {
8
+ let astUtils = require_ast_utils$1.t(), ALLOW_OPTIONS = Object.freeze([
9
+ "functions",
10
+ "arrowFunctions",
11
+ "generatorFunctions",
12
+ "methods",
13
+ "generatorMethods",
14
+ "getters",
15
+ "setters",
16
+ "constructors",
17
+ "asyncFunctions",
18
+ "asyncMethods",
19
+ "privateConstructors",
20
+ "protectedConstructors",
21
+ "decoratedFunctions",
22
+ "overrideMethods"
23
+ ]);
24
+ /**
25
+ * Gets the kind of a given function node.
26
+ * @param {ASTNode} node A function node to get. This is one of
27
+ * an ArrowFunctionExpression, a FunctionDeclaration, or a
28
+ * FunctionExpression.
29
+ * @returns {string} The kind of the function. This is one of "functions",
30
+ * "arrowFunctions", "generatorFunctions", "asyncFunctions", "methods",
31
+ * "generatorMethods", "asyncMethods", "getters", "setters", and
32
+ * "constructors".
33
+ */
34
+ function getKind(node) {
35
+ let parent = node.parent, kind;
36
+ if (node.type === "ArrowFunctionExpression") return "arrowFunctions";
37
+ if (parent.type === "Property") {
38
+ if (parent.kind === "get") return "getters";
39
+ if (parent.kind === "set") return "setters";
40
+ kind = parent.method ? "methods" : "functions";
41
+ } else if (parent.type === "MethodDefinition") {
42
+ if (parent.kind === "get") return "getters";
43
+ if (parent.kind === "set") return "setters";
44
+ if (parent.kind === "constructor") return "constructors";
45
+ kind = "methods";
46
+ } else kind = "functions";
47
+ let prefix;
48
+ if (node.generator) prefix = "generator";
49
+ else if (node.async) prefix = "async";
50
+ else return kind;
51
+ return prefix + kind[0].toUpperCase() + kind.slice(1);
52
+ }
53
+ /**
54
+ * Checks if a constructor function has parameter properties.
55
+ * @param {ASTNode} node The function node to examine.
56
+ * @returns {boolean} True if the constructor has parameter properties, false otherwise.
57
+ */
58
+ function isParameterPropertiesConstructor(node) {
59
+ return node.params.some((param) => param.type === "TSParameterProperty");
60
+ }
61
+ /** @type {import('../types').Rule.RuleModule} */
62
+ module.exports = {
63
+ meta: {
64
+ dialects: ["javascript", "typescript"],
65
+ language: "javascript",
66
+ hasSuggestions: !0,
67
+ type: "suggestion",
68
+ defaultOptions: [{ allow: [] }],
69
+ docs: {
70
+ description: "Disallow empty functions",
71
+ recommended: !1,
72
+ url: "https://eslint.org/docs/latest/rules/no-empty-function"
73
+ },
74
+ schema: [{
75
+ type: "object",
76
+ properties: { allow: {
77
+ type: "array",
78
+ items: { enum: ALLOW_OPTIONS },
79
+ uniqueItems: !0
80
+ } },
81
+ additionalProperties: !1
82
+ }],
83
+ messages: {
84
+ unexpected: "Unexpected empty {{name}}.",
85
+ suggestComment: "Add comment inside empty {{name}}."
86
+ }
87
+ },
88
+ create(context) {
89
+ let [{ allow }] = context.options, sourceCode = context.sourceCode;
90
+ /**
91
+ * Checks if the given function node is allowed to be empty.
92
+ * @param {ASTNode} node The function node to check.
93
+ * @returns {boolean} True if the function is allowed to be empty, false otherwise.
94
+ */
95
+ function isAllowedEmptyFunction(node) {
96
+ let kind = getKind(node);
97
+ return !!(allow.includes(kind) || kind === "constructors" && (node.parent.accessibility === "private" && allow.includes("privateConstructors") || node.parent.accessibility === "protected" && allow.includes("protectedConstructors") || isParameterPropertiesConstructor(node)) || /(?:g|s)etters|methods$/iu.test(kind) && (node.parent.decorators?.length && allow.includes("decoratedFunctions") || node.parent.override && allow.includes("overrideMethods")));
98
+ }
99
+ /**
100
+ * Reports a given function node if the node matches the following patterns.
101
+ *
102
+ * - Not allowed by options.
103
+ * - The body is empty.
104
+ * - The body doesn't have any comments.
105
+ * @param {ASTNode} node A function node to report. This is one of
106
+ * an ArrowFunctionExpression, a FunctionDeclaration, or a
107
+ * FunctionExpression.
108
+ * @returns {void}
109
+ */
110
+ function reportIfEmpty(node) {
111
+ let name = astUtils.getFunctionNameWithKind(node), innerComments = sourceCode.getTokens(node.body, {
112
+ includeComments: !0,
113
+ filter: astUtils.isCommentToken
114
+ });
115
+ !isAllowedEmptyFunction(node) && node.body.type === "BlockStatement" && node.body.body.length === 0 && innerComments.length === 0 && context.report({
116
+ node,
117
+ loc: node.body.loc,
118
+ messageId: "unexpected",
119
+ data: { name },
120
+ suggest: [{
121
+ messageId: "suggestComment",
122
+ data: { name },
123
+ fix(fixer) {
124
+ let range = [node.body.range[0] + 1, node.body.range[1] - 1];
125
+ return fixer.replaceTextRange(range, " /* empty */ ");
126
+ }
127
+ }]
128
+ });
129
+ }
130
+ return {
131
+ ArrowFunctionExpression: reportIfEmpty,
132
+ FunctionDeclaration: reportIfEmpty,
133
+ FunctionExpression: reportIfEmpty
134
+ };
135
+ }
136
+ };
137
+ }));
138
+ //#endregion
139
+ //#region src-js/generated/plugin-eslint/rules/no-empty-function.cjs
140
+ module.exports = require_no_empty_function().create;
141
+ //#endregion
@@ -0,0 +1,50 @@
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-empty-pattern.js
3
+ /**
4
+ * @fileoverview Rule to disallow an empty pattern
5
+ * @author Alberto Rodríguez
6
+ */
7
+ var require_no_empty_pattern = /* @__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
+ defaultOptions: [{ allowObjectPatternsAsParameters: !1 }],
14
+ docs: {
15
+ description: "Disallow empty destructuring patterns",
16
+ recommended: !0,
17
+ url: "https://eslint.org/docs/latest/rules/no-empty-pattern"
18
+ },
19
+ schema: [{
20
+ type: "object",
21
+ properties: { allowObjectPatternsAsParameters: { type: "boolean" } },
22
+ additionalProperties: !1
23
+ }],
24
+ messages: { unexpected: "Unexpected empty {{type}} pattern." }
25
+ },
26
+ create(context) {
27
+ let [{ allowObjectPatternsAsParameters }] = context.options;
28
+ return {
29
+ ObjectPattern(node) {
30
+ node.properties.length > 0 || allowObjectPatternsAsParameters && (astUtils.isFunction(node.parent) || node.parent.type === "AssignmentPattern" && astUtils.isFunction(node.parent.parent) && node.parent.right.type === "ObjectExpression" && node.parent.right.properties.length === 0) || context.report({
31
+ node,
32
+ messageId: "unexpected",
33
+ data: { type: "object" }
34
+ });
35
+ },
36
+ ArrayPattern(node) {
37
+ node.elements.length === 0 && context.report({
38
+ node,
39
+ messageId: "unexpected",
40
+ data: { type: "array" }
41
+ });
42
+ }
43
+ };
44
+ }
45
+ };
46
+ }));
47
+ //#endregion
48
+ //#region src-js/generated/plugin-eslint/rules/no-empty-pattern.cjs
49
+ module.exports = require_no_empty_pattern().create;
50
+ //#endregion
@@ -0,0 +1,50 @@
1
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/no-empty-static-block.js
2
+ /**
3
+ * @fileoverview Rule to disallow empty static blocks.
4
+ * @author Sosuke Suzuki
5
+ */
6
+ var require_no_empty_static_block = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
7
+ /** @type {import('../types').Rule.RuleModule} */
8
+ module.exports = {
9
+ meta: {
10
+ hasSuggestions: !0,
11
+ type: "suggestion",
12
+ docs: {
13
+ description: "Disallow empty static blocks",
14
+ recommended: !0,
15
+ url: "https://eslint.org/docs/latest/rules/no-empty-static-block"
16
+ },
17
+ schema: [],
18
+ messages: {
19
+ unexpected: "Unexpected empty static block.",
20
+ suggestComment: "Add comment inside empty static block."
21
+ }
22
+ },
23
+ create(context) {
24
+ let sourceCode = context.sourceCode;
25
+ return { StaticBlock(node) {
26
+ if (node.body.length === 0) {
27
+ let openingBrace = sourceCode.getFirstToken(node, { skip: 1 }), closingBrace = sourceCode.getLastToken(node);
28
+ sourceCode.getCommentsBefore(closingBrace).length === 0 && context.report({
29
+ loc: {
30
+ start: openingBrace.loc.start,
31
+ end: closingBrace.loc.end
32
+ },
33
+ messageId: "unexpected",
34
+ suggest: [{
35
+ messageId: "suggestComment",
36
+ fix(fixer) {
37
+ let range = [openingBrace.range[1], closingBrace.range[0]];
38
+ return fixer.replaceTextRange(range, " /* empty */ ");
39
+ }
40
+ }]
41
+ });
42
+ }
43
+ } };
44
+ }
45
+ };
46
+ }));
47
+ //#endregion
48
+ //#region src-js/generated/plugin-eslint/rules/no-empty-static-block.cjs
49
+ module.exports = require_no_empty_static_block().create;
50
+ //#endregion
@@ -0,0 +1,78 @@
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-empty.js
3
+ /**
4
+ * @fileoverview Rule to flag use of an empty block statement
5
+ * @author Nicholas C. Zakas
6
+ */
7
+ var require_no_empty = /* @__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
+ hasSuggestions: !0,
13
+ type: "suggestion",
14
+ defaultOptions: [{ allowEmptyCatch: !1 }],
15
+ docs: {
16
+ description: "Disallow empty block statements",
17
+ recommended: !0,
18
+ url: "https://eslint.org/docs/latest/rules/no-empty"
19
+ },
20
+ schema: [{
21
+ type: "object",
22
+ properties: { allowEmptyCatch: { type: "boolean" } },
23
+ additionalProperties: !1
24
+ }],
25
+ messages: {
26
+ unexpected: "Empty {{type}} statement.",
27
+ suggestComment: "Add comment inside empty {{type}} statement."
28
+ }
29
+ },
30
+ create(context) {
31
+ let [{ allowEmptyCatch }] = context.options, sourceCode = context.sourceCode;
32
+ return {
33
+ BlockStatement(node) {
34
+ node.body.length === 0 && (astUtils.isFunction(node.parent) || allowEmptyCatch && node.parent.type === "CatchClause" || sourceCode.getCommentsInside(node).length > 0 || context.report({
35
+ node,
36
+ messageId: "unexpected",
37
+ data: { type: "block" },
38
+ suggest: [{
39
+ messageId: "suggestComment",
40
+ data: { type: "block" },
41
+ fix(fixer) {
42
+ let range = [node.range[0] + 1, node.range[1] - 1];
43
+ return fixer.replaceTextRange(range, " /* empty */ ");
44
+ }
45
+ }]
46
+ }));
47
+ },
48
+ SwitchStatement(node) {
49
+ if (node.cases === void 0 || node.cases.length === 0) {
50
+ let openingBrace = sourceCode.getTokenAfter(node.discriminant, astUtils.isOpeningBraceToken), closingBrace = sourceCode.getLastToken(node);
51
+ if (sourceCode.commentsExistBetween(openingBrace, closingBrace)) return;
52
+ context.report({
53
+ node,
54
+ loc: {
55
+ start: openingBrace.loc.start,
56
+ end: closingBrace.loc.end
57
+ },
58
+ messageId: "unexpected",
59
+ data: { type: "switch" },
60
+ suggest: [{
61
+ messageId: "suggestComment",
62
+ data: { type: "switch" },
63
+ fix(fixer) {
64
+ let range = [openingBrace.range[1], closingBrace.range[0]];
65
+ return fixer.replaceTextRange(range, " /* empty */ ");
66
+ }
67
+ }]
68
+ });
69
+ }
70
+ }
71
+ };
72
+ }
73
+ };
74
+ }));
75
+ //#endregion
76
+ //#region src-js/generated/plugin-eslint/rules/no-empty.cjs
77
+ module.exports = require_no_empty().create;
78
+ //#endregion
@@ -0,0 +1,34 @@
1
+ //#region ../../node_modules/.pnpm/eslint@9.39.3_jiti@2.6.1/node_modules/eslint/lib/rules/no-eq-null.js
2
+ /**
3
+ * @fileoverview Rule to flag comparisons to null without a type-checking
4
+ * operator.
5
+ * @author Ian Christian Myers
6
+ */
7
+ var require_no_eq_null = /* @__PURE__ */ require("../common/chunk.cjs").t(((exports, module) => {
8
+ /** @type {import('../types').Rule.RuleModule} */
9
+ module.exports = {
10
+ meta: {
11
+ type: "suggestion",
12
+ docs: {
13
+ description: "Disallow `null` comparisons without type-checking operators",
14
+ recommended: !1,
15
+ url: "https://eslint.org/docs/latest/rules/no-eq-null"
16
+ },
17
+ schema: [],
18
+ messages: { unexpected: "Use '===' to compare with null." }
19
+ },
20
+ create(context) {
21
+ return { BinaryExpression(node) {
22
+ let badOperator = node.operator === "==" || node.operator === "!=";
23
+ (node.right.type === "Literal" && node.right.raw === "null" && badOperator || node.left.type === "Literal" && node.left.raw === "null" && badOperator) && context.report({
24
+ node,
25
+ messageId: "unexpected"
26
+ });
27
+ } };
28
+ }
29
+ };
30
+ }));
31
+ //#endregion
32
+ //#region src-js/generated/plugin-eslint/rules/no-eq-null.cjs
33
+ module.exports = require_no_eq_null().create;
34
+ //#endregion