ultracite 7.6.5 → 7.8.0
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/config/biome/core/biome.jsonc +2 -0
- package/config/biome/tanstack/biome.jsonc +16 -0
- package/config/eslint/core/rules/eslint-typescript.mjs +3 -1
- package/config/eslint/core/rules/eslint.mjs +0 -11
- package/config/eslint/core/rules/import.mjs +1 -0
- package/config/eslint/core/rules/typescript.mjs +1 -27
- package/config/eslint/jest/eslint.config.mjs +8 -1
- package/config/eslint/jest/rules/jest.mjs +10 -1
- package/config/eslint/nestjs/eslint.config.mjs +17 -1
- package/config/eslint/nestjs/rules/nestjs.mjs +17 -0
- package/config/eslint/next/eslint.config.mjs +6 -0
- package/config/eslint/react/eslint.config.mjs +0 -4
- package/config/eslint/react/rules/react-hooks.mjs +1 -3
- package/config/eslint/react/rules/react.mjs +3 -0
- package/config/eslint/remix/eslint.config.mjs +7 -0
- package/config/eslint/tanstack/eslint.config.mjs +34 -0
- package/config/eslint/tanstack/rules/router.mjs +13 -0
- package/config/eslint/tanstack/rules/start.mjs +13 -0
- package/config/eslint/vitest/eslint.config.mjs +8 -1
- package/config/eslint/vitest/rules/vitest.mjs +7 -5
- package/config/oxlint/core/index.mjs +9 -0
- package/config/oxlint/react/index.mjs +6 -0
- package/config/oxlint/tanstack/index.d.mts +5 -0
- package/config/oxlint/tanstack/index.mjs +14 -0
- package/config/oxlint/vitest/index.mjs +1 -0
- package/dist/index.js +54 -52
- package/package.json +19 -16
- /package/config/eslint/{react → tanstack}/rules/query.mjs +0 -0
|
@@ -413,6 +413,7 @@
|
|
|
413
413
|
"noDoubleEquals": "error",
|
|
414
414
|
"noDuplicateCase": "error",
|
|
415
415
|
"noDuplicateClassMembers": "error",
|
|
416
|
+
"noDuplicateDependencies": "error",
|
|
416
417
|
"noDuplicateElseIf": "error",
|
|
417
418
|
"noDuplicateFields": "error",
|
|
418
419
|
"noDuplicateObjectKeys": "error",
|
|
@@ -470,6 +471,7 @@
|
|
|
470
471
|
"noUnusedExpressions": "error",
|
|
471
472
|
|
|
472
473
|
"noConsole": "off",
|
|
474
|
+
"useDeprecatedDate": "off",
|
|
473
475
|
|
|
474
476
|
/** ------ Project/Scanner rules. Use ultracite/biome/type-aware to enable. ------ **/
|
|
475
477
|
"noDeprecatedImports": "off",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"root": false,
|
|
3
|
+
"$schema": "../../../node_modules/@biomejs/biome/configuration_schema.json",
|
|
4
|
+
"overrides": [
|
|
5
|
+
{
|
|
6
|
+
"includes": ["**/routes/**/*.{tsx,ts}", "**/app/routes/**/*.{tsx,ts}"],
|
|
7
|
+
"linter": {
|
|
8
|
+
"rules": {
|
|
9
|
+
"style": {
|
|
10
|
+
"useFilenamingConvention": "off"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
const config = {
|
|
2
|
-
// ESLint
|
|
2
|
+
// ESLint core rules disabled because either:
|
|
3
|
+
// - @typescript-eslint provides a type-aware equivalent (no-shadow, no-unused-vars, etc.), OR
|
|
4
|
+
// - Prettier/Oxfmt owns formatting (brace-style, indent, semi, quotes, etc.)
|
|
3
5
|
"brace-style": "off",
|
|
4
6
|
camelcase: "off",
|
|
5
7
|
"comma-dangle": "off",
|
|
@@ -5,7 +5,6 @@ const baseRules = { ...plugin.configs.all.rules };
|
|
|
5
5
|
|
|
6
6
|
const overrideRules = {
|
|
7
7
|
"capitalized-comments": "off",
|
|
8
|
-
complexity: "off",
|
|
9
8
|
"id-length": ["error", { exceptions: ["x", "y", "z"] }],
|
|
10
9
|
"max-lines": "off",
|
|
11
10
|
"max-lines-per-function": "off",
|
|
@@ -13,19 +12,9 @@ const overrideRules = {
|
|
|
13
12
|
"max-statements": "off",
|
|
14
13
|
"no-ternary": "off",
|
|
15
14
|
"no-undefined": "off",
|
|
16
|
-
"no-unused-private-class-members": "off",
|
|
17
15
|
"one-var": "off",
|
|
18
|
-
"prefer-destructuring": [
|
|
19
|
-
"error",
|
|
20
|
-
{
|
|
21
|
-
array: false,
|
|
22
|
-
object: true,
|
|
23
|
-
},
|
|
24
|
-
],
|
|
25
16
|
// https://github.com/eslint/eslint/issues/11542
|
|
26
17
|
"sort-imports": "off",
|
|
27
|
-
"sort-keys": "off",
|
|
28
|
-
"sort-vars": "off",
|
|
29
18
|
};
|
|
30
19
|
|
|
31
20
|
const config = Object.assign(baseRules, overrideRules);
|
|
@@ -11,20 +11,8 @@ const baseRules = Object.fromEntries(
|
|
|
11
11
|
);
|
|
12
12
|
|
|
13
13
|
const overrideRules = {
|
|
14
|
-
// Disabled for Prettier
|
|
15
|
-
"@typescript-eslint/block-spacing": "off",
|
|
16
|
-
"@typescript-eslint/brace-style": "off",
|
|
17
|
-
"@typescript-eslint/comma-dangle": "off",
|
|
18
|
-
"@typescript-eslint/comma-spacing": "off",
|
|
19
14
|
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
|
|
20
15
|
"@typescript-eslint/explicit-function-return-type": "off",
|
|
21
|
-
"@typescript-eslint/func-call-spacing": "off",
|
|
22
|
-
"@typescript-eslint/indent": "off",
|
|
23
|
-
"@typescript-eslint/key-spacing": "off",
|
|
24
|
-
"@typescript-eslint/keyword-spacing": "off",
|
|
25
|
-
"@typescript-eslint/lines-around-comment": "off",
|
|
26
|
-
"@typescript-eslint/lines-between-class-members": "off",
|
|
27
|
-
"@typescript-eslint/member-delimiter-style": "off",
|
|
28
16
|
"@typescript-eslint/naming-convention": [
|
|
29
17
|
"error",
|
|
30
18
|
{
|
|
@@ -37,23 +25,9 @@ const overrideRules = {
|
|
|
37
25
|
selector: "objectLiteralProperty",
|
|
38
26
|
},
|
|
39
27
|
],
|
|
40
|
-
"@typescript-eslint/no-confusing-void-expression": "off",
|
|
41
|
-
"@typescript-eslint/no-extra-parens": "off",
|
|
42
28
|
"@typescript-eslint/no-magic-numbers": "off",
|
|
43
|
-
"@typescript-eslint/no-misused-promises": "off",
|
|
44
|
-
"@typescript-eslint/no-type-alias": "off",
|
|
45
|
-
"@typescript-eslint/object-curly-spacing": "off",
|
|
46
|
-
"@typescript-eslint/padding-line-between-statements": "off",
|
|
47
|
-
"@typescript-eslint/prefer-readonly": "off",
|
|
48
29
|
"@typescript-eslint/prefer-readonly-parameter-types": "off",
|
|
49
|
-
"@typescript-eslint/
|
|
50
|
-
"@typescript-eslint/semi": "off",
|
|
51
|
-
"@typescript-eslint/sort-type-union-intersection-members": "off",
|
|
52
|
-
"@typescript-eslint/space-before-blocks": "off",
|
|
53
|
-
"@typescript-eslint/space-before-function-paren": "off",
|
|
54
|
-
"@typescript-eslint/space-infix-ops": "off",
|
|
55
|
-
"@typescript-eslint/strict-boolean-expressions": "off",
|
|
56
|
-
"@typescript-eslint/type-annotation-spacing": "off",
|
|
30
|
+
"@typescript-eslint/return-await": ["error", "always"],
|
|
57
31
|
};
|
|
58
32
|
|
|
59
33
|
const config = Object.assign(baseRules, overrideRules);
|
|
@@ -7,7 +7,10 @@ import jestRules from "./rules/jest.mjs";
|
|
|
7
7
|
|
|
8
8
|
const config = [
|
|
9
9
|
{
|
|
10
|
-
files: [
|
|
10
|
+
files: [
|
|
11
|
+
"**/*.{test,spec}.{ts,tsx,js,jsx}",
|
|
12
|
+
"**/__tests__/**/*.{ts,tsx,js,jsx}",
|
|
13
|
+
],
|
|
11
14
|
languageOptions: {
|
|
12
15
|
globals: {
|
|
13
16
|
...globals.jest,
|
|
@@ -18,6 +21,10 @@ const config = [
|
|
|
18
21
|
},
|
|
19
22
|
rules: {
|
|
20
23
|
...jestRules,
|
|
24
|
+
// Mock callbacks often need empty functions
|
|
25
|
+
"no-empty-function": "off",
|
|
26
|
+
// Mock factories use Promise.resolve/reject (conflicts with require-await)
|
|
27
|
+
"promise/prefer-await-to-then": "off",
|
|
21
28
|
},
|
|
22
29
|
},
|
|
23
30
|
];
|
|
@@ -10,7 +10,16 @@ const baseRules = Object.fromEntries(
|
|
|
10
10
|
availableKeys.map((key) => [`jest/${key}`, "error"])
|
|
11
11
|
);
|
|
12
12
|
|
|
13
|
-
const overrideRules = {
|
|
13
|
+
const overrideRules = {
|
|
14
|
+
// Mock factories use conditionals for path-based routing
|
|
15
|
+
"jest/no-conditional-in-test": "off",
|
|
16
|
+
// bun:test uses beforeEach hooks for mock.restore()
|
|
17
|
+
"jest/no-hooks": "off",
|
|
18
|
+
// Too strict for general use — not all tests need explicit assertion counts
|
|
19
|
+
"jest/prefer-expect-assertions": "off",
|
|
20
|
+
// bun:test mock.module() must be called at top level
|
|
21
|
+
"jest/require-hook": "off",
|
|
22
|
+
};
|
|
14
23
|
|
|
15
24
|
const config = Object.assign(baseRules, overrideRules);
|
|
16
25
|
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
|
|
2
|
+
|
|
3
|
+
import { plugin as nestjsTyped } from "@darraghor/eslint-plugin-nestjs-typed";
|
|
4
|
+
|
|
5
|
+
import nestjsRules from "./rules/nestjs.mjs";
|
|
6
|
+
|
|
7
|
+
const config = [
|
|
8
|
+
{
|
|
9
|
+
files: ["**/*.ts"],
|
|
10
|
+
plugins: {
|
|
11
|
+
"@darraghor/nestjs-typed": nestjsTyped,
|
|
12
|
+
},
|
|
13
|
+
rules: {
|
|
14
|
+
...nestjsRules,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
];
|
|
2
18
|
|
|
3
19
|
export default config;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { plugin } from "@darraghor/eslint-plugin-nestjs-typed";
|
|
2
|
+
|
|
3
|
+
const { rules } = plugin;
|
|
4
|
+
|
|
5
|
+
const availableKeys = Object.keys(rules).filter(
|
|
6
|
+
(key) => !rules[key].meta.deprecated
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
const baseRules = Object.fromEntries(
|
|
10
|
+
availableKeys.map((key) => [`@darraghor/nestjs-typed/${key}`, "error"])
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
const overrideRules = {};
|
|
14
|
+
|
|
15
|
+
const config = Object.assign(baseRules, overrideRules);
|
|
16
|
+
|
|
17
|
+
export default config;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
|
|
2
2
|
|
|
3
|
-
import query from "@tanstack/eslint-plugin-query";
|
|
4
3
|
import jsxA11y from "eslint-plugin-jsx-a11y";
|
|
5
4
|
import react from "eslint-plugin-react";
|
|
6
5
|
import reactHooks from "eslint-plugin-react-hooks";
|
|
7
6
|
|
|
8
7
|
import jsxA11yRules from "./rules/jsx-a11y.mjs";
|
|
9
|
-
import queryRules from "./rules/query.mjs";
|
|
10
8
|
import reactHooksRules from "./rules/react-hooks.mjs";
|
|
11
9
|
import reactRules from "./rules/react.mjs";
|
|
12
10
|
|
|
@@ -21,7 +19,6 @@ const config = [
|
|
|
21
19
|
},
|
|
22
20
|
},
|
|
23
21
|
plugins: {
|
|
24
|
-
"@tanstack/query": query,
|
|
25
22
|
"jsx-a11y": jsxA11y,
|
|
26
23
|
react,
|
|
27
24
|
"react-hooks": reactHooks,
|
|
@@ -30,7 +27,6 @@ const config = [
|
|
|
30
27
|
...reactRules,
|
|
31
28
|
...reactHooksRules,
|
|
32
29
|
...jsxA11yRules,
|
|
33
|
-
...queryRules,
|
|
34
30
|
},
|
|
35
31
|
settings: {
|
|
36
32
|
react: {
|
|
@@ -8,9 +8,7 @@ const baseRules = Object.fromEntries(
|
|
|
8
8
|
availableKeys.map((key) => [`react-hooks/${key}`, "error"])
|
|
9
9
|
);
|
|
10
10
|
|
|
11
|
-
const overrideRules = {
|
|
12
|
-
"react-hooks/exhaustive-deps": "error",
|
|
13
|
-
};
|
|
11
|
+
const overrideRules = {};
|
|
14
12
|
|
|
15
13
|
const config = Object.assign(baseRules, overrideRules);
|
|
16
14
|
|
|
@@ -18,6 +18,7 @@ const overrideRules = {
|
|
|
18
18
|
namedComponents: "arrow-function",
|
|
19
19
|
},
|
|
20
20
|
],
|
|
21
|
+
"react/jsx-boolean-value": "off",
|
|
21
22
|
"react/jsx-filename-extension": [
|
|
22
23
|
"error",
|
|
23
24
|
{
|
|
@@ -36,7 +37,9 @@ const overrideRules = {
|
|
|
36
37
|
"react/no-arrow-function-lifecycle": "off",
|
|
37
38
|
"react/no-invalid-html-attribute": "off",
|
|
38
39
|
"react/no-multi-comp": "off",
|
|
40
|
+
"react/no-unknown-property": "off",
|
|
39
41
|
"react/no-unused-class-component-methods": "off",
|
|
42
|
+
"react/only-export-components": "off",
|
|
40
43
|
"react/react-in-jsx-scope": "off",
|
|
41
44
|
"react/require-default-props": "off",
|
|
42
45
|
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
|
|
2
|
+
|
|
3
|
+
import query from "@tanstack/eslint-plugin-query";
|
|
4
|
+
import router from "@tanstack/eslint-plugin-router";
|
|
5
|
+
import start from "@tanstack/eslint-plugin-start";
|
|
6
|
+
|
|
7
|
+
import queryRules from "./rules/query.mjs";
|
|
8
|
+
import routerRules from "./rules/router.mjs";
|
|
9
|
+
import startRules from "./rules/start.mjs";
|
|
10
|
+
|
|
11
|
+
const config = [
|
|
12
|
+
{
|
|
13
|
+
files: ["**/*.jsx", "**/*.tsx"],
|
|
14
|
+
languageOptions: {
|
|
15
|
+
parserOptions: {
|
|
16
|
+
ecmaFeatures: {
|
|
17
|
+
jsx: true,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
plugins: {
|
|
22
|
+
"@tanstack/query": query,
|
|
23
|
+
"@tanstack/router": router,
|
|
24
|
+
"@tanstack/start": start,
|
|
25
|
+
},
|
|
26
|
+
rules: {
|
|
27
|
+
...queryRules,
|
|
28
|
+
...routerRules,
|
|
29
|
+
...startRules,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
export default config;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import pluginRouter from "@tanstack/eslint-plugin-router";
|
|
2
|
+
|
|
3
|
+
const { rules } = pluginRouter;
|
|
4
|
+
|
|
5
|
+
const availableKeys = Object.keys(rules).filter(
|
|
6
|
+
(key) => !rules[key]?.meta?.deprecated
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
const baseRules = Object.fromEntries(
|
|
10
|
+
availableKeys.map((key) => [`@tanstack/router/${key}`, "error"])
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
export default { ...baseRules };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import pluginStart from "@tanstack/eslint-plugin-start";
|
|
2
|
+
|
|
3
|
+
const { rules } = pluginStart;
|
|
4
|
+
|
|
5
|
+
const availableKeys = Object.keys(rules).filter(
|
|
6
|
+
(key) => !rules[key]?.meta?.deprecated
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
const baseRules = Object.fromEntries(
|
|
10
|
+
availableKeys.map((key) => [`@tanstack/start/${key}`, "error"])
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
export default { ...baseRules };
|
|
@@ -6,12 +6,19 @@ import vitestRules from "./rules/vitest.mjs";
|
|
|
6
6
|
|
|
7
7
|
const config = [
|
|
8
8
|
{
|
|
9
|
-
files: [
|
|
9
|
+
files: [
|
|
10
|
+
"**/*.{test,spec}.{ts,tsx,js,jsx}",
|
|
11
|
+
"**/__tests__/**/*.{ts,tsx,js,jsx}",
|
|
12
|
+
],
|
|
10
13
|
plugins: {
|
|
11
14
|
vitest,
|
|
12
15
|
},
|
|
13
16
|
rules: {
|
|
14
17
|
...vitestRules,
|
|
18
|
+
// Mock callbacks often need empty functions
|
|
19
|
+
"no-empty-function": "off",
|
|
20
|
+
// Mock factories use Promise.resolve/reject (conflicts with require-await)
|
|
21
|
+
"promise/prefer-await-to-then": "off",
|
|
15
22
|
},
|
|
16
23
|
},
|
|
17
24
|
];
|
|
@@ -15,7 +15,7 @@ const overrideRules = {
|
|
|
15
15
|
"vitest/no-conditional-in-test": "off",
|
|
16
16
|
"vitest/no-hooks": "off",
|
|
17
17
|
|
|
18
|
-
//
|
|
18
|
+
// Explicit imports are preferred over globals
|
|
19
19
|
"vitest/no-importing-vitest-globals": "off",
|
|
20
20
|
|
|
21
21
|
// Conflicts with prefer-called-once (the original #604 issue)
|
|
@@ -23,19 +23,21 @@ const overrideRules = {
|
|
|
23
23
|
|
|
24
24
|
// Too strict for general use
|
|
25
25
|
"vitest/prefer-expect-assertions": "off",
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
// Conflicts with prefer-describe-function-title — function names aren't lowercase strings
|
|
28
|
+
"vitest/prefer-lowercase-title": "off",
|
|
27
29
|
|
|
28
30
|
// Conflicts with prefer-to-be-truthy and prefer-to-be-falsy (#645)
|
|
29
31
|
// prefer-strict-boolean-matchers: use toBe(true)/toBe(false)
|
|
30
32
|
// prefer-to-be-truthy/falsy: use toBeTruthy()/toBeFalsy()
|
|
31
33
|
"vitest/prefer-strict-boolean-matchers": "off",
|
|
32
34
|
|
|
33
|
-
// Too strict for general use
|
|
34
|
-
"vitest/prefer-to-have-been-called-times": "off",
|
|
35
|
-
|
|
36
35
|
// Too strict — matching oxlint jest disabled rules
|
|
37
36
|
"vitest/require-hook": "off",
|
|
38
37
|
"vitest/require-test-timeout": "off",
|
|
38
|
+
|
|
39
|
+
// Conflicts with prefer-describe-function-title — function refs aren't string titles (#665)
|
|
40
|
+
"vitest/valid-title": "off",
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
const config = Object.assign(baseRules, overrideRules);
|
|
@@ -61,6 +61,7 @@ export default defineConfig({
|
|
|
61
61
|
"grouped-accessor-pairs": "error",
|
|
62
62
|
"guard-for-in": "error",
|
|
63
63
|
"id-length": "off",
|
|
64
|
+
"id-match": "error",
|
|
64
65
|
"init-declarations": "off",
|
|
65
66
|
"logical-assignment-operators": "error",
|
|
66
67
|
"max-classes-per-file": "error",
|
|
@@ -113,6 +114,8 @@ export default defineConfig({
|
|
|
113
114
|
"no-func-assign": "error",
|
|
114
115
|
"no-global-assign": "error",
|
|
115
116
|
"no-implicit-coercion": "off",
|
|
117
|
+
"no-implicit-globals": "error",
|
|
118
|
+
"no-implied-eval": "error",
|
|
116
119
|
"no-import-assign": "error",
|
|
117
120
|
"no-inline-comments": "error",
|
|
118
121
|
"no-inner-declarations": "error",
|
|
@@ -192,6 +195,7 @@ export default defineConfig({
|
|
|
192
195
|
"no-with": "error",
|
|
193
196
|
"object-shorthand": "error",
|
|
194
197
|
"operator-assignment": "error",
|
|
198
|
+
"prefer-arrow-callback": "error",
|
|
195
199
|
"prefer-const": "error",
|
|
196
200
|
"prefer-destructuring": "error",
|
|
197
201
|
"prefer-exponentiation-operator": "error",
|
|
@@ -199,6 +203,7 @@ export default defineConfig({
|
|
|
199
203
|
"prefer-object-has-own": "error",
|
|
200
204
|
"prefer-object-spread": "error",
|
|
201
205
|
"prefer-promise-reject-errors": "error",
|
|
206
|
+
"prefer-regex-literals": "error",
|
|
202
207
|
"prefer-rest-params": "error",
|
|
203
208
|
"prefer-spread": "error",
|
|
204
209
|
"prefer-template": "error",
|
|
@@ -227,6 +232,7 @@ export default defineConfig({
|
|
|
227
232
|
"import/group-exports": "off",
|
|
228
233
|
"import/max-dependencies": "off",
|
|
229
234
|
"import/namespace": "error",
|
|
235
|
+
"import/newline-after-import": "error",
|
|
230
236
|
"import/no-absolute-path": "error",
|
|
231
237
|
"import/no-amd": "error",
|
|
232
238
|
"import/no-anonymous-default-export": "off",
|
|
@@ -268,7 +274,10 @@ export default defineConfig({
|
|
|
268
274
|
"jsdoc/require-returns": "off",
|
|
269
275
|
"jsdoc/require-returns-description": "error",
|
|
270
276
|
"jsdoc/require-returns-type": "off",
|
|
277
|
+
"jsdoc/require-throws-description": "error",
|
|
278
|
+
"jsdoc/require-throws-type": "error",
|
|
271
279
|
"jsdoc/require-yields": "error",
|
|
280
|
+
"jsdoc/require-yields-type": "error",
|
|
272
281
|
|
|
273
282
|
// ── node ───────────────────────────────────────────────────────────
|
|
274
283
|
"node/global-require": "error",
|
|
@@ -3,8 +3,12 @@ import { defineConfig } from "oxlint";
|
|
|
3
3
|
export default defineConfig({
|
|
4
4
|
plugins: ["react", "react-perf", "jsx-a11y"],
|
|
5
5
|
rules: {
|
|
6
|
+
"jsx-a11y/control-has-associated-label": "error",
|
|
6
7
|
"jsx-a11y/interactive-supports-focus": "error",
|
|
7
8
|
"jsx-a11y/no-autofocus": "off",
|
|
9
|
+
"jsx-a11y/no-interactive-element-to-noninteractive-role": "error",
|
|
10
|
+
"jsx-a11y/no-noninteractive-element-interactions": "error",
|
|
11
|
+
"jsx-a11y/no-noninteractive-element-to-interactive-role": "error",
|
|
8
12
|
"react-perf/jsx-no-jsx-as-prop": "off",
|
|
9
13
|
"react-perf/jsx-no-new-array-as-prop": "off",
|
|
10
14
|
"react-perf/jsx-no-new-object-as-prop": "off",
|
|
@@ -15,7 +19,9 @@ export default defineConfig({
|
|
|
15
19
|
"react/jsx-props-no-spreading": "off",
|
|
16
20
|
|
|
17
21
|
"react/no-multi-comp": "off",
|
|
22
|
+
"react/no-object-type-as-default-prop": "error",
|
|
18
23
|
"react/no-unknown-property": "off",
|
|
24
|
+
"react/no-unstable-nested-components": "error",
|
|
19
25
|
"react/only-export-components": "off",
|
|
20
26
|
|
|
21
27
|
"react/react-in-jsx-scope": "off",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig } from "oxlint";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
overrides: [
|
|
5
|
+
{
|
|
6
|
+
files: ["**/routeTree.gen.ts"],
|
|
7
|
+
rules: {
|
|
8
|
+
"unicorn/filename-case": "off",
|
|
9
|
+
"unicorn/no-abusive-eslint-disable": "off",
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
rules: {},
|
|
14
|
+
});
|
|
@@ -34,6 +34,7 @@ export default defineConfig({
|
|
|
34
34
|
"vitest/no-test-prefixes": "error",
|
|
35
35
|
"vitest/no-test-return-statement": "error",
|
|
36
36
|
"vitest/no-unneeded-async-expect-function": "error",
|
|
37
|
+
"vitest/padding-around-after-all-blocks": "error",
|
|
37
38
|
"vitest/prefer-called-exactly-once-with": "error",
|
|
38
39
|
"vitest/prefer-called-once": "error",
|
|
39
40
|
"vitest/prefer-called-with": "error",
|