Skip to content

Commit 6c980e8

Browse files
committed
chore: update project eslint config
1 parent 926eb76 commit 6c980e8

File tree

14 files changed

+145
-171
lines changed

14 files changed

+145
-171
lines changed

eslint.config.ts

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/* eslint-disable simple-import-sort/imports */
22
import url from "node:url";
33

4-
import { Record } from "effect";
54
import eslintJs from "@eslint/js";
65
import eslintMarkdown from "@eslint/markdown";
76
import eslintPluginImport from "eslint-plugin-import-x";
@@ -70,27 +69,16 @@ const p11tGroups = {
7069
groups: ["id", "type", "meta", "alias", "rules", "unknown"],
7170
};
7271

73-
const disableTypeCheckedRules = {
74-
...tseslint.configs.disableTypeChecked.rules,
75-
"@susisu/safe-typescript/no-object-assign": "off",
76-
"@susisu/safe-typescript/no-type-assertion": "off",
77-
"@susisu/safe-typescript/no-unsafe-object-enum-method": "off",
72+
const enableTypeCheckedRules = {
73+
...tseslint.configs.strictTypeCheckedOnly.map(x => x.rules).reduce((a, b) => ({ ...a, ...b }), {}),
74+
...eslintPluginSafeTypeScript.configs.recommended.rules,
7875
"@susisu/safe-typescript/no-unsafe-object-property-check": "off",
7976
"@susisu/safe-typescript/no-unsafe-object-property-overwrite": "off",
80-
} as const;
81-
82-
const typeCheckedRules = {
83-
...Record.map(disableTypeCheckedRules, () => "warn"),
84-
"@susisu/safe-typescript/no-unsafe-object-property-check": "off",
85-
"@susisu/safe-typescript/no-unsafe-object-property-overwrite": "off",
86-
"@typescript-eslint/naming-convention": "off",
87-
"@typescript-eslint/no-confusing-void-expression": "off",
88-
"@typescript-eslint/prefer-destructuring": "off",
89-
"@typescript-eslint/prefer-readonly-parameter-types": "off",
9077
"@typescript-eslint/strict-boolean-expressions": ["warn", { allowNullableBoolean: true, allowNullableString: true }],
91-
"@typescript-eslint/switch-exhaustiveness-check": "off",
9278
} as const;
9379

80+
const disableTypeCheckedRules = Object.fromEntries(Object.keys(enableTypeCheckedRules).map(x => [x, "off"]));
81+
9482
export default tseslint.config(
9583
eslintConfigFlatGitignore(),
9684
{
@@ -193,9 +181,7 @@ export default tseslint.config(
193181
varsIgnorePattern: "^_",
194182
},
195183
],
196-
...typeCheckedRules,
197-
// Part: functional rules
198-
"functional/no-return-void": "off",
184+
...enableTypeCheckedRules,
199185
// Part: jsdoc rules
200186
"jsdoc/check-param-names": "warn",
201187
"jsdoc/check-tag-names": "warn",

examples/dual-react-dom-lib/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"prepare": "pnpm run build"
3030
},
3131
"devDependencies": {
32-
"@eslint-react/eslint-plugin": "^1.23.0",
32+
"@eslint-react/eslint-plugin": "^1.23.1",
3333
"@eslint/js": "^9.17.0",
3434
"@tsconfig/node22": "^22.0.0",
3535
"@tsconfig/strictest": "^2.0.5",

examples/next-app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"react-dom": "latest"
1717
},
1818
"devDependencies": {
19-
"@eslint-react/eslint-plugin": "^1.23.0",
19+
"@eslint-react/eslint-plugin": "^1.23.1",
2020
"@eslint/config-inspector": "^0.6.0",
2121
"@eslint/js": "^9.17.0",
2222
"@next/eslint-plugin-next": "^15.1.3",

examples/vite-react-dom-app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"react-dom": "^19.0.0"
1616
},
1717
"devDependencies": {
18-
"@eslint-react/eslint-plugin": "^1.23.0",
18+
"@eslint-react/eslint-plugin": "^1.23.1",
1919
"@eslint/config-inspector": "^0.6.0",
2020
"@eslint/js": "^9.17.0",
2121
"@tsconfig/node22": "^22.0.0",

examples/vite-react-dom-js-app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"react-dom": "^19.0.0"
1616
},
1717
"devDependencies": {
18-
"@eslint-react/eslint-plugin": "^1.23.0",
18+
"@eslint-react/eslint-plugin": "^1.23.1",
1919
"@eslint/config-inspector": "^0.6.0",
2020
"@eslint/js": "^9.17.0",
2121
"@types/react": "^19.0.2",

examples/vite-react-dom-js-with-babel-app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"@babel/eslint-parser": "^7.25.9",
2020
"@babel/preset-env": "^7.26.0",
2121
"@babel/preset-react": "^7.26.3",
22-
"@eslint-react/eslint-plugin": "^1.23.0",
22+
"@eslint-react/eslint-plugin": "^1.23.1",
2323
"@eslint/config-inspector": "^0.6.0",
2424
"@eslint/js": "^9.17.0",
2525
"@types/babel__core": "~7.20.5",

packages/plugins/eslint-plugin-react-x/src/rules/no-useless-fragment.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ function checkAndReport(
3838
// report if the fragment is placed inside a built-in component (e.g. <div><></></div>)
3939
if (JSX.isBuiltInElement(node.parent)) context.report({ messageId: "noUselessFragmentInBuiltIn", node });
4040
// report and return if the fragment has no children (e.g. <></>)
41-
if (node.children.length === 0) return context.report({ messageId: "noUselessFragment", node });
41+
if (node.children.length === 0) {
42+
context.report({ messageId: "noUselessFragment", node });
43+
return;
44+
}
4245
const isChildElement = AST.isOneOf([AST_NODE_TYPES.JSXElement, AST_NODE_TYPES.JSXFragment])(node.parent);
4346
switch (true) {
4447
// <Foo content={<>ee eeee eeee ...</>} />
@@ -51,14 +54,16 @@ function checkAndReport(
5154
// <Foo><>hello, world</></Foo>
5255
case !allowExpressions
5356
&& isChildElement: {
54-
return context.report({ messageId: "noUselessFragment", node });
57+
context.report({ messageId: "noUselessFragment", node });
58+
return;
5559
}
5660
case !allowExpressions
5761
&& !isChildElement
5862
&& node.children.length === 1: {
5963
// const foo = <>{children}</>;
6064
// return <>{children}</>;
61-
return context.report({ messageId: "noUselessFragment", node });
65+
context.report({ messageId: "noUselessFragment", node });
66+
return;
6267
}
6368
}
6469
const nonPaddingChildren = node.children.filter((child) => !JSX.isPaddingSpaces(child));
@@ -67,7 +72,8 @@ function checkAndReport(
6772
case nonPaddingChildren.length === 0:
6873
case nonPaddingChildren.length === 1
6974
&& firstNonPaddingChild?.type !== AST_NODE_TYPES.JSXExpressionContainer: {
70-
return context.report({ messageId: "noUselessFragment", node });
75+
context.report({ messageId: "noUselessFragment", node });
76+
return;
7177
}
7278
}
7379
return;

packages/plugins/eslint-plugin/src/utils/pad-keys-left.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ export function padKeysLeft<const T, const U extends string = "">(
77
obj: T,
88
left: U,
99
): PadKeysLeft<T, U> {
10-
// eslint-disable-next-line @susisu/safe-typescript/no-type-assertion, @typescript-eslint/no-unsafe-type-assertion
10+
// eslint-disable-next-line @susisu/safe-typescript/no-type-assertion
1111
return transformKeys(obj, (key) => `${left}${key}`) as never;
1212
}

packages/plugins/eslint-plugin/src/utils/transform-keys.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* eslint-disable @typescript-eslint/no-unsafe-type-assertion, @susisu/safe-typescript/no-type-assertion */
1+
/* eslint-disable @susisu/safe-typescript/no-type-assertion */
22
// Copied from https://github.com/gustavoguichard/string-ts/blob/9dd444f03fdfa225f1643e6f1f8c18f9480224bb/src/utils/object-keys/transform-keys.ts#L12
33

44
import { typeOf } from "@eslint-react/types";

packages/shared/src/settings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export const DEFAULT_ESLINT_REACT_SETTINGS = {
3636
*/
3737
export function unsafeReadSettings(data: unknown): PartialDeep<ESLintReactSettings> {
3838
// @ts-expect-error - skip type checking for unsafe cast
39-
// eslint-disable-next-line @susisu/safe-typescript/no-type-assertion, @typescript-eslint/no-unsafe-type-assertion
39+
// eslint-disable-next-line @susisu/safe-typescript/no-type-assertion
4040
return (data?.["react-x"] ?? {}) as PartialDeep<ESLintReactSettings>;
4141
}
4242

0 commit comments

Comments
 (0)