eslint-plugin-wyrm 0.0.10 → 0.0.13

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 (234) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +114 -58
  3. package/bin/wyrm.mjs +3 -0
  4. package/dist/_virtual/_rolldown/runtime.mjs +14 -0
  5. package/dist/cli.d.mts +1 -0
  6. package/dist/cli.mjs +23 -0
  7. package/dist/configs/index.d.mts +2 -1
  8. package/dist/configs/index.mjs +6 -6
  9. package/dist/index.mjs +1 -4
  10. package/dist/plugin.mjs +1 -3
  11. package/dist/rules/array-from-array.d.mts +9 -0
  12. package/dist/rules/array-from-array.mjs +56 -0
  13. package/dist/rules/as-unknown-as.d.mts +9 -0
  14. package/dist/rules/as-unknown-as.mjs +30 -0
  15. package/dist/rules/await-promise-resolve.d.mts +9 -0
  16. package/dist/rules/await-promise-resolve.mjs +41 -0
  17. package/dist/rules/boolean-coalescing.d.mts +9 -0
  18. package/dist/rules/boolean-coalescing.mjs +141 -0
  19. package/dist/rules/comment-duplicate-leading-space.d.mts +9 -0
  20. package/dist/rules/comment-duplicate-leading-space.mjs +34 -0
  21. package/dist/rules/conditional-boolean.d.mts +9 -0
  22. package/dist/rules/conditional-boolean.mjs +70 -0
  23. package/dist/rules/constant-boolean-cast.d.mts +9 -0
  24. package/dist/rules/constant-boolean-cast.mjs +203 -0
  25. package/dist/rules/de-morgan.d.mts +2 -2
  26. package/dist/rules/de-morgan.mjs +1 -3
  27. package/dist/rules/discarded-expression-statement.d.mts +14 -0
  28. package/dist/rules/discarded-expression-statement.mjs +243 -0
  29. package/dist/rules/distribute-boolean-casts.d.mts +2 -2
  30. package/dist/rules/distribute-boolean-casts.mjs +3 -3
  31. package/dist/rules/duplicate-destructuring.d.mts +2 -2
  32. package/dist/rules/duplicate-destructuring.mjs +1 -3
  33. package/dist/rules/duplicate-object-spread.d.mts +9 -0
  34. package/dist/rules/duplicate-object-spread.mjs +44 -0
  35. package/dist/rules/e.d.mts +11 -0
  36. package/dist/rules/e.mjs +87 -0
  37. package/dist/rules/empty-for.d.mts +9 -0
  38. package/dist/rules/empty-for.mjs +34 -0
  39. package/dist/rules/enum-member.d.mts +9 -0
  40. package/dist/rules/enum-member.mjs +51 -0
  41. package/dist/rules/eqeq-null.d.mts +9 -0
  42. package/dist/rules/eqeq-null.mjs +101 -0
  43. package/dist/rules/exact-string-regex.d.mts +9 -0
  44. package/dist/rules/exact-string-regex.mjs +83 -0
  45. package/dist/rules/export-using.d.mts +9 -0
  46. package/dist/rules/export-using.mjs +58 -0
  47. package/dist/rules/generic-constructor-with-hook.d.mts +11 -0
  48. package/dist/rules/generic-constructor-with-hook.mjs +103 -0
  49. package/dist/rules/idiomatic-cast.mjs +7 -10
  50. package/dist/rules/index.d.mts +112 -57
  51. package/dist/rules/index.mjs +113 -5
  52. package/dist/rules/inferable-type-predicate.d.mts +9 -0
  53. package/dist/rules/inferable-type-predicate.mjs +100 -0
  54. package/dist/rules/inner-as-const.d.mts +9 -0
  55. package/dist/rules/inner-as-const.mjs +70 -0
  56. package/dist/rules/jsx-tostring.d.mts +9 -0
  57. package/dist/rules/jsx-tostring.mjs +120 -0
  58. package/dist/rules/literal-destructuring.d.mts +9 -0
  59. package/dist/rules/literal-destructuring.mjs +102 -0
  60. package/dist/rules/named-export-with-side-effects.d.mts +11 -0
  61. package/dist/rules/named-export-with-side-effects.mjs +72 -0
  62. package/dist/rules/nested-reduce.d.mts +9 -0
  63. package/dist/rules/nested-reduce.mjs +46 -0
  64. package/dist/rules/nested-try-catch.d.mts +9 -0
  65. package/dist/rules/nested-try-catch.mjs +37 -0
  66. package/dist/rules/no-commented-out-comment.d.mts +9 -0
  67. package/dist/rules/no-commented-out-comment.mjs +31 -0
  68. package/dist/rules/no-constant-template-expression.d.mts +3 -4
  69. package/dist/rules/no-constant-template-expression.mjs +12 -9
  70. package/dist/rules/no-constructed-error-cause.d.mts +9 -0
  71. package/dist/rules/no-constructed-error-cause.mjs +75 -0
  72. package/dist/rules/no-convoluted-boolean-expressions.d.mts +9 -0
  73. package/dist/rules/no-convoluted-boolean-expressions.mjs +130 -0
  74. package/dist/rules/no-convoluted-logical-expressions.d.mts +2 -2
  75. package/dist/rules/no-convoluted-logical-expressions.mjs +1 -3
  76. package/dist/rules/no-custom-url-parsing.d.mts +2 -3
  77. package/dist/rules/no-custom-url-parsing.mjs +1 -3
  78. package/dist/rules/no-disallowed-warning-comments.d.mts +2 -2
  79. package/dist/rules/no-disallowed-warning-comments.mjs +1 -3
  80. package/dist/rules/no-duplicated-return.d.mts +2 -2
  81. package/dist/rules/no-duplicated-return.mjs +2 -3
  82. package/dist/rules/no-else-break.d.mts +2 -2
  83. package/dist/rules/no-else-break.mjs +3 -5
  84. package/dist/rules/no-else-continue.d.mts +2 -2
  85. package/dist/rules/no-else-continue.mjs +3 -5
  86. package/dist/rules/no-else-never.d.mts +9 -0
  87. package/dist/rules/no-else-never.mjs +75 -0
  88. package/dist/rules/no-else-return.d.mts +2 -3
  89. package/dist/rules/no-else-return.mjs +4 -5
  90. package/dist/rules/no-else-throw.d.mts +2 -2
  91. package/dist/rules/no-else-throw.mjs +3 -5
  92. package/dist/rules/no-empty-attribute.d.mts +3 -3
  93. package/dist/rules/no-empty-attribute.mjs +1 -3
  94. package/dist/rules/no-empty-comment.d.mts +3 -3
  95. package/dist/rules/no-empty-comment.mjs +1 -3
  96. package/dist/rules/no-empty-jsx-expression.d.mts +2 -2
  97. package/dist/rules/no-empty-jsx-expression.mjs +1 -3
  98. package/dist/rules/no-empty-literal-iteration.d.mts +2 -2
  99. package/dist/rules/no-empty-literal-iteration.mjs +1 -3
  100. package/dist/rules/no-extra-false-fallback.d.mts +2 -3
  101. package/dist/rules/no-extra-false-fallback.mjs +1 -3
  102. package/dist/rules/no-extra-nested-boolean-cast.d.mts +2 -3
  103. package/dist/rules/no-extra-nested-boolean-cast.mjs +2 -3
  104. package/dist/rules/no-first-last.d.mts +2 -2
  105. package/dist/rules/no-first-last.mjs +2 -5
  106. package/dist/rules/no-float-length-check.d.mts +2 -2
  107. package/dist/rules/no-float-length-check.mjs +1 -3
  108. package/dist/rules/no-huge-try-block.d.mts +3 -3
  109. package/dist/rules/no-huge-try-block.mjs +1 -3
  110. package/dist/rules/no-huge-useeffect.d.mts +11 -0
  111. package/dist/rules/no-huge-useeffect.mjs +52 -0
  112. package/dist/rules/no-if-length-for.d.mts +9 -0
  113. package/dist/rules/no-if-length-for.mjs +91 -0
  114. package/dist/rules/no-inline-jsdoc-tag.d.mts +3 -3
  115. package/dist/rules/no-inline-jsdoc-tag.mjs +1 -3
  116. package/dist/rules/no-invalid-date-literal.d.mts +2 -2
  117. package/dist/rules/no-invalid-date-literal.mjs +42 -19
  118. package/dist/rules/no-jsx-statement.d.mts +2 -2
  119. package/dist/rules/no-jsx-statement.mjs +1 -3
  120. package/dist/rules/no-lax-array-type.d.mts +9 -0
  121. package/dist/rules/no-lax-array-type.mjs +129 -0
  122. package/dist/rules/no-lax-return-type.d.mts +9 -0
  123. package/dist/rules/no-lax-return-type.mjs +138 -0
  124. package/dist/rules/no-mutable-literal-fill.d.mts +2 -3
  125. package/dist/rules/no-mutable-literal-fill.mjs +1 -3
  126. package/dist/rules/no-nullish-ternary.d.mts +9 -0
  127. package/dist/rules/no-nullish-ternary.mjs +121 -0
  128. package/dist/rules/no-numbered-comments.d.mts +2 -2
  129. package/dist/rules/no-numbered-comments.mjs +1 -3
  130. package/dist/rules/no-obvious-any.mjs +35 -27
  131. package/dist/rules/no-optional-type-guard-param.d.mts +2 -3
  132. package/dist/rules/no-optional-type-guard-param.mjs +1 -3
  133. package/dist/rules/no-out-of-order-comments.d.mts +2 -2
  134. package/dist/rules/no-out-of-order-comments.mjs +4 -8
  135. package/dist/rules/no-possibly-nullish-equality.d.mts +0 -1
  136. package/dist/rules/no-possibly-nullish-equality.mjs +6 -13
  137. package/dist/rules/no-redundant-function-declaration.d.mts +2 -2
  138. package/dist/rules/no-redundant-function-declaration.mjs +1 -3
  139. package/dist/rules/no-return-to-void.mjs +2 -4
  140. package/dist/rules/no-self-object-assign.d.mts +2 -2
  141. package/dist/rules/no-self-object-assign.mjs +1 -3
  142. package/dist/rules/no-sloppy-length-check.d.mts +2 -3
  143. package/dist/rules/no-sloppy-length-check.mjs +35 -37
  144. package/dist/rules/no-suspicious-jsx-semicolon.d.mts +2 -3
  145. package/dist/rules/no-suspicious-jsx-semicolon.mjs +2 -4
  146. package/dist/rules/no-ternary-return.d.mts +3 -4
  147. package/dist/rules/no-ternary-return.mjs +1 -3
  148. package/dist/rules/no-type-guard.d.mts +9 -0
  149. package/dist/rules/no-type-guard.mjs +36 -0
  150. package/dist/rules/no-unassigned-todo.d.mts +2 -2
  151. package/dist/rules/no-unassigned-todo.mjs +1 -3
  152. package/dist/rules/no-unbound-catch-error.d.mts +2 -2
  153. package/dist/rules/no-unbound-catch-error.mjs +1 -3
  154. package/dist/rules/no-unused-mutually-referential.d.mts +9 -0
  155. package/dist/rules/no-unused-mutually-referential.mjs +215 -0
  156. package/dist/rules/no-unused-param-read.d.mts +2 -2
  157. package/dist/rules/no-unused-param-read.mjs +1 -3
  158. package/dist/rules/no-useless-computed-key.d.mts +2 -2
  159. package/dist/rules/no-useless-computed-key.mjs +1 -3
  160. package/dist/rules/no-useless-iife.d.mts +2 -2
  161. package/dist/rules/no-useless-iife.mjs +2 -3
  162. package/dist/rules/no-useless-logical-fallback.d.mts +0 -1
  163. package/dist/rules/no-useless-logical-fallback.mjs +32 -24
  164. package/dist/rules/no-useless-return-undefined.mjs +11 -11
  165. package/dist/rules/no-useless-ts-check.d.mts +9 -0
  166. package/dist/rules/no-useless-ts-check.mjs +34 -0
  167. package/dist/rules/no-useless-use-strict.d.mts +2 -2
  168. package/dist/rules/no-useless-use-strict.mjs +1 -3
  169. package/dist/rules/no-useless-usememo.d.mts +2 -2
  170. package/dist/rules/no-useless-usememo.mjs +8 -6
  171. package/dist/rules/no-whitespace-property.d.mts +2 -2
  172. package/dist/rules/no-whitespace-property.mjs +1 -3
  173. package/dist/rules/nullish-object-spread.d.mts +9 -0
  174. package/dist/rules/nullish-object-spread.mjs +38 -0
  175. package/dist/rules/optional-call-expression.d.mts +2 -2
  176. package/dist/rules/optional-call-expression.mjs +20 -3
  177. package/dist/rules/prefer-array-from.d.mts +9 -0
  178. package/dist/rules/prefer-array-from.mjs +87 -0
  179. package/dist/rules/prefer-catch-method.d.mts +2 -2
  180. package/dist/rules/prefer-catch-method.mjs +9 -12
  181. package/dist/rules/prefer-early-return.d.mts +2 -2
  182. package/dist/rules/prefer-early-return.mjs +23 -20
  183. package/dist/rules/prefer-eqeq-null.d.mts +9 -0
  184. package/dist/rules/prefer-eqeq-null.mjs +122 -0
  185. package/dist/rules/prefer-finally.d.mts +9 -0
  186. package/dist/rules/prefer-finally.mjs +129 -0
  187. package/dist/rules/prefer-getorinsert.d.mts +9 -0
  188. package/dist/rules/prefer-getorinsert.mjs +180 -0
  189. package/dist/rules/prefer-has.d.mts +9 -0
  190. package/dist/rules/prefer-has.mjs +69 -0
  191. package/dist/rules/prefer-in.d.mts +9 -0
  192. package/dist/rules/prefer-in.mjs +81 -0
  193. package/dist/rules/prefer-object-keys-values.d.mts +9 -0
  194. package/dist/rules/prefer-object-keys-values.mjs +78 -0
  195. package/dist/rules/prefer-repeat.d.mts +2 -2
  196. package/dist/rules/prefer-repeat.mjs +1 -5
  197. package/dist/rules/prefer-satisfies.d.mts +9 -0
  198. package/dist/rules/prefer-satisfies.mjs +86 -0
  199. package/dist/rules/prefer-string-join.d.mts +9 -0
  200. package/dist/rules/prefer-string-join.mjs +67 -0
  201. package/dist/rules/primitive-valueof.mjs +6 -8
  202. package/dist/rules/slim-try.d.mts +9 -0
  203. package/dist/rules/slim-try.mjs +150 -0
  204. package/dist/rules/styled-button-has-type.d.mts +9 -0
  205. package/dist/rules/styled-button-has-type.mjs +82 -0
  206. package/dist/rules/styled-transient-props.d.mts +9 -0
  207. package/dist/rules/styled-transient-props.mjs +52 -0
  208. package/dist/rules/suspicious-map-length.d.mts +2 -2
  209. package/dist/rules/suspicious-map-length.mjs +1 -3
  210. package/dist/rules/template-tostring.d.mts +9 -0
  211. package/dist/rules/template-tostring.mjs +48 -0
  212. package/dist/rules/unsafe-asserted-chain.d.mts +0 -1
  213. package/dist/rules/unsafe-asserted-chain.mjs +5 -8
  214. package/dist/rules/unused-object-assign.d.mts +2 -2
  215. package/dist/rules/unused-object-assign.mjs +1 -3
  216. package/dist/rules/unused-object-freeze.d.mts +9 -0
  217. package/dist/rules/unused-object-freeze.mjs +37 -0
  218. package/dist/rules/useless-as-const.d.mts +9 -0
  219. package/dist/rules/useless-as-const.mjs +59 -0
  220. package/dist/rules/useless-assign.d.mts +11 -0
  221. package/dist/rules/useless-assign.mjs +69 -0
  222. package/dist/rules/useless-conditional-assign.d.mts +9 -0
  223. package/dist/rules/useless-conditional-assign.mjs +58 -0
  224. package/dist/rules/useless-intermediary-variable.mjs +18 -21
  225. package/dist/rules/useless-mock.d.mts +9 -0
  226. package/dist/rules/useless-mock.mjs +180 -0
  227. package/dist/rules/useless-required.d.mts +9 -0
  228. package/dist/rules/useless-required.mjs +257 -0
  229. package/dist/utils/compareTokens.mjs +1 -3
  230. package/dist/utils/createRule.mjs +1 -3
  231. package/dist/utils/negateExpression.mjs +1 -3
  232. package/dist/utils/option.mjs +5 -2
  233. package/package.json +30 -23
  234. package/dist/_virtual/rolldown_runtime.mjs +0 -20
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-else-break.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_else_break_default = createRule({
@@ -33,8 +32,8 @@ var no_else_break_default = createRule({
33
32
  yield fixer.remove(alternate);
34
33
  if (alternate.type === AST_NODE_TYPES.BlockStatement) {
35
34
  const indent = " ".repeat(node.loc.start.column);
36
- const bodyText$1 = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
37
- yield fixer.insertTextAfter(node, `\n${indent}${bodyText$1}`);
35
+ const bodyText = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
36
+ yield fixer.insertTextAfter(node, `\n${indent}${bodyText}`);
38
37
  return;
39
38
  }
40
39
  const bodyText = context.sourceCode.getText(alternate);
@@ -48,6 +47,5 @@ function getLastStatement(stmt) {
48
47
  if (stmt.type === AST_NODE_TYPES.BlockStatement) return stmt.body.at(-1);
49
48
  return stmt;
50
49
  }
51
-
52
50
  //#endregion
53
- export { no_else_break_default as default };
51
+ export { no_else_break_default as default };
@@ -1,8 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint15 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-else-continue.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint15.RuleModule<"noElseContinue", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint15.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noElseContinue", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
6
  name: string;
7
7
  };
8
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-else-continue.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_else_continue_default = createRule({
@@ -33,8 +32,8 @@ var no_else_continue_default = createRule({
33
32
  yield fixer.remove(alternate);
34
33
  if (alternate.type === AST_NODE_TYPES.BlockStatement) {
35
34
  const indent = " ".repeat(node.loc.start.column);
36
- const bodyText$1 = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
37
- yield fixer.insertTextAfter(node, `\n${indent}${bodyText$1}`);
35
+ const bodyText = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
36
+ yield fixer.insertTextAfter(node, `\n${indent}${bodyText}`);
38
37
  return;
39
38
  }
40
39
  const bodyText = context.sourceCode.getText(alternate);
@@ -48,6 +47,5 @@ function getLastStatement(stmt) {
48
47
  if (stmt.type === AST_NODE_TYPES.BlockStatement) return stmt.body.at(-1);
49
48
  return stmt;
50
49
  }
51
-
52
50
  //#endregion
53
- export { no_else_continue_default as default };
51
+ export { no_else_continue_default as default };
@@ -0,0 +1,9 @@
1
+ import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
+ import { ESLintUtils } from "@typescript-eslint/utils";
3
+
4
+ //#region lib/rules/no-else-never.d.ts
5
+ declare const _default: ESLintUtils.RuleModule<"noElseNever", [], WyrmPluginDocs, ESLintUtils.RuleListener> & {
6
+ name: string;
7
+ };
8
+ //#endregion
9
+ export { _default };
@@ -0,0 +1,75 @@
1
+ import { createRule } from "../utils/createRule.mjs";
2
+ import path from "node:path";
3
+ import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
4
+ import ts from "typescript";
5
+ //#region lib/rules/no-else-never.ts
6
+ const { name } = path.parse(import.meta.filename);
7
+ var no_else_never_default = createRule({
8
+ name,
9
+ meta: {
10
+ type: "suggestion",
11
+ docs: {
12
+ description: "Forbid unnecessary `else` block after an expression that never returns",
13
+ strict: true,
14
+ requiresTypeChecking: true
15
+ },
16
+ fixable: "code",
17
+ schema: [],
18
+ messages: { noElseNever: "Remove this unnecessary else" }
19
+ },
20
+ defaultOptions: [],
21
+ create(context) {
22
+ let services;
23
+ function getServices() {
24
+ services ??= ESLintUtils.getParserServices(context);
25
+ return services;
26
+ }
27
+ return { IfStatement(node) {
28
+ const { alternate } = node;
29
+ if (!alternate) return;
30
+ if (!alwaysReturnsNever(node.consequent)) return;
31
+ context.report({
32
+ node: alternate,
33
+ messageId: "noElseNever",
34
+ *fix(fixer) {
35
+ const firstToken = context.sourceCode.getTokenBefore(alternate);
36
+ /* v8 ignore else -- @preserve */
37
+ if (firstToken) yield fixer.remove(firstToken);
38
+ yield fixer.remove(alternate);
39
+ if (alternate.type === AST_NODE_TYPES.BlockStatement) {
40
+ const indent = " ".repeat(node.loc.start.column);
41
+ const bodyText = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
42
+ yield fixer.insertTextAfter(node, `\n${indent}${bodyText}`);
43
+ return;
44
+ }
45
+ const bodyText = context.sourceCode.getText(alternate);
46
+ yield fixer.insertTextAfter(node, bodyText);
47
+ }
48
+ });
49
+ } };
50
+ function expressionReturnsNever(stmt) {
51
+ return !!(getServices().getTypeAtLocation(stmt.expression).flags & ts.TypeFlags.Never);
52
+ }
53
+ function alwaysReturnsNever(stmt) {
54
+ if (stmt == null) return false;
55
+ switch (stmt.type) {
56
+ case AST_NODE_TYPES.ExpressionStatement: return expressionReturnsNever(stmt);
57
+ case AST_NODE_TYPES.ReturnStatement: return false;
58
+ case AST_NODE_TYPES.BlockStatement: return stmt.body.some((s) => alwaysReturnsNever(s));
59
+ case AST_NODE_TYPES.IfStatement: return alwaysReturnsNever(stmt.consequent) && alwaysReturnsNever(stmt.alternate);
60
+ case AST_NODE_TYPES.SwitchStatement: return stmt.cases.flatMap((c) => c.consequent).every((c) => alwaysReturnsNever(c));
61
+ case AST_NODE_TYPES.ForInStatement:
62
+ case AST_NODE_TYPES.ForOfStatement:
63
+ case AST_NODE_TYPES.ForStatement:
64
+ case AST_NODE_TYPES.WhileStatement:
65
+ case AST_NODE_TYPES.DoWhileStatement: return alwaysReturnsNever(stmt.body);
66
+ case AST_NODE_TYPES.TryStatement:
67
+ if (alwaysReturnsNever(stmt.finalizer)) return true;
68
+ return alwaysReturnsNever(stmt.block) && alwaysReturnsNever(stmt.handler?.body);
69
+ default: return false;
70
+ }
71
+ }
72
+ }
73
+ });
74
+ //#endregion
75
+ export { no_else_never_default as default };
@@ -1,9 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint17 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-else-return.d.ts
5
-
6
- declare const _default: _typescript_eslint_utils_ts_eslint17.RuleModule<"noElseReturn", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint17.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noElseReturn", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
7
6
  name: string;
8
7
  };
9
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-else-return.ts
6
5
  /**
7
6
  * @fileoverview
@@ -45,8 +44,8 @@ var no_else_return_default = createRule({
45
44
  yield fixer.remove(alternate);
46
45
  if (alternate.type === AST_NODE_TYPES.BlockStatement) {
47
46
  const indent = " ".repeat(node.loc.start.column);
48
- const bodyText$1 = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
49
- yield fixer.insertTextAfter(node, `\n${indent}${bodyText$1}`);
47
+ const bodyText = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
48
+ yield fixer.insertTextAfter(node, `\n${indent}${bodyText}`);
50
49
  return;
51
50
  }
52
51
  const bodyText = context.sourceCode.getText(alternate);
@@ -62,6 +61,7 @@ function alwaysReturns(stmt) {
62
61
  case AST_NODE_TYPES.ReturnStatement: return true;
63
62
  case AST_NODE_TYPES.BlockStatement: return stmt.body.some((s) => alwaysReturns(s));
64
63
  case AST_NODE_TYPES.IfStatement: return alwaysReturns(stmt.consequent) && alwaysReturns(stmt.alternate);
64
+ case AST_NODE_TYPES.SwitchStatement: return stmt.cases.flatMap((c) => c.consequent).every((c) => alwaysReturns(c));
65
65
  case AST_NODE_TYPES.ForInStatement:
66
66
  case AST_NODE_TYPES.ForOfStatement:
67
67
  case AST_NODE_TYPES.ForStatement:
@@ -73,6 +73,5 @@ function alwaysReturns(stmt) {
73
73
  default: return false;
74
74
  }
75
75
  }
76
-
77
76
  //#endregion
78
- export { no_else_return_default as default };
77
+ export { no_else_return_default as default };
@@ -1,8 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint19 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-else-throw.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint19.RuleModule<"noElseThrow", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint19.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noElseThrow", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
6
  name: string;
7
7
  };
8
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-else-throw.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_else_throw_default = createRule({
@@ -33,8 +32,8 @@ var no_else_throw_default = createRule({
33
32
  yield fixer.remove(alternate);
34
33
  if (alternate.type === AST_NODE_TYPES.BlockStatement) {
35
34
  const indent = " ".repeat(node.loc.start.column);
36
- const bodyText$1 = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
37
- yield fixer.insertTextAfter(node, `\n${indent}${bodyText$1}`);
35
+ const bodyText = alternate.body.map((stmt) => context.sourceCode.getText(stmt)).join(`\n${indent}`);
36
+ yield fixer.insertTextAfter(node, `\n${indent}${bodyText}`);
38
37
  return;
39
38
  }
40
39
  const bodyText = context.sourceCode.getText(alternate);
@@ -48,6 +47,5 @@ function getLastStatement(stmt) {
48
47
  if (stmt.type === AST_NODE_TYPES.BlockStatement) return stmt.body.at(-1);
49
48
  return stmt;
50
49
  }
51
-
52
50
  //#endregion
53
- export { no_else_throw_default as default };
51
+ export { no_else_throw_default as default };
@@ -1,10 +1,10 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint21 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-empty-attribute.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint21.RuleModule<"noEmptyAttribute", [{
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noEmptyAttribute", [{
6
6
  attributes: string[];
7
- }], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint21.RuleListener> & {
7
+ }], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
8
8
  name: string;
9
9
  };
10
10
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-empty-attribute.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_empty_attribute_default = createRule({
@@ -72,6 +71,5 @@ function getDefaultAttributes() {
72
71
  "width"
73
72
  ];
74
73
  }
75
-
76
74
  //#endregion
77
- export { no_empty_attribute_default as default };
75
+ export { no_empty_attribute_default as default };
@@ -1,10 +1,10 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint23 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-empty-comment.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint23.RuleModule<"noEmptyComment", [{
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noEmptyComment", [{
6
6
  allowPadding: boolean;
7
- }], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint23.RuleListener> & {
7
+ }], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
8
8
  name: string;
9
9
  };
10
10
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_TOKEN_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-empty-comment.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  const DEFAULT_ALLOW_PADDING = true;
@@ -51,6 +50,5 @@ function isPaddingComment(comment, comments) {
51
50
  return false;
52
51
  });
53
52
  }
54
-
55
53
  //#endregion
56
- export { no_empty_comment_default as default };
54
+ export { no_empty_comment_default as default };
@@ -1,8 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint25 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-empty-jsx-expression.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint25.RuleModule<"noEmptyJsxExpression", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint25.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noEmptyJsxExpression", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
6
  name: string;
7
7
  };
8
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-empty-jsx-expression.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_empty_jsx_expression_default = createRule({
@@ -46,6 +45,5 @@ var no_empty_jsx_expression_default = createRule({
46
45
  };
47
46
  }
48
47
  });
49
-
50
48
  //#endregion
51
- export { no_empty_jsx_expression_default as default };
49
+ export { no_empty_jsx_expression_default as default };
@@ -1,8 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint27 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-empty-literal-iteration.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint27.RuleModule<"noEmptyLiteralIteration", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint27.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noEmptyLiteralIteration", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
6
  name: string;
7
7
  };
8
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-empty-literal-iteration.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_empty_literal_iteration_default = createRule({
@@ -93,6 +92,5 @@ function isEmptyLiteral(node) {
93
92
  default: return false;
94
93
  }
95
94
  }
96
-
97
95
  //#endregion
98
- export { no_empty_literal_iteration_default as default };
96
+ export { no_empty_literal_iteration_default as default };
@@ -1,9 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint29 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-extra-false-fallback.d.ts
5
-
6
- declare const _default: _typescript_eslint_utils_ts_eslint29.RuleModule<"noExtraFalseFallbackInCondition" | "noExtraFalseFallbackInPredicate" | "noExtraFalseFallbackInsideBooleanCast" | "removeFalseFallback", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint29.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noExtraFalseFallbackInCondition" | "noExtraFalseFallbackInPredicate" | "noExtraFalseFallbackInsideBooleanCast" | "removeFalseFallback", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
7
6
  name: string;
8
7
  };
9
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-extra-false-fallback.ts
6
5
  /**
7
6
  * @fileoverview
@@ -167,6 +166,5 @@ function isInBooleanCast(node) {
167
166
  default: return false;
168
167
  }
169
168
  }
170
-
171
169
  //#endregion
172
- export { no_extra_false_fallback_default as default };
170
+ export { no_extra_false_fallback_default as default };
@@ -1,9 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint31 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-extra-nested-boolean-cast.d.ts
5
-
6
- declare const _default: _typescript_eslint_utils_ts_eslint31.RuleModule<"noExtraBooleanCastInCondition" | "noExtraBooleanCastInPredicate" | "noExtraBooleanCastInsideAnother", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint31.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noExtraBooleanCastInCondition" | "noExtraBooleanCastInPredicate" | "noExtraBooleanCastInsideAnother", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
7
6
  name: string;
8
7
  };
9
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-extra-nested-boolean-cast.ts
6
5
  /**
7
6
  * @fileoverview
@@ -94,6 +93,7 @@ function isInCondition(node) {
94
93
  }
95
94
  }
96
95
  function isPredicate(fn) {
96
+ if (fn.returnType?.typeAnnotation.type === AST_NODE_TYPES.TSTypePredicate) return false;
97
97
  if (fn.parent.type !== AST_NODE_TYPES.CallExpression) return false;
98
98
  if (fn.parent.arguments[0] !== fn) return false;
99
99
  if (fn.parent.callee.type !== AST_NODE_TYPES.MemberExpression) return false;
@@ -142,6 +142,5 @@ function isInBooleanCast(node) {
142
142
  default: return false;
143
143
  }
144
144
  }
145
-
146
145
  //#endregion
147
- export { no_extra_nested_boolean_cast_default as default };
146
+ export { no_extra_nested_boolean_cast_default as default };
@@ -1,8 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint33 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-first-last.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint33.RuleModule<"noFirstLast" | "noLastFirst", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint33.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noFirstLast" | "noLastFirst", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
6
  name: string;
7
7
  };
8
8
  //#endregion
@@ -1,9 +1,8 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
- import { None, Some } from "../utils/option.mjs";
3
2
  import { compareTokens } from "../utils/compareTokens.mjs";
3
+ import { None, Some } from "../utils/option.mjs";
4
4
  import path from "node:path";
5
5
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
6
-
7
6
  //#region lib/rules/no-first-last.ts
8
7
  const { name } = path.parse(import.meta.filename);
9
8
  var no_first_last_default = createRule({
@@ -14,7 +13,6 @@ var no_first_last_default = createRule({
14
13
  description: "Forbid confusing naming for \"first\" or \"last\"",
15
14
  recommended: true
16
15
  },
17
- fixable: "code",
18
16
  schema: [],
19
17
  messages: {
20
18
  noFirstLast: "This is named \"first\" but it looks like a \"last\"",
@@ -166,6 +164,5 @@ var no_first_last_default = createRule({
166
164
  };
167
165
  }
168
166
  });
169
-
170
167
  //#endregion
171
- export { no_first_last_default as default };
168
+ export { no_first_last_default as default };
@@ -1,8 +1,8 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint35 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-float-length-check.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint35.RuleModule<"noFloatLengthCheck", [], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint35.RuleListener> & {
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noFloatLengthCheck", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
6
  name: string;
7
7
  };
8
8
  //#endregion
@@ -1,7 +1,6 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
3
  import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
-
5
4
  //#region lib/rules/no-float-length-check.ts
6
5
  const { name } = path.parse(import.meta.filename);
7
6
  var no_float_length_check_default = createRule({
@@ -36,6 +35,5 @@ var no_float_length_check_default = createRule({
36
35
  } };
37
36
  }
38
37
  });
39
-
40
38
  //#endregion
41
- export { no_float_length_check_default as default };
39
+ export { no_float_length_check_default as default };
@@ -1,12 +1,12 @@
1
1
  import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
- import * as _typescript_eslint_utils_ts_eslint37 from "@typescript-eslint/utils/ts-eslint";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
3
 
4
4
  //#region lib/rules/no-huge-try-block.d.ts
5
- declare const _default: _typescript_eslint_utils_ts_eslint37.RuleModule<"noHugeTryBlock" | "noHugeCatchBlock" | "noHugeFinallyBlock", [{
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noHugeTryBlock" | "noHugeCatchBlock" | "noHugeFinallyBlock", [{
6
6
  maxTryLines: number;
7
7
  maxCatchLines: number;
8
8
  maxFinallyLines: number;
9
- }], WyrmPluginDocs, _typescript_eslint_utils_ts_eslint37.RuleListener> & {
9
+ }], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
10
10
  name: string;
11
11
  };
12
12
  //#endregion
@@ -1,6 +1,5 @@
1
1
  import { createRule } from "../utils/createRule.mjs";
2
2
  import path from "node:path";
3
-
4
3
  //#region lib/rules/no-huge-try-block.ts
5
4
  const { name } = path.parse(import.meta.filename);
6
5
  const DEFAULT_MAX_TRY_LINES = 20;
@@ -66,6 +65,5 @@ var no_huge_try_block_default = createRule({
66
65
  } };
67
66
  }
68
67
  });
69
-
70
68
  //#endregion
71
- export { no_huge_try_block_default as default };
69
+ export { no_huge_try_block_default as default };
@@ -0,0 +1,11 @@
1
+ import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
+
4
+ //#region lib/rules/no-huge-useeffect.d.ts
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noHugeUseEffect", [{
6
+ maxNbLines: number;
7
+ }], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
8
+ name: string;
9
+ };
10
+ //#endregion
11
+ export { _default };
@@ -0,0 +1,52 @@
1
+ import { createRule } from "../utils/createRule.mjs";
2
+ import path from "node:path";
3
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
4
+ //#region lib/rules/no-huge-useeffect.ts
5
+ const { name } = path.parse(import.meta.filename);
6
+ const DEFAULT_MAX_LINES = 20;
7
+ var no_huge_useeffect_default = createRule({
8
+ name,
9
+ meta: {
10
+ type: "suggestion",
11
+ docs: {
12
+ description: "Forbid huge `useEffect` functions",
13
+ strict: true
14
+ },
15
+ schema: [{
16
+ type: "object",
17
+ properties: { maxNbLines: {
18
+ type: "number",
19
+ description: `Maximum number of lines for a \`useEffect\` function. Default: \`${DEFAULT_MAX_LINES}\``
20
+ } }
21
+ }],
22
+ messages: { noHugeUseEffect: "This `useEffect` function spans more than {{ maxNbLines }} lines. Refactor to avoid huge blocks of side-effect code." }
23
+ },
24
+ defaultOptions: [{ maxNbLines: DEFAULT_MAX_LINES }],
25
+ create(context, [options]) {
26
+ return { CallExpression(node) {
27
+ if (!isUseEffect(node)) return;
28
+ const [arg] = node.arguments;
29
+ if (!arg) return;
30
+ if (arg.type !== AST_NODE_TYPES.ArrowFunctionExpression && arg.type !== AST_NODE_TYPES.FunctionExpression) return;
31
+ if (arg.body.type !== AST_NODE_TYPES.BlockStatement) return;
32
+ if (arg.body.loc.end.line - arg.body.loc.start.line + 1 <= options.maxNbLines) return;
33
+ context.report({
34
+ node: arg,
35
+ messageId: "noHugeUseEffect",
36
+ data: { maxNbLines: options.maxNbLines }
37
+ });
38
+ } };
39
+ }
40
+ });
41
+ function isUseEffect(node) {
42
+ const hookName = "useEffect";
43
+ if (node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name === hookName) return true;
44
+ if (node.callee.type !== AST_NODE_TYPES.MemberExpression) return false;
45
+ if (node.callee.object.type !== AST_NODE_TYPES.Identifier) return false;
46
+ if (node.callee.property.type !== AST_NODE_TYPES.Identifier) return false;
47
+ if (node.callee.object.name !== "React") return false;
48
+ if (node.callee.property.name !== hookName) return false;
49
+ return true;
50
+ }
51
+ //#endregion
52
+ export { no_huge_useeffect_default as default };
@@ -0,0 +1,9 @@
1
+ import { WyrmPluginDocs } from "../utils/createRule.mjs";
2
+ import * as _$_typescript_eslint_utils_ts_eslint0 from "@typescript-eslint/utils/ts-eslint";
3
+
4
+ //#region lib/rules/no-if-length-for.d.ts
5
+ declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noIfLengthFor", [], WyrmPluginDocs, _$_typescript_eslint_utils_ts_eslint0.RuleListener> & {
6
+ name: string;
7
+ };
8
+ //#endregion
9
+ export { _default };