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.
- package/CHANGELOG.md +79 -0
- package/README.md +114 -58
- package/bin/wyrm.mjs +3 -0
- package/dist/_virtual/_rolldown/runtime.mjs +14 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +23 -0
- package/dist/configs/index.d.mts +2 -1
- package/dist/configs/index.mjs +6 -6
- package/dist/index.mjs +1 -4
- package/dist/plugin.mjs +1 -3
- package/dist/rules/array-from-array.d.mts +9 -0
- package/dist/rules/array-from-array.mjs +56 -0
- package/dist/rules/as-unknown-as.d.mts +9 -0
- package/dist/rules/as-unknown-as.mjs +30 -0
- package/dist/rules/await-promise-resolve.d.mts +9 -0
- package/dist/rules/await-promise-resolve.mjs +41 -0
- package/dist/rules/boolean-coalescing.d.mts +9 -0
- package/dist/rules/boolean-coalescing.mjs +141 -0
- package/dist/rules/comment-duplicate-leading-space.d.mts +9 -0
- package/dist/rules/comment-duplicate-leading-space.mjs +34 -0
- package/dist/rules/conditional-boolean.d.mts +9 -0
- package/dist/rules/conditional-boolean.mjs +70 -0
- package/dist/rules/constant-boolean-cast.d.mts +9 -0
- package/dist/rules/constant-boolean-cast.mjs +203 -0
- package/dist/rules/de-morgan.d.mts +2 -2
- package/dist/rules/de-morgan.mjs +1 -3
- package/dist/rules/discarded-expression-statement.d.mts +14 -0
- package/dist/rules/discarded-expression-statement.mjs +243 -0
- package/dist/rules/distribute-boolean-casts.d.mts +2 -2
- package/dist/rules/distribute-boolean-casts.mjs +3 -3
- package/dist/rules/duplicate-destructuring.d.mts +2 -2
- package/dist/rules/duplicate-destructuring.mjs +1 -3
- package/dist/rules/duplicate-object-spread.d.mts +9 -0
- package/dist/rules/duplicate-object-spread.mjs +44 -0
- package/dist/rules/e.d.mts +11 -0
- package/dist/rules/e.mjs +87 -0
- package/dist/rules/empty-for.d.mts +9 -0
- package/dist/rules/empty-for.mjs +34 -0
- package/dist/rules/enum-member.d.mts +9 -0
- package/dist/rules/enum-member.mjs +51 -0
- package/dist/rules/eqeq-null.d.mts +9 -0
- package/dist/rules/eqeq-null.mjs +101 -0
- package/dist/rules/exact-string-regex.d.mts +9 -0
- package/dist/rules/exact-string-regex.mjs +83 -0
- package/dist/rules/export-using.d.mts +9 -0
- package/dist/rules/export-using.mjs +58 -0
- package/dist/rules/generic-constructor-with-hook.d.mts +11 -0
- package/dist/rules/generic-constructor-with-hook.mjs +103 -0
- package/dist/rules/idiomatic-cast.mjs +7 -10
- package/dist/rules/index.d.mts +112 -57
- package/dist/rules/index.mjs +113 -5
- package/dist/rules/inferable-type-predicate.d.mts +9 -0
- package/dist/rules/inferable-type-predicate.mjs +100 -0
- package/dist/rules/inner-as-const.d.mts +9 -0
- package/dist/rules/inner-as-const.mjs +70 -0
- package/dist/rules/jsx-tostring.d.mts +9 -0
- package/dist/rules/jsx-tostring.mjs +120 -0
- package/dist/rules/literal-destructuring.d.mts +9 -0
- package/dist/rules/literal-destructuring.mjs +102 -0
- package/dist/rules/named-export-with-side-effects.d.mts +11 -0
- package/dist/rules/named-export-with-side-effects.mjs +72 -0
- package/dist/rules/nested-reduce.d.mts +9 -0
- package/dist/rules/nested-reduce.mjs +46 -0
- package/dist/rules/nested-try-catch.d.mts +9 -0
- package/dist/rules/nested-try-catch.mjs +37 -0
- package/dist/rules/no-commented-out-comment.d.mts +9 -0
- package/dist/rules/no-commented-out-comment.mjs +31 -0
- package/dist/rules/no-constant-template-expression.d.mts +3 -4
- package/dist/rules/no-constant-template-expression.mjs +12 -9
- package/dist/rules/no-constructed-error-cause.d.mts +9 -0
- package/dist/rules/no-constructed-error-cause.mjs +75 -0
- package/dist/rules/no-convoluted-boolean-expressions.d.mts +9 -0
- package/dist/rules/no-convoluted-boolean-expressions.mjs +130 -0
- package/dist/rules/no-convoluted-logical-expressions.d.mts +2 -2
- package/dist/rules/no-convoluted-logical-expressions.mjs +1 -3
- package/dist/rules/no-custom-url-parsing.d.mts +2 -3
- package/dist/rules/no-custom-url-parsing.mjs +1 -3
- package/dist/rules/no-disallowed-warning-comments.d.mts +2 -2
- package/dist/rules/no-disallowed-warning-comments.mjs +1 -3
- package/dist/rules/no-duplicated-return.d.mts +2 -2
- package/dist/rules/no-duplicated-return.mjs +2 -3
- package/dist/rules/no-else-break.d.mts +2 -2
- package/dist/rules/no-else-break.mjs +3 -5
- package/dist/rules/no-else-continue.d.mts +2 -2
- package/dist/rules/no-else-continue.mjs +3 -5
- package/dist/rules/no-else-never.d.mts +9 -0
- package/dist/rules/no-else-never.mjs +75 -0
- package/dist/rules/no-else-return.d.mts +2 -3
- package/dist/rules/no-else-return.mjs +4 -5
- package/dist/rules/no-else-throw.d.mts +2 -2
- package/dist/rules/no-else-throw.mjs +3 -5
- package/dist/rules/no-empty-attribute.d.mts +3 -3
- package/dist/rules/no-empty-attribute.mjs +1 -3
- package/dist/rules/no-empty-comment.d.mts +3 -3
- package/dist/rules/no-empty-comment.mjs +1 -3
- package/dist/rules/no-empty-jsx-expression.d.mts +2 -2
- package/dist/rules/no-empty-jsx-expression.mjs +1 -3
- package/dist/rules/no-empty-literal-iteration.d.mts +2 -2
- package/dist/rules/no-empty-literal-iteration.mjs +1 -3
- package/dist/rules/no-extra-false-fallback.d.mts +2 -3
- package/dist/rules/no-extra-false-fallback.mjs +1 -3
- package/dist/rules/no-extra-nested-boolean-cast.d.mts +2 -3
- package/dist/rules/no-extra-nested-boolean-cast.mjs +2 -3
- package/dist/rules/no-first-last.d.mts +2 -2
- package/dist/rules/no-first-last.mjs +2 -5
- package/dist/rules/no-float-length-check.d.mts +2 -2
- package/dist/rules/no-float-length-check.mjs +1 -3
- package/dist/rules/no-huge-try-block.d.mts +3 -3
- package/dist/rules/no-huge-try-block.mjs +1 -3
- package/dist/rules/no-huge-useeffect.d.mts +11 -0
- package/dist/rules/no-huge-useeffect.mjs +52 -0
- package/dist/rules/no-if-length-for.d.mts +9 -0
- package/dist/rules/no-if-length-for.mjs +91 -0
- package/dist/rules/no-inline-jsdoc-tag.d.mts +3 -3
- package/dist/rules/no-inline-jsdoc-tag.mjs +1 -3
- package/dist/rules/no-invalid-date-literal.d.mts +2 -2
- package/dist/rules/no-invalid-date-literal.mjs +42 -19
- package/dist/rules/no-jsx-statement.d.mts +2 -2
- package/dist/rules/no-jsx-statement.mjs +1 -3
- package/dist/rules/no-lax-array-type.d.mts +9 -0
- package/dist/rules/no-lax-array-type.mjs +129 -0
- package/dist/rules/no-lax-return-type.d.mts +9 -0
- package/dist/rules/no-lax-return-type.mjs +138 -0
- package/dist/rules/no-mutable-literal-fill.d.mts +2 -3
- package/dist/rules/no-mutable-literal-fill.mjs +1 -3
- package/dist/rules/no-nullish-ternary.d.mts +9 -0
- package/dist/rules/no-nullish-ternary.mjs +121 -0
- package/dist/rules/no-numbered-comments.d.mts +2 -2
- package/dist/rules/no-numbered-comments.mjs +1 -3
- package/dist/rules/no-obvious-any.mjs +35 -27
- package/dist/rules/no-optional-type-guard-param.d.mts +2 -3
- package/dist/rules/no-optional-type-guard-param.mjs +1 -3
- package/dist/rules/no-out-of-order-comments.d.mts +2 -2
- package/dist/rules/no-out-of-order-comments.mjs +4 -8
- package/dist/rules/no-possibly-nullish-equality.d.mts +0 -1
- package/dist/rules/no-possibly-nullish-equality.mjs +6 -13
- package/dist/rules/no-redundant-function-declaration.d.mts +2 -2
- package/dist/rules/no-redundant-function-declaration.mjs +1 -3
- package/dist/rules/no-return-to-void.mjs +2 -4
- package/dist/rules/no-self-object-assign.d.mts +2 -2
- package/dist/rules/no-self-object-assign.mjs +1 -3
- package/dist/rules/no-sloppy-length-check.d.mts +2 -3
- package/dist/rules/no-sloppy-length-check.mjs +35 -37
- package/dist/rules/no-suspicious-jsx-semicolon.d.mts +2 -3
- package/dist/rules/no-suspicious-jsx-semicolon.mjs +2 -4
- package/dist/rules/no-ternary-return.d.mts +3 -4
- package/dist/rules/no-ternary-return.mjs +1 -3
- package/dist/rules/no-type-guard.d.mts +9 -0
- package/dist/rules/no-type-guard.mjs +36 -0
- package/dist/rules/no-unassigned-todo.d.mts +2 -2
- package/dist/rules/no-unassigned-todo.mjs +1 -3
- package/dist/rules/no-unbound-catch-error.d.mts +2 -2
- package/dist/rules/no-unbound-catch-error.mjs +1 -3
- package/dist/rules/no-unused-mutually-referential.d.mts +9 -0
- package/dist/rules/no-unused-mutually-referential.mjs +215 -0
- package/dist/rules/no-unused-param-read.d.mts +2 -2
- package/dist/rules/no-unused-param-read.mjs +1 -3
- package/dist/rules/no-useless-computed-key.d.mts +2 -2
- package/dist/rules/no-useless-computed-key.mjs +1 -3
- package/dist/rules/no-useless-iife.d.mts +2 -2
- package/dist/rules/no-useless-iife.mjs +2 -3
- package/dist/rules/no-useless-logical-fallback.d.mts +0 -1
- package/dist/rules/no-useless-logical-fallback.mjs +32 -24
- package/dist/rules/no-useless-return-undefined.mjs +11 -11
- package/dist/rules/no-useless-ts-check.d.mts +9 -0
- package/dist/rules/no-useless-ts-check.mjs +34 -0
- package/dist/rules/no-useless-use-strict.d.mts +2 -2
- package/dist/rules/no-useless-use-strict.mjs +1 -3
- package/dist/rules/no-useless-usememo.d.mts +2 -2
- package/dist/rules/no-useless-usememo.mjs +8 -6
- package/dist/rules/no-whitespace-property.d.mts +2 -2
- package/dist/rules/no-whitespace-property.mjs +1 -3
- package/dist/rules/nullish-object-spread.d.mts +9 -0
- package/dist/rules/nullish-object-spread.mjs +38 -0
- package/dist/rules/optional-call-expression.d.mts +2 -2
- package/dist/rules/optional-call-expression.mjs +20 -3
- package/dist/rules/prefer-array-from.d.mts +9 -0
- package/dist/rules/prefer-array-from.mjs +87 -0
- package/dist/rules/prefer-catch-method.d.mts +2 -2
- package/dist/rules/prefer-catch-method.mjs +9 -12
- package/dist/rules/prefer-early-return.d.mts +2 -2
- package/dist/rules/prefer-early-return.mjs +23 -20
- package/dist/rules/prefer-eqeq-null.d.mts +9 -0
- package/dist/rules/prefer-eqeq-null.mjs +122 -0
- package/dist/rules/prefer-finally.d.mts +9 -0
- package/dist/rules/prefer-finally.mjs +129 -0
- package/dist/rules/prefer-getorinsert.d.mts +9 -0
- package/dist/rules/prefer-getorinsert.mjs +180 -0
- package/dist/rules/prefer-has.d.mts +9 -0
- package/dist/rules/prefer-has.mjs +69 -0
- package/dist/rules/prefer-in.d.mts +9 -0
- package/dist/rules/prefer-in.mjs +81 -0
- package/dist/rules/prefer-object-keys-values.d.mts +9 -0
- package/dist/rules/prefer-object-keys-values.mjs +78 -0
- package/dist/rules/prefer-repeat.d.mts +2 -2
- package/dist/rules/prefer-repeat.mjs +1 -5
- package/dist/rules/prefer-satisfies.d.mts +9 -0
- package/dist/rules/prefer-satisfies.mjs +86 -0
- package/dist/rules/prefer-string-join.d.mts +9 -0
- package/dist/rules/prefer-string-join.mjs +67 -0
- package/dist/rules/primitive-valueof.mjs +6 -8
- package/dist/rules/slim-try.d.mts +9 -0
- package/dist/rules/slim-try.mjs +150 -0
- package/dist/rules/styled-button-has-type.d.mts +9 -0
- package/dist/rules/styled-button-has-type.mjs +82 -0
- package/dist/rules/styled-transient-props.d.mts +9 -0
- package/dist/rules/styled-transient-props.mjs +52 -0
- package/dist/rules/suspicious-map-length.d.mts +2 -2
- package/dist/rules/suspicious-map-length.mjs +1 -3
- package/dist/rules/template-tostring.d.mts +9 -0
- package/dist/rules/template-tostring.mjs +48 -0
- package/dist/rules/unsafe-asserted-chain.d.mts +0 -1
- package/dist/rules/unsafe-asserted-chain.mjs +5 -8
- package/dist/rules/unused-object-assign.d.mts +2 -2
- package/dist/rules/unused-object-assign.mjs +1 -3
- package/dist/rules/unused-object-freeze.d.mts +9 -0
- package/dist/rules/unused-object-freeze.mjs +37 -0
- package/dist/rules/useless-as-const.d.mts +9 -0
- package/dist/rules/useless-as-const.mjs +59 -0
- package/dist/rules/useless-assign.d.mts +11 -0
- package/dist/rules/useless-assign.mjs +69 -0
- package/dist/rules/useless-conditional-assign.d.mts +9 -0
- package/dist/rules/useless-conditional-assign.mjs +58 -0
- package/dist/rules/useless-intermediary-variable.mjs +18 -21
- package/dist/rules/useless-mock.d.mts +9 -0
- package/dist/rules/useless-mock.mjs +180 -0
- package/dist/rules/useless-required.d.mts +9 -0
- package/dist/rules/useless-required.mjs +257 -0
- package/dist/utils/compareTokens.mjs +1 -3
- package/dist/utils/createRule.mjs +1 -3
- package/dist/utils/negateExpression.mjs +1 -3
- package/dist/utils/option.mjs +5 -2
- package/package.json +30 -23
- 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
|
|
37
|
-
yield fixer.insertTextAfter(node, `\n${indent}${bodyText
|
|
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
|
|
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:
|
|
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
|
|
37
|
-
yield fixer.insertTextAfter(node, `\n${indent}${bodyText
|
|
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
|
|
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
|
|
49
|
-
yield fixer.insertTextAfter(node, `\n${indent}${bodyText
|
|
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
|
|
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:
|
|
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
|
|
37
|
-
yield fixer.insertTextAfter(node, `\n${indent}${bodyText
|
|
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
|
|
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:
|
|
5
|
+
declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noEmptyAttribute", [{
|
|
6
6
|
attributes: string[];
|
|
7
|
-
}], WyrmPluginDocs,
|
|
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
|
|
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:
|
|
5
|
+
declare const _default: _$_typescript_eslint_utils_ts_eslint0.RuleModule<"noEmptyComment", [{
|
|
6
6
|
allowPadding: boolean;
|
|
7
|
-
}], WyrmPluginDocs,
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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,
|
|
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 };
|