Skip to content

Commit 06d5058

Browse files
authored
feat: Add support for ESLint 9 (#797)
1 parent 7f28ef8 commit 06d5058

30 files changed

+2147
-5800
lines changed

.eslintignore

-1
This file was deleted.

.eslintrc.js

-8
This file was deleted.

eslint.config.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const presetReactTypeScriptPrettier = require("./flat/presets/react-typescript-prettier.js");
2+
const globals = require("globals");
3+
4+
/**
5+
* @type { import("eslint").Linter.Config[] }
6+
*/
7+
module.exports = [
8+
...presetReactTypeScriptPrettier,
9+
{
10+
languageOptions: {
11+
globals: {
12+
...globals.node,
13+
...globals.mocha,
14+
},
15+
},
16+
},
17+
{
18+
ignores: ["test/fixtures/*"],
19+
},
20+
];

flat/lib/base.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const globals = require("globals");
2-
const importPlugin = require("eslint-plugin-import");
2+
const importPlugin = require("eslint-plugin-import-x");
33
const eslint = require("@eslint/js");
44

55
/**
@@ -10,7 +10,7 @@ module.exports = function base() {
1010
eslint.configs.recommended,
1111
{
1212
plugins: {
13-
import: importPlugin,
13+
"import-x": importPlugin,
1414
},
1515
languageOptions: {
1616
ecmaVersion: "latest",
@@ -278,8 +278,8 @@ module.exports = function base() {
278278
"template-tag-spacing": "warn",
279279
"unicode-bom": "warn",
280280

281-
// eslint-plugin-import
282-
"import/no-duplicates": "warn",
281+
// eslint-plugin-import-x
282+
"import-x/no-duplicates": "warn",
283283

284284
// =====
285285
// None

flat/lib/es5.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const eslint = require("@eslint/js");
55
const baseRules = base()[1].rules;
66

77
// This rule can be parsed with ES5
8-
delete baseRules["import/no-duplicates"];
8+
delete baseRules["import-x/no-duplicates"];
99

1010
/**
1111
* @param {{ overrideGlobals?: import("eslint").ESLint.Globals} | undefined} overrides

flat/lib/prettier.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
11
const eslintPluginPrettierRecommended = require("eslint-plugin-prettier/recommended");
2+
const eslintConfigPrettier = require("eslint-config-prettier");
3+
const stylisticTs = require("@stylistic/eslint-plugin-ts");
24

35
/**
46
* @return { import("eslint").Linter.FlatConfig[] }
57
*/
68
module.exports = function prettier() {
7-
return [eslintPluginPrettierRecommended];
9+
return [
10+
eslintPluginPrettierRecommended,
11+
eslintConfigPrettier,
12+
{
13+
plugins: {
14+
"@stylistic/ts": stylisticTs,
15+
},
16+
// Disable rules that conflict with Prettier
17+
// - Previously disabled with eslint-config-prettier,
18+
// - but @stylistic is not supported, so disable it additionally
19+
rules: {
20+
"@stylistic/ts/no-extra-semi": "off",
21+
"@stylistic/ts/indent": "off",
22+
},
23+
},
24+
];
825
};

flat/lib/typescript.js

+19-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const globals = require("globals");
21
const tseslint = require("typescript-eslint");
2+
const stylisticTs = require("@stylistic/eslint-plugin-ts");
33

44
/**
55
* @return { import("eslint").Linter.FlatConfig[] }
@@ -11,6 +11,7 @@ module.exports = function typescript() {
1111
{
1212
plugins: {
1313
"@typescript-eslint": tseslint.plugin,
14+
"@stylistic/ts": stylisticTs,
1415
},
1516
languageOptions: {
1617
parser: tseslint.parser,
@@ -28,7 +29,7 @@ module.exports = function typescript() {
2829
"no-useless-constructor": "off",
2930
"@typescript-eslint/no-useless-constructor": "warn",
3031
"@typescript-eslint/unified-signatures": "warn",
31-
"@typescript-eslint/indent": ["warn", 2, { SwitchCase: 1 }],
32+
"@stylistic/ts/indent": ["warn", 2, { SwitchCase: 1 }],
3233

3334
"@typescript-eslint/ban-ts-comment": "off",
3435
"@typescript-eslint/explicit-member-accessibility": "off",
@@ -38,9 +39,7 @@ module.exports = function typescript() {
3839
"@typescript-eslint/no-object-literal-type-assertion": "off",
3940
"@typescript-eslint/no-triple-slash-reference": "off",
4041
"@typescript-eslint/no-unused-vars": "off",
41-
"@typescript-eslint/no-var-requires": "off",
4242
"@typescript-eslint/prefer-interface": "off",
43-
"@typescript-eslint/prefer-namespace-keyword": "off",
4443

4544
"no-shadow": "off",
4645
"@typescript-eslint/no-shadow": "error",
@@ -54,7 +53,7 @@ module.exports = function typescript() {
5453
// To delete as appropriate when reviewing the adaptation rules again.
5554
// rules removed from `recommended` in v6
5655
"no-extra-semi": "off",
57-
"@typescript-eslint/no-extra-semi": "error",
56+
"@stylistic/ts/no-extra-semi": "error",
5857
// rules moved to `strict` in v6
5958
"@typescript-eslint/no-non-null-assertion": "warn",
6059
// rules added to `recommended` in v6
@@ -70,6 +69,21 @@ module.exports = function typescript() {
7069
"@typescript-eslint/no-confusing-non-null-assertion": "off",
7170
"@typescript-eslint/prefer-for-of": "off",
7271
"@typescript-eslint/prefer-function-type": "off",
72+
73+
// rules deleted from `recommended` in v8
74+
"no-loss-of-precision": "off",
75+
"@typescript-eslint/no-loss-of-precision": "error",
76+
77+
// added instead of `@typescript-eslint/ban-types` in v8
78+
"@typescript-eslint/no-empty-object-type": "error",
79+
"@typescript-eslint/no-unsafe-function-type": "error",
80+
"@typescript-eslint/no-wrapper-object-types": "error",
81+
82+
// rules added to `recommended` in v8
83+
"@typescript-eslint/no-require-imports": "off",
84+
"no-unused-expressions": "error",
85+
"@typescript-eslint/no-unused-expressions": "off",
86+
"@typescript-eslint/prefer-namespace-keyword": "off",
7387
},
7488
},
7589
];

flat/presets/es5-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ const es5 = require("../lib/es5.js");
22
const prettier = require("../lib/prettier.js");
33

44
/**
5-
* @type { import("eslint").Linter.FlatConfig[] }
5+
* @type { import("eslint").Linter.Config[] }
66
*/
77
module.exports = [...es5(), ...prettier()];

flat/presets/es5.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const es5 = require("../lib/es5.js");
22

33
/**
4-
* @type { import("eslint").Linter.FlatConfig[] }
4+
* @type { import("eslint").Linter.Config[] }
55
*/
66
module.exports = [...es5()];

flat/presets/kintone-customize-es5-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const prettier = require("../lib/prettier.js");
44
const kintoneGlobals = require("../globals/kintone.js");
55

66
/**
7-
* @type { import("eslint").Linter.FlatConfig[] }
7+
* @type { import("eslint").Linter.Config[] }
88
*/
99
module.exports = [
1010
{ files: ["**/*.{js,cjs,mjs,jsx}"] },

flat/presets/kintone-customize-es5.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ const kintone = require("../lib/kintone.js");
33
const kintoneGlobals = require("../globals/kintone.js");
44

55
/**
6-
* @type { import("eslint").Linter.FlatConfig[] }
6+
* @type { import("eslint").Linter.Config[] }
77
*/
88
module.exports = [...es5(kintoneGlobals), ...kintone()];

flat/presets/node-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const node = require("../lib/node.js");
33
const prettier = require("../lib/prettier.js");
44

55
/**
6-
* @type { import("eslint").Linter.FlatConfig[] }
6+
* @type { import("eslint").Linter.Config[] }
77
*/
88
module.exports = [
99
{ files: ["**/*.{js,cjs,mjs,ts,tsx,jsx,mts,cts}"] },

flat/presets/node-typescript-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const typescript = require("../lib/typescript.js");
55
const nodeTypescript = require("../lib/node-typescript.js");
66

77
/**
8-
* @type { import("eslint").Linter.FlatConfig[] }
8+
* @type { import("eslint").Linter.Config[] }
99
*/
1010
module.exports = [
1111
{ files: ["**/*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}"] },

flat/presets/node.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const base = require("../lib/base.js");
22
const node = require("../lib/node.js");
33

44
/**
5-
* @type { import("eslint").Linter.FlatConfig[] }
5+
* @type { import("eslint").Linter.Config[] }
66
*/
77
module.exports = [
88
{ files: ["**/*.{js,cjs,mjs,ts,mts,cts,jsx,tsx}"] },

flat/presets/prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ const base = require("../lib/base.js");
22
const prettier = require("../lib/prettier.js");
33

44
/**
5-
* @type { import("eslint").Linter.FlatConfig[] }
5+
* @type { import("eslint").Linter.Config[] }
66
*/
77
module.exports = [...base(), ...prettier()];

flat/presets/react-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const react = require("../lib/react.js");
33
const prettier = require("../lib/prettier.js");
44

55
/**
6-
* @type { import("eslint").Linter.FlatConfig[] }
6+
* @type { import("eslint").Linter.Config[] }
77
*/
88
module.exports = [
99
{ files: ["**/*.{js,mjs,cjs,jsx}"] },

flat/presets/react-typescript-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const reactTypescript = require("../lib/react-typescript.js");
55
const prettier = require("../lib/prettier.js");
66

77
/**
8-
* @type { import("eslint").Linter.FlatConfig[] }
8+
* @type { import("eslint").Linter.Config[] }
99
*/
1010
module.exports = [
1111
{ files: ["**/*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}"] },

flat/presets/react-typescript.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const typescript = require("../lib/typescript.js");
44
const reactTypescript = require("../lib/react-typescript.js");
55

66
/**
7-
* @type { import("eslint").Linter.FlatConfig[] }
7+
* @type { import("eslint").Linter.Config[] }
88
*/
99
module.exports = [
1010
{ files: ["**/*.{js,cjs,mjs,ts,cts,mts,tsx,jsx}"] },

flat/presets/react.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ const base = require("../lib/base.js");
22
const react = require("../lib/react.js");
33

44
/**
5-
* @type { import("eslint").Linter.FlatConfig[] }
5+
* @type { import("eslint").Linter.Config[] }
66
*/
77
module.exports = [{ files: ["**/*.{js,cjs,mjs,jsx}"] }, ...base(), ...react()];

flat/presets/typescript-prettier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const prettier = require("../lib/prettier.js");
33
const typescript = require("../lib/typescript.js");
44

55
/**
6-
* @type { import("eslint").Linter.FlatConfig[] }
6+
* @type { import("eslint").Linter.Config[] }
77
*/
88
module.exports = [
99
{ files: ["**/*.{js,cjs,mjs,ts,cts,mts}"] },

flat/presets/typescript.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const base = require("../lib/base.js");
22
const typescript = require("../lib/typescript.js");
33

44
/**
5-
* @type { import("eslint").Linter.FlatConfig[] }
5+
* @type { import("eslint").Linter.Config[] }
66
*/
77
module.exports = [
88
{ files: ["**/*.{js,cjs,mjs,ts,cts,mts}"] },

lib/base.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module.exports = {
22
extends: ["eslint:recommended"],
3-
plugins: ["import"],
3+
plugins: ["import-x"],
44
parserOptions: {
55
ecmaVersion: "latest",
66
sourceType: "module",
@@ -267,8 +267,8 @@ module.exports = {
267267
"template-tag-spacing": "warn",
268268
"unicode-bom": "warn",
269269

270-
// eslint-plugin-import
271-
"import/no-duplicates": "warn",
270+
// eslint-plugin-import-x
271+
"import-x/no-duplicates": "warn",
272272

273273
// =====
274274
// None

lib/es5.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const base = require("./base");
22

33
const baseRules = base.rules;
44
// This rule can be parsed with ES5
5-
delete baseRules["import/no-duplicates"];
5+
delete baseRules["import-x/no-duplicates"];
66

77
module.exports = {
88
extends: ["eslint:recommended"],

lib/typescript.js

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module.exports = {
22
parser: "@typescript-eslint/parser",
3-
plugins: ["@typescript-eslint"],
3+
plugins: ["@typescript-eslint", "@stylistic/ts"],
44
extends: [
55
"plugin:@typescript-eslint/recommended",
66
"plugin:@typescript-eslint/stylistic",
@@ -18,7 +18,7 @@ module.exports = {
1818
"no-useless-constructor": "off",
1919
"@typescript-eslint/no-useless-constructor": "warn",
2020
"@typescript-eslint/unified-signatures": "warn",
21-
"@typescript-eslint/indent": ["warn", 2, { SwitchCase: 1 }],
21+
// "@stylistic/ts/indent": ["warn", 2, { SwitchCase: 1 }],
2222

2323
"@typescript-eslint/ban-ts-comment": "off",
2424
"@typescript-eslint/explicit-member-accessibility": "off",
@@ -28,9 +28,7 @@ module.exports = {
2828
"@typescript-eslint/no-object-literal-type-assertion": "off",
2929
"@typescript-eslint/no-triple-slash-reference": "off",
3030
"@typescript-eslint/no-unused-vars": "off",
31-
"@typescript-eslint/no-var-requires": "off",
3231
"@typescript-eslint/prefer-interface": "off",
33-
"@typescript-eslint/prefer-namespace-keyword": "off",
3432

3533
"no-shadow": "off",
3634
"@typescript-eslint/no-shadow": "error",
@@ -44,7 +42,7 @@ module.exports = {
4442
// To delete as appropriate when reviewing the adaptation rules again.
4543
// rules removed from `recommended` in v6
4644
"no-extra-semi": "off",
47-
"@typescript-eslint/no-extra-semi": "error",
45+
"@stylistic/ts/no-extra-semi": "error",
4846
// rules moved to `strict` in v6
4947
"@typescript-eslint/no-non-null-assertion": "warn",
5048
// rules added to `recommended` in v6
@@ -60,5 +58,15 @@ module.exports = {
6058
"@typescript-eslint/no-confusing-non-null-assertion": "off",
6159
"@typescript-eslint/prefer-for-of": "off",
6260
"@typescript-eslint/prefer-function-type": "off",
61+
62+
// added instead of `@typescript-eslint/ban-types` in v8
63+
"@typescript-eslint/no-empty-object-type": "error",
64+
"@typescript-eslint/no-unsafe-function-type": "error",
65+
"@typescript-eslint/no-wrapper-object-types": "error",
66+
67+
// rules added to `recommended` in v8
68+
"@typescript-eslint/no-require-imports": "off",
69+
"@typescript-eslint/no-unused-expressions": "off",
70+
"@typescript-eslint/prefer-namespace-keyword": "off",
6371
},
6472
};

0 commit comments

Comments
 (0)