ultracite 7.2.5 → 7.3.1

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.
Files changed (38) hide show
  1. package/README.md +4 -0
  2. package/config/biome/core/biome.jsonc +6 -8
  3. package/config/biome/jest/biome.jsonc +21 -0
  4. package/config/biome/svelte/biome.jsonc +1 -1
  5. package/config/biome/type-aware/biome.jsonc +19 -0
  6. package/config/biome/vitest/biome.jsonc +21 -0
  7. package/config/eslint/angular/eslint.config.mjs +1 -0
  8. package/config/eslint/astro/eslint.config.mjs +1 -0
  9. package/config/eslint/astro/rules/astro.mjs +1 -3
  10. package/config/eslint/core/eslint.config.mjs +21 -38
  11. package/config/eslint/core/rules/eslint-typescript.mjs +1 -1
  12. package/config/eslint/core/rules/eslint.mjs +1 -1
  13. package/config/eslint/core/rules/import.mjs +17 -17
  14. package/config/eslint/core/rules/n.mjs +2 -2
  15. package/config/eslint/core/rules/storybook.mjs +1 -3
  16. package/config/eslint/core/rules/typescript.mjs +20 -21
  17. package/config/eslint/core/rules/unicorn.mjs +2 -2
  18. package/config/eslint/jest/eslint.config.mjs +25 -0
  19. package/config/eslint/next/eslint.config.mjs +1 -0
  20. package/config/eslint/qwik/eslint.config.mjs +1 -0
  21. package/config/eslint/react/eslint.config.mjs +4 -3
  22. package/config/eslint/react/rules/jsx-a11y.mjs +2 -2
  23. package/config/eslint/react/rules/query.mjs +1 -3
  24. package/config/eslint/react/rules/react.mjs +7 -7
  25. package/config/eslint/remix/eslint.config.mjs +1 -0
  26. package/config/eslint/solid/eslint.config.mjs +1 -0
  27. package/config/eslint/svelte/eslint.config.mjs +1 -0
  28. package/config/eslint/vitest/eslint.config.mjs +19 -0
  29. package/config/eslint/vitest/rules/vitest.mjs +36 -0
  30. package/config/eslint/vue/eslint.config.mjs +1 -0
  31. package/config/oxlint/core/.oxlintrc.json +10 -65
  32. package/config/oxlint/jest/.oxlintrc.json +74 -0
  33. package/config/oxlint/vitest/.oxlintrc.json +65 -0
  34. package/config/prettier/prettier.config.mjs +6 -6
  35. package/config/stylelint/stylelint.config.mjs +3 -3
  36. package/dist/index.js +114 -114
  37. package/package.json +36 -35
  38. /package/config/eslint/{core → jest}/rules/jest.mjs +0 -0
package/README.md CHANGED
@@ -27,15 +27,19 @@ The interactive setup will guide you through selecting your formatter/linter, fr
27
27
  ## Key Features
28
28
 
29
29
  ### ⚡ Subsecond Performance
30
+
30
31
  Built on Rust-based tools for instant code analysis. On-save checks feel seamless without interrupting your workflow.
31
32
 
32
33
  ### 🎯 Zero-Config by Design
34
+
33
35
  Hundreds of preconfigured rules optimized for JavaScript and TypeScript projects. Customize when needed, but it works perfectly out of the box.
34
36
 
35
37
  ### 🤖 AI-Ready
38
+
36
39
  Generate rules for 20+ AI agents including Claude Code, GitHub Copilot, Cursor, Gemini, and more. Ensures consistent code style across all team members and AI models.
37
40
 
38
41
  ### 🏗️ Monorepo Ready
42
+
39
43
  Unified toolchain configuration across all packages and apps, eliminating duplicate config files while maintaining consistency.
40
44
 
41
45
  ---
@@ -136,7 +136,6 @@
136
136
  "maxAllowedComplexity": 20
137
137
  }
138
138
  },
139
- "noExcessiveNestedTestSuites": "error",
140
139
  "noExtraBooleanCast": "error",
141
140
  "noFlatMapIdentity": "error",
142
141
  "noForEach": "error",
@@ -226,9 +225,10 @@
226
225
  "noProcessGlobal": "off",
227
226
  "useUniqueElementIds": "off",
228
227
 
229
- /** ------ Project rules use Scanner and are too slow (https://biomejs.dev/linter/domains/#project-rules) ------ **/
228
+ /** ------ Project/Scanner rules. Use ultracite/biome/type-aware to enable. ------ **/
230
229
  "noPrivateImports": "off",
231
230
  "noUndeclaredDependencies": "off",
231
+ "noUnresolvedImports": "off",
232
232
  "useImportExtensions": "off",
233
233
  "useJsonImportAttributes": "off",
234
234
 
@@ -286,7 +286,6 @@
286
286
  "style": {
287
287
  /** ------------------------ JavaScript Rules ------------------------ **/
288
288
 
289
- "noDoneCallback": "error",
290
289
  "noEnum": "error",
291
290
  "noExportedImports": "error",
292
291
  "noInferrableTypes": "error",
@@ -402,15 +401,12 @@
402
401
  "noDuplicateFields": "error",
403
402
  "noDuplicateObjectKeys": "error",
404
403
  "noDuplicateParameters": "error",
405
- "noDuplicateTestHooks": "error",
406
404
  "noEmptyBlockStatements": "error",
407
405
  "noEmptyInterface": "error",
408
406
  "noEvolvingTypes": "error",
409
407
  "noExplicitAny": "error",
410
- "noExportsInTest": "error",
411
408
  "noExtraNonNullAssertion": "error",
412
409
  "noFallthroughSwitchClause": "error",
413
- "noFocusedTests": "error",
414
410
  "noFunctionAssign": "error",
415
411
  "noGlobalAssign": "error",
416
412
  "noGlobalIsFinite": "error",
@@ -421,7 +417,6 @@
421
417
  "noLabelVar": "error",
422
418
  "noMisleadingCharacterClass": "error",
423
419
  "noMisleadingInstantiator": "error",
424
- "noMisplacedAssertion": "error",
425
420
  "noMisrefactoredShorthandAssign": "error",
426
421
  "noOctalEscape": "error",
427
422
  "noPrototypeBuiltins": "error",
@@ -430,7 +425,6 @@
430
425
  "noRedundantUseStrict": "error",
431
426
  "noSelfCompare": "error",
432
427
  "noShadowRestrictedNames": "error",
433
- "noSkippedTests": "error",
434
428
  "noSparseArray": "error",
435
429
  "noTemplateCurlyInString": "error",
436
430
  "noThenProperty": "error",
@@ -460,6 +454,10 @@
460
454
 
461
455
  "noConsole": "off",
462
456
 
457
+ /** ------ Project/Scanner rules. Use ultracite/biome/type-aware to enable. ------ **/
458
+ "noDeprecatedImports": "off",
459
+ "noImportCycles": "off",
460
+
463
461
  /** ------------------------ CSS Rules ------------------------ **/
464
462
  "noDuplicateAtImportRules": "error",
465
463
  "noDuplicateCustomProperties": "error",
@@ -0,0 +1,21 @@
1
+ {
2
+ "root": false,
3
+ "$schema": "../../../node_modules/@biomejs/biome/configuration_schema.json",
4
+ "linter": {
5
+ "rules": {
6
+ "complexity": {
7
+ "noExcessiveNestedTestSuites": "error"
8
+ },
9
+ "style": {
10
+ "noDoneCallback": "error"
11
+ },
12
+ "suspicious": {
13
+ "noDuplicateTestHooks": "error",
14
+ "noExportsInTest": "error",
15
+ "noFocusedTests": "error",
16
+ "noMisplacedAssertion": "error",
17
+ "noSkippedTests": "error"
18
+ }
19
+ }
20
+ }
21
+ }
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "suspicious": {
20
20
  "noReactSpecificProps": "error"
21
- },
21
+ }
22
22
  }
23
23
  }
24
24
  },
@@ -0,0 +1,19 @@
1
+ {
2
+ "root": false,
3
+ "$schema": "../../../node_modules/@biomejs/biome/configuration_schema.json",
4
+ "linter": {
5
+ "rules": {
6
+ "correctness": {
7
+ "noPrivateImports": "error",
8
+ "noUndeclaredDependencies": "error",
9
+ "noUnresolvedImports": "error",
10
+ "useImportExtensions": "error",
11
+ "useJsonImportAttributes": "error"
12
+ },
13
+ "suspicious": {
14
+ "noDeprecatedImports": "error",
15
+ "noImportCycles": "error"
16
+ }
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "root": false,
3
+ "$schema": "../../../node_modules/@biomejs/biome/configuration_schema.json",
4
+ "linter": {
5
+ "rules": {
6
+ "complexity": {
7
+ "noExcessiveNestedTestSuites": "error"
8
+ },
9
+ "style": {
10
+ "noDoneCallback": "error"
11
+ },
12
+ "suspicious": {
13
+ "noDuplicateTestHooks": "error",
14
+ "noExportsInTest": "error",
15
+ "noFocusedTests": "error",
16
+ "noMisplacedAssertion": "error",
17
+ "noSkippedTests": "error"
18
+ }
19
+ }
20
+ }
21
+ }
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
2
 
3
3
  import angular from "@angular-eslint/eslint-plugin";
4
+
4
5
  import angularRules from "./rules/angular.mjs";
5
6
 
6
7
  const config = [
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
2
 
3
3
  import astro from "eslint-plugin-astro";
4
+
4
5
  import astroRules from "./rules/astro.mjs";
5
6
 
6
7
  const config = [
@@ -1,6 +1,4 @@
1
- import plugin from "eslint-plugin-astro";
2
-
3
- const { rules } = plugin;
1
+ import { rules } from "eslint-plugin-astro";
4
2
 
5
3
  const availableKeys = Object.keys(rules).filter(
6
4
  (key) => !rules[key].meta.deprecated
@@ -8,9 +8,7 @@ import compat from "eslint-plugin-compat";
8
8
  import cypress from "eslint-plugin-cypress";
9
9
  import github from "eslint-plugin-github";
10
10
  import html from "eslint-plugin-html";
11
- // biome-ignore lint/performance/noNamespaceImport: Required for ESLint plugin compatibility
12
- import * as importPlugin from "eslint-plugin-import";
13
- import jest from "eslint-plugin-jest";
11
+ import { importX } from "eslint-plugin-import-x";
14
12
  import n from "eslint-plugin-n";
15
13
  import prettier from "eslint-plugin-prettier";
16
14
  import promise from "eslint-plugin-promise";
@@ -19,13 +17,13 @@ import storybook from "eslint-plugin-storybook";
19
17
  import unicorn from "eslint-plugin-unicorn";
20
18
  import unusedImports from "eslint-plugin-unused-imports";
21
19
  import globals from "globals";
20
+
22
21
  import compatRules from "./rules/compat.mjs";
23
22
  import cypressRules from "./rules/cypress.mjs";
24
- import eslintRules from "./rules/eslint.mjs";
25
23
  import eslintTypescriptRules from "./rules/eslint-typescript.mjs";
24
+ import eslintRules from "./rules/eslint.mjs";
26
25
  import githubRules from "./rules/github.mjs";
27
26
  import importRules from "./rules/import.mjs";
28
- import jestRules from "./rules/jest.mjs";
29
27
  import nRules from "./rules/n.mjs";
30
28
  import prettierRules from "./rules/prettier.mjs";
31
29
  import promiseRules from "./rules/promise.mjs";
@@ -36,13 +34,20 @@ import unicornRules from "./rules/unicorn.mjs";
36
34
  import unusedImportsRules from "./rules/unused-imports.mjs";
37
35
 
38
36
  const config = [
39
- importPlugin.configs.typescript,
37
+ importX.flatConfigs.typescript,
40
38
  {
41
39
  ignores: ["**/dist/", "**/build/", "**/.next/", "**/.turbo/"],
42
40
  },
43
41
  {
42
+ files: [
43
+ "**/*.js",
44
+ "**/*.ts",
45
+ "**/*.json",
46
+ "**/*.mjs",
47
+ "**/*.cjs",
48
+ "**/*.html",
49
+ ],
44
50
  languageOptions: {
45
- sourceType: "module",
46
51
  globals: {
47
52
  ...globals.browser,
48
53
  ...globals.node,
@@ -51,25 +56,18 @@ const config = [
51
56
  ecmaVersion: "latest",
52
57
  sourceType: "module",
53
58
  },
59
+ sourceType: "module",
54
60
  },
55
- files: [
56
- "**/*.js",
57
- "**/*.ts",
58
- "**/*.json",
59
- "**/*.mjs",
60
- "**/*.cjs",
61
- "**/*.html",
62
- ],
63
61
  plugins: {
62
+ compat,
63
+ github,
64
+ "import-x": importX,
65
+ n,
64
66
  prettier,
65
- import: importPlugin,
66
67
  promise,
67
- n,
68
- "unused-imports": unusedImports,
69
68
  sonarjs,
70
- compat,
71
69
  unicorn,
72
- github,
70
+ "unused-imports": unusedImports,
73
71
  },
74
72
  rules: {
75
73
  ...eslintRules,
@@ -86,13 +84,12 @@ const config = [
86
84
  },
87
85
 
88
86
  settings: {
89
- // https://github.com/import-js/eslint-plugin-import/issues/2556#issuecomment-1419518561
90
- "import/parsers": {
87
+ "import-x/parsers": {
91
88
  espree: [".js", ".cjs", ".mjs", ".ts"],
92
89
  },
93
- "import/resolver": {
94
- typescript: true,
90
+ "import-x/resolver": {
95
91
  node: true,
92
+ typescript: true,
96
93
  },
97
94
  },
98
95
  },
@@ -113,20 +110,6 @@ const config = [
113
110
  ...typescriptRules,
114
111
  },
115
112
  },
116
- {
117
- files: ["**/*.test.js", "tests/**/*.js"],
118
- languageOptions: {
119
- globals: {
120
- ...globals.jest,
121
- },
122
- },
123
- plugins: {
124
- jest,
125
- },
126
- rules: {
127
- ...jestRules,
128
- },
129
- },
130
113
  {
131
114
  files: ["**/*.cy.js"],
132
115
  languageOptions: {
@@ -24,6 +24,7 @@ const config = {
24
24
  "no-magic-numbers": "off",
25
25
  "no-redeclare": "off",
26
26
  "no-restricted-imports": "off",
27
+ "no-return-await": "off",
27
28
  "no-shadow": "off",
28
29
  "no-throw-literal": "off",
29
30
  "no-unused-expressions": "off",
@@ -34,7 +35,6 @@ const config = {
34
35
  "padding-line-between-statements": "off",
35
36
  quotes: "off",
36
37
  "require-await": "off",
37
- "no-return-await": "off",
38
38
  semi: "off",
39
39
  "space-before-function-paren": "off",
40
40
  "space-infix-ops": "off",
@@ -4,7 +4,6 @@ import plugin from "@eslint/js";
4
4
  const baseRules = { ...plugin.configs.all.rules };
5
5
 
6
6
  const overrideRules = {
7
- "no-unused-private-class-members": "off",
8
7
  "capitalized-comments": "off",
9
8
  complexity: "off",
10
9
  "id-length": ["error", { exceptions: ["x", "y", "z"] }],
@@ -14,6 +13,7 @@ const overrideRules = {
14
13
  "max-statements": "off",
15
14
  "no-ternary": "off",
16
15
  "no-undefined": "off",
16
+ "no-unused-private-class-members": "off",
17
17
  "one-var": "off",
18
18
  "prefer-destructuring": [
19
19
  "error",
@@ -1,23 +1,28 @@
1
- import { rules } from "eslint-plugin-import";
1
+ import { rules } from "eslint-plugin-import-x";
2
2
 
3
3
  const availableKeys = Object.keys(rules).filter(
4
4
  (key) => !rules[key].meta.deprecated
5
5
  );
6
6
 
7
7
  const baseRules = Object.fromEntries(
8
- availableKeys.map((key) => [`import/${key}`, "error"])
8
+ availableKeys.map((key) => [`import-x/${key}`, "error"])
9
9
  );
10
10
 
11
11
  const overrideRules = {
12
- "import/no-unresolved": "off",
13
- "import/no-internal-modules": "off",
14
- "import/no-relative-parent-imports": "off",
15
- "import/no-named-as-default": "off",
16
- "import/exports-last": "off",
17
- "import/no-namespace": "off",
18
- "import/enforce-node-protocol-usage": ["error", "always"],
19
- "import/extensions": "off",
20
- "import/order": [
12
+ "import-x/enforce-node-protocol-usage": ["error", "always"],
13
+ "import-x/exports-last": "off",
14
+ "import-x/extensions": "off",
15
+ "import-x/group-exports": "off",
16
+ "import-x/max-dependencies": "off",
17
+ "import-x/no-default-export": "off",
18
+ "import-x/no-internal-modules": "off",
19
+ "import-x/no-named-as-default": "off",
20
+ "import-x/no-named-export": "off",
21
+ "import-x/no-namespace": "off",
22
+ "import-x/no-relative-parent-imports": "off",
23
+ "import-x/no-unassigned-import": "off",
24
+ "import-x/no-unresolved": "off",
25
+ "import-x/order": [
21
26
  "error",
22
27
  {
23
28
  groups: [
@@ -32,12 +37,7 @@ const overrideRules = {
32
37
  ],
33
38
  },
34
39
  ],
35
- "import/prefer-default-export": "off",
36
- "import/max-dependencies": "off",
37
- "import/no-unassigned-import": "off",
38
- "import/no-default-export": "off",
39
- "import/no-named-export": "off",
40
- "import/group-exports": "off",
40
+ "import-x/prefer-default-export": "off",
41
41
  };
42
42
 
43
43
  const config = Object.assign(baseRules, overrideRules);
@@ -11,12 +11,12 @@ const baseRules = Object.fromEntries(
11
11
  );
12
12
 
13
13
  const overrideRules = {
14
+ "n/file-extension-in-import": "off",
14
15
  "n/no-missing-import": "off",
16
+ "n/no-process-env": "off",
15
17
  "n/no-unsupported-features/es-builtins": "off",
16
18
  "n/no-unsupported-features/es-syntax": "off",
17
19
  "n/no-unsupported-features/node-builtins": "off",
18
- "n/file-extension-in-import": "off",
19
- "n/no-process-env": "off",
20
20
  };
21
21
 
22
22
  const config = Object.assign(baseRules, overrideRules);
@@ -1,6 +1,4 @@
1
- import plugin from "eslint-plugin-storybook";
2
-
3
- const { rules } = plugin;
1
+ import { rules } from "eslint-plugin-storybook";
4
2
 
5
3
  const availableKeys = Object.keys(rules).filter(
6
4
  (key) => !rules[key].meta.deprecated
@@ -11,49 +11,48 @@ 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",
14
19
  "@typescript-eslint/consistent-type-definitions": ["error", "type"],
15
20
  "@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",
16
28
  "@typescript-eslint/naming-convention": [
17
29
  "error",
18
30
  {
19
- selector: "default",
20
31
  format: ["camelCase", "PascalCase", "snake_case"],
32
+ selector: "default",
21
33
  },
22
34
  {
23
- selector: "objectLiteralProperty",
24
35
  format: null,
25
36
  modifiers: ["requiresQuotes"],
37
+ selector: "objectLiteralProperty",
26
38
  },
27
39
  ],
28
40
  "@typescript-eslint/no-confusing-void-expression": "off",
41
+ "@typescript-eslint/no-extra-parens": "off",
42
+ "@typescript-eslint/no-magic-numbers": "off",
29
43
  "@typescript-eslint/no-misused-promises": "off",
30
44
  "@typescript-eslint/no-type-alias": "off",
31
- "@typescript-eslint/prefer-readonly": "off",
32
- "@typescript-eslint/prefer-readonly-parameter-types": "off",
33
- "@typescript-eslint/sort-type-union-intersection-members": "off",
34
- "@typescript-eslint/strict-boolean-expressions": "off",
35
- "@typescript-eslint/no-magic-numbers": "off",
36
-
37
- // Disabled for Prettier
38
- "@typescript-eslint/block-spacing": "off",
39
- "@typescript-eslint/brace-style": "off",
40
- "@typescript-eslint/comma-dangle": "off",
41
- "@typescript-eslint/comma-spacing": "off",
42
- "@typescript-eslint/func-call-spacing": "off",
43
- "@typescript-eslint/indent": "off",
44
- "@typescript-eslint/key-spacing": "off",
45
- "@typescript-eslint/keyword-spacing": "off",
46
- "@typescript-eslint/lines-around-comment": "off",
47
- "@typescript-eslint/lines-between-class-members": "off",
48
- "@typescript-eslint/member-delimiter-style": "off",
49
- "@typescript-eslint/no-extra-parens": "off",
50
45
  "@typescript-eslint/object-curly-spacing": "off",
51
46
  "@typescript-eslint/padding-line-between-statements": "off",
47
+ "@typescript-eslint/prefer-readonly": "off",
48
+ "@typescript-eslint/prefer-readonly-parameter-types": "off",
52
49
  "@typescript-eslint/quotes": "off",
53
50
  "@typescript-eslint/semi": "off",
51
+ "@typescript-eslint/sort-type-union-intersection-members": "off",
54
52
  "@typescript-eslint/space-before-blocks": "off",
55
53
  "@typescript-eslint/space-before-function-paren": "off",
56
54
  "@typescript-eslint/space-infix-ops": "off",
55
+ "@typescript-eslint/strict-boolean-expressions": "off",
57
56
  "@typescript-eslint/type-annotation-spacing": "off",
58
57
  };
59
58
 
@@ -11,19 +11,19 @@ const baseRules = Object.fromEntries(
11
11
  );
12
12
 
13
13
  const overrideRules = {
14
+ "unicorn/no-array-callback-reference": "off",
14
15
  "unicorn/no-keyword-prefix": "off",
15
16
  "unicorn/no-null": "off",
16
- "unicorn/no-array-callback-reference": "off",
17
17
  "unicorn/prefer-dom-node-dataset": "off",
18
18
  "unicorn/prevent-abbreviations": [
19
19
  "error",
20
20
  {
21
21
  allowList: {
22
+ generateStaticParams: true,
22
23
  getInitialProps: true,
23
24
  getServerSideProps: true,
24
25
  getStaticPaths: true,
25
26
  getStaticProps: true,
26
- generateStaticParams: true,
27
27
  },
28
28
  },
29
29
  ],
@@ -0,0 +1,25 @@
1
+ /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
+
3
+ import jest from "eslint-plugin-jest";
4
+ import globals from "globals";
5
+
6
+ import jestRules from "./rules/jest.mjs";
7
+
8
+ const config = [
9
+ {
10
+ files: ["**/*.test.{js,ts,jsx,tsx}", "tests/**/*.{js,ts,jsx,tsx}"],
11
+ languageOptions: {
12
+ globals: {
13
+ ...globals.jest,
14
+ },
15
+ },
16
+ plugins: {
17
+ jest,
18
+ },
19
+ rules: {
20
+ ...jestRules,
21
+ },
22
+ },
23
+ ];
24
+
25
+ export default config;
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
2
 
3
3
  import next from "@next/eslint-plugin-next";
4
+
4
5
  import nextRules from "./rules/next.mjs";
5
6
 
6
7
  const config = [
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
2
 
3
3
  import qwik from "eslint-plugin-qwik";
4
+
4
5
  import qwikRules from "./rules/qwik.mjs";
5
6
 
6
7
  const config = [
@@ -4,10 +4,11 @@ import query from "@tanstack/eslint-plugin-query";
4
4
  import jsxA11y from "eslint-plugin-jsx-a11y";
5
5
  import react from "eslint-plugin-react";
6
6
  import reactHooks from "eslint-plugin-react-hooks";
7
+
7
8
  import jsxA11yRules from "./rules/jsx-a11y.mjs";
8
9
  import queryRules from "./rules/query.mjs";
9
- import reactRules from "./rules/react.mjs";
10
10
  import reactHooksRules from "./rules/react-hooks.mjs";
11
+ import reactRules from "./rules/react.mjs";
11
12
 
12
13
  const config = [
13
14
  {
@@ -20,10 +21,10 @@ const config = [
20
21
  },
21
22
  },
22
23
  plugins: {
24
+ "@tanstack/query": query,
25
+ "jsx-a11y": jsxA11y,
23
26
  react,
24
27
  "react-hooks": reactHooks,
25
- "jsx-a11y": jsxA11y,
26
- "@tanstack/query": query,
27
28
  },
28
29
  rules: {
29
30
  ...reactRules,
@@ -11,15 +11,15 @@ const baseRules = Object.fromEntries(
11
11
  );
12
12
 
13
13
  const overrideRules = {
14
- "jsx-a11y/no-autofocus": "off",
15
14
  "jsx-a11y/label-has-associated-control": [
16
15
  "error",
17
16
  {
18
- labelComponents: ["Label"],
19
17
  controlComponents: ["Input", "Select", "Textarea", "Checkbox", "Radio"],
20
18
  depth: 3,
19
+ labelComponents: ["Label"],
21
20
  },
22
21
  ],
22
+ "jsx-a11y/no-autofocus": "off",
23
23
  };
24
24
 
25
25
  const config = Object.assign(baseRules, overrideRules);
@@ -1,6 +1,4 @@
1
- import plugin from "@tanstack/eslint-plugin-query";
2
-
3
- const { rules } = plugin;
1
+ import { rules } from "@tanstack/eslint-plugin-query";
4
2
 
5
3
  const availableKeys = Object.keys(rules).filter(
6
4
  (key) => !rules[key].meta.deprecated
@@ -18,13 +18,6 @@ const overrideRules = {
18
18
  namedComponents: "arrow-function",
19
19
  },
20
20
  ],
21
- "react/no-array-index-key": "off",
22
- "react/no-arrow-function-lifecycle": "off",
23
- "react/no-invalid-html-attribute": "off",
24
- "react/no-multi-comp": "off",
25
- "react/no-unused-class-component-methods": "off",
26
- "react/react-in-jsx-scope": "off",
27
- "react/require-default-props": "off",
28
21
  "react/jsx-filename-extension": [
29
22
  "error",
30
23
  {
@@ -39,6 +32,13 @@ const overrideRules = {
39
32
  "react/jsx-one-expression-per-line": "off",
40
33
  "react/jsx-props-no-spreading": "off",
41
34
  "react/jsx-sort-props": "off",
35
+ "react/no-array-index-key": "off",
36
+ "react/no-arrow-function-lifecycle": "off",
37
+ "react/no-invalid-html-attribute": "off",
38
+ "react/no-multi-comp": "off",
39
+ "react/no-unused-class-component-methods": "off",
40
+ "react/react-in-jsx-scope": "off",
41
+ "react/require-default-props": "off",
42
42
  };
43
43
 
44
44
  const config = Object.assign(baseRules, overrideRules);
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
2
 
3
3
  import remix from "eslint-plugin-remix";
4
+
4
5
  import remixRules from "./rules/remix.mjs";
5
6
 
6
7
  const config = [
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
2
2
 
3
3
  import solid from "eslint-plugin-solid";
4
+
4
5
  import solidRules from "./rules/solid.mjs";
5
6
 
6
7
  const config = [