Skip to content

Commit 296f32e

Browse files
authored
Migrate from ESLint to oxlint (#1746)
1 parent bf13266 commit 296f32e

21 files changed

Lines changed: 693 additions & 1255 deletions

File tree

.oxfmtrc.jsonc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33
"printWidth": 80,
44
"arrowParens": "avoid",
55
"ignorePatterns": ["pnpm-lock.yaml"],
6+
"sortImports": {
7+
"groups": [
8+
"type-import",
9+
["value-builtin", "value-external"],
10+
"type-internal",
11+
"value-internal",
12+
["type-parent", "type-sibling", "type-index"],
13+
["value-parent", "value-sibling", "value-index"],
14+
"unknown",
15+
],
16+
},
617
"sortTailwindcss": {
718
"functions": ["cva", "cn"],
819
},

.oxlintrc.json

Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
{
2+
"$schema": "./node_modules/oxlint/configuration_schema.json",
3+
"plugins": ["typescript", "unicorn"],
4+
"options": {
5+
"typeAware": true
6+
},
7+
"categories": {
8+
// Disabled so rules are enabled explicitly below for full control.
9+
// New oxlint correctness rules won't auto-enable on upgrades.
10+
"correctness": "off"
11+
},
12+
"env": {
13+
"builtin": true
14+
},
15+
"ignorePatterns": ["**/*.config.{js,ts,mjs}", "**/vitest.workspace.ts"],
16+
"rules": {
17+
"constructor-super": "error",
18+
"for-direction": "error",
19+
"getter-return": "error",
20+
"no-async-promise-executor": "error",
21+
"no-case-declarations": "error",
22+
"no-class-assign": "error",
23+
"no-compare-neg-zero": "error",
24+
"no-cond-assign": "error",
25+
"no-const-assign": "error",
26+
"no-constant-binary-expression": "error",
27+
"no-constant-condition": "error",
28+
"no-control-regex": "error",
29+
"no-debugger": "error",
30+
"no-delete-var": "error",
31+
"no-dupe-class-members": "error",
32+
"no-dupe-else-if": "error",
33+
"no-dupe-keys": "error",
34+
"no-duplicate-case": "error",
35+
"no-empty": "error",
36+
"no-empty-character-class": "error",
37+
"no-empty-pattern": "error",
38+
"no-empty-static-block": "error",
39+
"no-ex-assign": "error",
40+
"no-extra-boolean-cast": "error",
41+
"no-fallthrough": "error",
42+
"no-func-assign": "error",
43+
"no-global-assign": "error",
44+
"no-import-assign": "error",
45+
"no-invalid-regexp": "error",
46+
"no-irregular-whitespace": "error",
47+
"no-loss-of-precision": "error",
48+
"no-misleading-character-class": "error",
49+
"no-new-native-nonconstructor": "error",
50+
"no-nonoctal-decimal-escape": "error",
51+
"no-obj-calls": "error",
52+
"no-prototype-builtins": "error",
53+
"no-redeclare": "error",
54+
"no-regex-spaces": "error",
55+
"no-self-assign": "error",
56+
"no-setter-return": "error",
57+
"no-shadow-restricted-names": "error",
58+
"no-sparse-arrays": "error",
59+
"no-this-before-super": "error",
60+
"no-unassigned-vars": "error",
61+
"no-unsafe-finally": "error",
62+
"no-unsafe-negation": "error",
63+
"no-unsafe-optional-chaining": "error",
64+
"no-unreachable": "error",
65+
"no-unused-labels": "error",
66+
"no-unused-private-class-members": "error",
67+
"no-unused-vars": [
68+
"error",
69+
{
70+
"argsIgnorePattern": "^_",
71+
"varsIgnorePattern": "^_",
72+
"caughtErrorsIgnorePattern": "^_"
73+
}
74+
],
75+
"no-useless-backreference": "error",
76+
"no-useless-catch": "error",
77+
"no-useless-escape": "error",
78+
"no-with": "error",
79+
"preserve-caught-error": "error",
80+
"require-yield": "error",
81+
"use-isnan": "error",
82+
"valid-typeof": "error",
83+
"no-array-constructor": "error",
84+
"no-console": [
85+
"error",
86+
{
87+
"allow": ["warn", "error"]
88+
}
89+
],
90+
"no-caller": "error",
91+
"no-eval": "error",
92+
"no-iterator": "error",
93+
"no-useless-rename": "error",
94+
95+
// oxc rules
96+
"bad-array-method-on-arguments": "error",
97+
"bad-char-at-comparison": "error",
98+
"bad-comparison-sequence": "error",
99+
"bad-min-max-func": "error",
100+
"bad-object-literal-comparison": "error",
101+
"bad-replace-all-arg": "error",
102+
"const-comparisons": "error",
103+
"double-comparisons": "error",
104+
"erasing-op": "error",
105+
"missing-throw": "error",
106+
"number-arg-out-of-range": "error",
107+
"only-used-in-recursion": "error",
108+
"uninvoked-array-callback": "error",
109+
110+
// unicorn rules
111+
"unicorn/no-await-in-promise-methods": "error",
112+
"unicorn/no-empty-file": "error",
113+
"unicorn/no-invalid-fetch-options": "error",
114+
"unicorn/no-invalid-remove-event-listener": "error",
115+
"unicorn/no-new-array": "error",
116+
"unicorn/no-single-promise-in-promise-methods": "error",
117+
"unicorn/no-thenable": "error",
118+
"unicorn/no-unnecessary-await": "error",
119+
"unicorn/no-useless-spread": "error",
120+
"unicorn/prefer-set-size": "error",
121+
"typescript/ban-ts-comment": "error",
122+
"typescript/no-duplicate-enum-values": "error",
123+
"typescript/no-empty-object-type": "error",
124+
"typescript/no-extra-non-null-assertion": "error",
125+
"typescript/no-misused-new": "error",
126+
"typescript/no-namespace": "error",
127+
"typescript/no-non-null-asserted-optional-chain": "error",
128+
"typescript/no-require-imports": "error",
129+
"typescript/no-this-alias": "error",
130+
"typescript/no-unnecessary-type-constraint": "error",
131+
"typescript/no-unsafe-declaration-merging": "error",
132+
"typescript/no-unsafe-function-type": "error",
133+
"typescript/no-wrapper-object-types": "error",
134+
"typescript/prefer-as-const": "error",
135+
"typescript/prefer-namespace-keyword": "error",
136+
"typescript/triple-slash-reference": "error",
137+
"typescript/consistent-type-imports": [
138+
"error",
139+
{
140+
"fixStyle": "inline-type-imports"
141+
}
142+
],
143+
"typescript/no-import-type-side-effects": "error",
144+
"typescript/no-unnecessary-parameter-property-assignment": "error",
145+
"typescript/no-useless-empty-export": "error",
146+
147+
// Type-aware rules (from typescript-eslint recommendedTypeChecked)
148+
"typescript/await-thenable": "error",
149+
"typescript/no-array-delete": "error",
150+
"typescript/no-base-to-string": "error",
151+
"typescript/no-duplicate-type-constituents": "error",
152+
"typescript/no-for-in-array": "error",
153+
"typescript/no-implied-eval": "error",
154+
"typescript/no-redundant-type-constituents": "error",
155+
"typescript/no-unnecessary-type-assertion": "error",
156+
"typescript/no-unsafe-enum-comparison": "error",
157+
"typescript/no-unsafe-unary-minus": "error",
158+
"typescript/only-throw-error": "error",
159+
"typescript/prefer-promise-reject-errors": "error",
160+
"typescript/require-await": "error",
161+
"typescript/restrict-plus-operands": "error",
162+
"typescript/restrict-template-expressions": "error",
163+
"typescript/switch-exhaustiveness-check": "error",
164+
"typescript/require-array-sort-compare": "error",
165+
166+
// Type-aware rules explicitly disabled
167+
"typescript/no-unsafe-argument": "off",
168+
"typescript/no-unsafe-assignment": "off",
169+
"typescript/no-unsafe-call": "off",
170+
"typescript/no-unsafe-member-access": "off",
171+
"typescript/no-unsafe-return": "off",
172+
"typescript/unbound-method": "off",
173+
"typescript/no-floating-promises": "off",
174+
"typescript/no-misused-promises": "off"
175+
},
176+
"overrides": [
177+
{
178+
"files": ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
179+
"rules": {
180+
"constructor-super": "off",
181+
"no-class-assign": "off",
182+
"no-const-assign": "off",
183+
"no-dupe-class-members": "off",
184+
"no-dupe-keys": "off",
185+
"no-func-assign": "off",
186+
"no-import-assign": "off",
187+
"no-new-native-nonconstructor": "off",
188+
"no-obj-calls": "off",
189+
"no-redeclare": "off",
190+
"no-setter-return": "off",
191+
"no-this-before-super": "off",
192+
"no-unsafe-negation": "off",
193+
"no-var": "error",
194+
"no-with": "off",
195+
"prefer-const": "error",
196+
"prefer-rest-params": "error",
197+
"prefer-spread": "error"
198+
}
199+
},
200+
{
201+
"files": ["packages/graph-explorer/**/*.{ts,tsx}"],
202+
"rules": {
203+
"react/display-name": "off",
204+
"react/jsx-key": "error",
205+
"react/jsx-no-comment-textnodes": "error",
206+
"react/jsx-no-duplicate-props": "error",
207+
"react/jsx-no-target-blank": "error",
208+
"react/jsx-no-undef": "error",
209+
"react/no-children-prop": "error",
210+
"react/no-danger-with-children": "error",
211+
"react/no-direct-mutation-state": "error",
212+
"react/no-find-dom-node": "error",
213+
"react/no-is-mounted": "error",
214+
"react/no-render-return-value": "error",
215+
"react/no-string-refs": "error",
216+
"react/no-unescaped-entities": "error",
217+
"react/no-unknown-property": "error",
218+
"react/no-unsafe": "off",
219+
"react/react-in-jsx-scope": "off",
220+
"@tanstack/query/exhaustive-deps": "error",
221+
"@tanstack/query/no-rest-destructuring": "warn",
222+
"@tanstack/query/stable-query-client": "error",
223+
"@tanstack/query/no-unstable-deps": "error",
224+
"@tanstack/query/infinite-query-property-order": "error",
225+
"@tanstack/query/no-void-query-fn": "error",
226+
"@tanstack/query/mutation-property-order": "error",
227+
"react/jsx-curly-brace-presence": "error",
228+
"react/rules-of-hooks": "error",
229+
"react/exhaustive-deps": "warn"
230+
},
231+
"jsPlugins": ["@tanstack/eslint-plugin-query"],
232+
"plugins": ["react"],
233+
"env": {
234+
"browser": true
235+
}
236+
},
237+
{
238+
"files": ["packages/graph-explorer-proxy-server/**/*.{ts,js}"],
239+
"env": {
240+
"node": true
241+
}
242+
}
243+
]
244+
}

0 commit comments

Comments
 (0)