Skip to content

Commit b742af5

Browse files
authored
chore: Migrate to ESLint v9 (#1027)
Signed-off-by: Andrew Haines <[email protected]>
1 parent 5a6fecd commit b742af5

20 files changed

+391
-448
lines changed

.depcheckrc.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ignores:
22
- "@tsconfig/node18"
33
- "@tsconfig/strictest"
4+
- "@types/eslint__js"
45
- "@types/node"
56
- prettier-plugin-pkg
67
- ts-proto

.eslintignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

.eslintrc.yaml

Lines changed: 0 additions & 87 deletions
This file was deleted.

.github/renovate.json

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,6 @@
5151
"matchPackageNames": ["@types/node"],
5252
"matchUpdateTypes": ["major"],
5353
"enabled": false
54-
},
55-
{
56-
"description": "eslint v9 is not widely supported by plugins yet",
57-
"matchPackageNames": ["eslint"],
58-
"matchUpdateTypes": ["major"],
59-
"enabled": false
60-
},
61-
{
62-
"description": "eslint-plugin-vitest only supports flat config from v0.5.0 (https://github.com/veritem/eslint-plugin-vitest/issues/414)",
63-
"matchPackageNames": ["eslint-plugin-vitest"],
64-
"matchUpdateTypes": ["minor"],
65-
"enabled": false
6654
}
6755
],
6856
"postUpdateOptions": ["pnpmDedupe"],

eslint.config.mjs

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import eslint from "@eslint/js";
2+
import vitestPlugin from "@vitest/eslint-plugin";
3+
import importPlugin from "eslint-plugin-import";
4+
import reactHooksPlugin from "eslint-plugin-react-hooks";
5+
import tsdocPlugin from "eslint-plugin-tsdoc";
6+
import typescriptPlugin from "typescript-eslint";
7+
8+
export default typescriptPlugin.config(
9+
{
10+
ignores: [
11+
"packages/*/lib/**",
12+
"packages/*/src/protobuf/**",
13+
"private/*/src/protobuf/**",
14+
],
15+
},
16+
eslint.configs.recommended,
17+
...typescriptPlugin.configs.strictTypeChecked,
18+
...typescriptPlugin.configs.stylisticTypeChecked,
19+
importPlugin.flatConfigs.typescript,
20+
{
21+
plugins: {
22+
import: importPlugin,
23+
},
24+
settings: {
25+
"import/internal-regex": "^@cerbos/",
26+
},
27+
languageOptions: {
28+
parserOptions: {
29+
projectService: true,
30+
},
31+
},
32+
rules: {
33+
"@typescript-eslint/consistent-type-imports": "warn",
34+
"@typescript-eslint/explicit-function-return-type": "warn",
35+
"@typescript-eslint/explicit-member-accessibility": "warn",
36+
"@typescript-eslint/no-confusing-void-expression": "warn",
37+
"@typescript-eslint/no-require-imports": [
38+
"warn",
39+
{ allow: ["/package\\.json$"] },
40+
],
41+
"@typescript-eslint/no-unnecessary-condition": [
42+
"warn",
43+
{ allowConstantLoopConditions: true },
44+
],
45+
"@typescript-eslint/no-unused-vars": [
46+
"warn",
47+
{
48+
argsIgnorePattern: "^_",
49+
ignoreRestSiblings: true,
50+
},
51+
],
52+
"@typescript-eslint/prefer-enum-initializers": "warn",
53+
"@typescript-eslint/prefer-nullish-coalescing": "warn",
54+
"@typescript-eslint/promise-function-async": "warn",
55+
"@typescript-eslint/restrict-template-expressions": [
56+
"warn",
57+
{ allowNumber: true },
58+
],
59+
"@typescript-eslint/return-await": ["warn", "always"],
60+
curly: "warn",
61+
"func-style": ["warn", "declaration"],
62+
"import/consistent-type-specifier-style": ["warn", "prefer-top-level"],
63+
"import/export": "warn",
64+
"import/newline-after-import": "warn",
65+
"import/no-duplicates": "warn",
66+
"import/no-extraneous-dependencies": [
67+
"warn",
68+
{
69+
devDependencies: ["private/**", "eslint.config.mjs"],
70+
optionalDependencies: false,
71+
includeTypes: true,
72+
},
73+
],
74+
"import/no-named-as-default": "warn",
75+
"import/order": [
76+
"warn",
77+
{
78+
alphabetize: {
79+
order: "asc",
80+
orderImportKind: "asc",
81+
caseInsensitive: true,
82+
},
83+
groups: [
84+
"builtin",
85+
"external",
86+
"internal",
87+
"parent",
88+
"sibling",
89+
"index",
90+
],
91+
"newlines-between": "always",
92+
},
93+
],
94+
"no-console": "warn",
95+
"no-constant-condition": ["warn", { checkLoops: false }],
96+
quotes: ["warn", "double", { avoidEscape: true }],
97+
"sort-imports": ["warn", { ignoreDeclarationSort: true }],
98+
},
99+
},
100+
{
101+
files: ["**/*.ts"],
102+
plugins: {
103+
tsdoc: tsdocPlugin,
104+
},
105+
rules: {
106+
"tsdoc/syntax": "warn",
107+
},
108+
},
109+
{
110+
files: ["packages/react/**"],
111+
plugins: {
112+
"react-hooks": reactHooksPlugin,
113+
},
114+
rules: reactHooksPlugin.configs.recommended.rules,
115+
},
116+
{
117+
files: ["private/scripts/**"],
118+
rules: {
119+
"no-console": "off",
120+
},
121+
},
122+
{
123+
files: ["**/*.test.ts", "private/test/src/helpers.ts"],
124+
...vitestPlugin.configs.recommended,
125+
settings: {
126+
vitest: {
127+
typecheck: true,
128+
},
129+
},
130+
rules: {
131+
"@typescript-eslint/no-unsafe-assignment": "off",
132+
"@typescript-eslint/no-unsafe-member-access": "off",
133+
"@typescript-eslint/no-unsafe-argument": "off",
134+
"vitest/expect-expect": ["warn", { assertFunctionNames: ["expect*"] }],
135+
},
136+
},
137+
);

package.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,25 @@
5151
},
5252
"devDependencies": {
5353
"@arethetypeswrong/cli": "0.16.4",
54+
"@eslint/js": "9.12.0",
5455
"@microsoft/api-documenter": "7.25.17",
5556
"@microsoft/api-extractor": "7.47.9",
5657
"@tsconfig/node18": "18.2.4",
5758
"@tsconfig/strictest": "2.0.5",
59+
"@types/eslint__js": "8.42.3",
5860
"@types/node": "18.19.55",
59-
"@typescript-eslint/eslint-plugin": "8.8.1",
60-
"@typescript-eslint/parser": "8.8.1",
61+
"@vitest/eslint-plugin": "1.1.7",
6162
"concurrently": "9.0.1",
6263
"depcheck": "1.4.7",
63-
"eslint": "8.57.1",
64+
"eslint": "9.12.0",
6465
"eslint-plugin-import": "2.31.0",
66+
"eslint-plugin-react-hooks": "5.0.0",
6567
"eslint-plugin-tsdoc": "0.3.0",
6668
"prettier": "3.3.3",
6769
"prettier-plugin-pkg": "0.18.1",
6870
"ts-proto": "2.2.3",
6971
"tsx": "4.19.1",
70-
"typescript": "5.6.3"
72+
"typescript": "5.6.3",
73+
"typescript-eslint": "8.8.1"
7174
}
7275
}

packages/grpc/src/client.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { Client } from "@cerbos/core";
77

88
import { Transport } from "./transport";
99

10-
// eslint-disable-next-line @typescript-eslint/no-var-requires -- Can't import package.json because it is outside of the project's rootDir
1110
const { version } = require("../package.json") as { version: string };
1211

1312
const defaultUserAgent = `cerbos-sdk-javascript-grpc/${version}`;

packages/http/src/client.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { Client } from "@cerbos/core";
33

44
import { Transport } from "./transport";
55

6-
// eslint-disable-next-line @typescript-eslint/no-var-requires -- Can't import package.json because it is outside of the project's rootDir
76
const { version } = require("../package.json") as { version: string };
87

98
const defaultUserAgent = `cerbos-sdk-javascript-http/${version}`;

packages/opentelemetry/src/metadata.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// eslint-disable-next-line @typescript-eslint/no-var-requires -- Can't import package.json because it is outside of the project's rootDir
21
export const { name, version } = require("../package.json") as {
32
name: string;
43
version: string;

packages/react/.eslintrc.yaml

Lines changed: 0 additions & 2 deletions
This file was deleted.

packages/react/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@
5656
"use-deep-compare-effect": "^1.8.1"
5757
},
5858
"devDependencies": {
59-
"@types/react": "18.3.11",
60-
"eslint-plugin-react-hooks": "4.6.2"
59+
"@types/react": "18.3.11"
6160
},
6261
"publishConfig": {
6362
"access": "public",

0 commit comments

Comments
 (0)