1
- import eslintConfigPreact from "eslint-config-preact" ;
2
- import eslintConfigPrettier from "eslint-config-prettier" ;
3
- import eslintPluginBoundaries from "eslint-plugin-boundaries" ;
4
- import eslintPluginImport from "eslint-plugin-import" ;
1
+ import js from "@eslint/js" ;
2
+ import vitest from "@vitest/eslint-plugin" ;
3
+ import { defineConfig } from "eslint/config" ;
4
+ import boundaries from "eslint-plugin-boundaries" ;
5
+ import importPlugin from "eslint-plugin-import" ;
6
+ import jsdoc from "eslint-plugin-jsdoc" ;
5
7
import eslintPluginReactHooks from "eslint-plugin-react-hooks" ;
8
+ import tsdoc from "eslint-plugin-tsdoc" ;
6
9
import globals from "globals" ;
7
- import typescriptEslintParser from "@typescript-eslint/parser" ;
8
- import typescriptEslintPlugin from "@typescript-eslint/eslint-plugin" ;
9
- import eslintPluginJsdoc from "eslint-plugin-jsdoc" ;
10
- import eslintPluginTsdoc from "eslint-plugin-tsdoc" ;
10
+ import typescriptEslint from "typescript-eslint" ;
11
+
11
12
import { ELEMENT_SETTINGS , ELEMENT_TYPE_RULES , EXTERNAL_RULES } from "./boundaries.config.js" ;
12
- import eslintJs from "@eslint/js" ;
13
- import vitestEslintPlugin from "@vitest/eslint-plugin" ;
14
13
15
- /** @type { import("eslint").Linter.Config[] } */
16
- export default [
14
+ export default defineConfig ( [
17
15
{ ignores : [ ".husky/" , "coverage/" , "docs/" , "dist/" , "node_modules/" ] } ,
18
16
19
- eslintJs . configs . recommended ,
20
- eslintPluginImport . flatConfigs . recommended ,
21
- ...eslintConfigPreact . flat ,
17
+ { plugins : { js } , extends : [ "js/recommended" ] } ,
18
+ { plugins : { jsdoc } , files : [ "**/*.{js,jsx}" ] , extends : [ "jsdoc/flat/recommended-error" ] } ,
19
+ { plugins : { jsdoc } , files : [ "**/*.{ts,tsx}" ] , extends : [ "jsdoc/flat/recommended-typescript-error" ] } ,
20
+ { plugins : { tsdoc } , files : [ "**/*.{ts,tsx}" ] , rules : { "tsdoc/syntax" : "error" } } ,
22
21
23
22
{
24
- files : [ "*.config.js" ] ,
25
- plugins : { jsdoc : eslintPluginJsdoc } ,
26
- languageOptions : { globals : { ...globals . node } } ,
27
- ...eslintPluginJsdoc . configs [ "flat/recommended-error" ] ,
28
- rules : {
29
- ...eslintPluginJsdoc . configs [ "flat/recommended-error" ] . rules ,
30
- "import/no-named-as-default" : "off" ,
31
- "import/no-unresolved" : "off" ,
32
- } ,
33
- settings : {
34
- "import/core-modules" : [ "eslint-config-preact" , "eslint-plugin-boundaries" , "eslint-plugin-import" ] ,
23
+ extends : [ typescriptEslint . configs . recommendedTypeChecked ] ,
24
+ files : [ "**/*.{ts,tsx}" ] ,
25
+ languageOptions : {
26
+ parser : typescriptEslint . parser ,
27
+ parserOptions : { ecmaVersion : "latest" , projectService : true , tsconfigRootDir : import . meta. dirname } ,
35
28
} ,
36
29
} ,
37
30
38
31
{
39
- files : [ "src/**/*.{ts,tsx}" ] ,
40
- ...eslintPluginJsdoc . configs [ "flat/recommended-typescript-error" ] ,
41
- plugins : {
42
- "@typescript-eslint" : typescriptEslintPlugin ,
43
- "jsdoc" : eslintPluginJsdoc ,
44
- "react-hooks" : eslintPluginReactHooks ,
45
- "tsdoc" : eslintPluginTsdoc ,
46
- } ,
47
- rules : {
48
- ...typescriptEslintPlugin . configs . recommended . rules ,
49
- ...typescriptEslintPlugin . configs . strict . rules ,
50
- ...eslintPluginReactHooks . configs . recommended . rules ,
51
- ...eslintPluginJsdoc . configs [ "flat/recommended-typescript-error" ] . rules ,
52
-
53
- // https://tsdoc.org/pages/packages/eslint-plugin-tsdoc/
54
- "tsdoc/syntax" : "error" ,
32
+ extends : [ eslintPluginReactHooks . configs [ "recommended-latest" ] ] ,
33
+ files : [ "**/*.{ts,tsx}" ] ,
34
+ } ,
55
35
36
+ {
37
+ extends : [ importPlugin . flatConfigs . recommended ] ,
38
+ rules : {
56
39
"import/order" : [
57
40
"error" ,
58
41
{
@@ -68,38 +51,33 @@ export default [
68
51
} ,
69
52
settings : {
70
53
"import/core-modules" : [ "obsidian" ] ,
71
- } ,
72
- languageOptions : {
73
- globals : { ...globals . browser } ,
74
- parser : typescriptEslintParser ,
75
- parserOptions : { ecmaFeatures : { modules : true } , ecmaVersion : "latest" } ,
54
+ "import/resolver" : { typescript : { alwaysTryTypes : true } } ,
76
55
} ,
77
56
} ,
78
57
79
58
{
80
- files : [ "src/**/*.test.{ts,tsx}" ] ,
81
- ...vitestEslintPlugin . configs . recommended ,
82
- rules : {
83
- "vitest/expect-expect" : [ "off" , { assertFunctionNames : [ "expect" , "expectTypeOf" ] } ] ,
84
- } ,
59
+ files : [ "*.config.js" ] ,
60
+ languageOptions : { globals : { ...globals . node } , ecmaVersion : "latest" , sourceType : "module" } ,
85
61
} ,
86
62
87
- // Turns off all rules that are unnecessary or might conflict with Prettier.
88
- eslintConfigPrettier ,
63
+ {
64
+ plugins : { vitest } ,
65
+ extends : [ "vitest/recommended" ] ,
66
+ files : [ "**/*.test.{ts,tsx}" ] ,
67
+ rules : { "vitest/expect-expect" : [ "error" , { assertFunctionNames : [ "expect" , "expectTypeOf" ] } ] } ,
68
+ } ,
89
69
90
70
{
91
- files : [ "src/**/*" ] ,
92
- plugins : { boundaries : eslintPluginBoundaries } ,
71
+ plugins : { boundaries } ,
72
+ extends : [ " boundaries/strict" ] ,
93
73
settings : {
94
- "boundaries/include" : [ "src/ **/*" ] ,
74
+ "boundaries/include" : [ "**/*" ] ,
95
75
"boundaries/ignore" : [ "**/__tests__/**/*" , "**/__mocks__/**/*" ] ,
96
76
"boundaries/elements" : ELEMENT_SETTINGS ,
97
- "import/resolver" : { typescript : { alwaysTryTypes : true } } ,
98
77
} ,
99
78
rules : {
100
- ...eslintPluginBoundaries . configs . strict . rules ,
101
79
"boundaries/element-types" : [ "error" , { default : "disallow" , rules : ELEMENT_TYPE_RULES } ] ,
102
80
"boundaries/external" : [ "error" , { default : "disallow" , rules : EXTERNAL_RULES } ] ,
103
81
} ,
104
82
} ,
105
- ] ;
83
+ ] ) ;
0 commit comments