-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
eslint.config.js
192 lines (190 loc) · 6.42 KB
/
eslint.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import a11y from 'eslint-plugin-jsx-a11y';
import astro from 'eslint-plugin-astro';
import astroParser from 'astro-eslint-parser';
import jsdoc from 'eslint-plugin-jsdoc';
import ts from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
const ignoreArray = [
'.astro/**',
'.cache/**',
'.github/**',
'.idea/**',
'.netlify/**',
'.vercel/**',
'/.vercel/**',
'build/**',
'coverage/**',
'demo/**',
'dev-dist/**',
'dist/**',
'node_modules/**',
'static/**',
'src/env.d.ts',
];
export default [
{
files: ['**/*.js'],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaFeatures: { modules: true },
ecmaVersion: 'latest',
},
},
plugins: {
'@typescript-eslint': ts,
ts,
jsdoc,
},
rules: {
...ts.configs['eslint-recommended'].rules,
...ts.configs['recommended'].rules,
...jsdoc.configs['flat/recommended'].rules,
'indent': ['error', 'tab', { SwitchCase: 1 }],
'linebreak-style': ['error', 'unix'],
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
'sort-imports': 'warn',
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
'keyword-spacing': ['error', { before: true, after: true }],
'no-console': 'warn',
'no-dupe-args': 'error',
'no-duplicate-imports': 'error',
'no-mixed-spaces-and-tabs': ['error', 'smart-tabs'],
'no-unexpected-multiline': 'error',
'object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }],
'semi': ['warn', 'always', { omitLastInOneLineBlock: true }],
'semi-style': ['error', 'last'],
'semi-spacing': ['error', { before: false, after: true }],
'space-before-blocks': 'error',
'space-in-parens': ['warn', 'never'],
'template-curly-spacing': 'warn',
'wrap-regex': 'warn',
'jsdoc/require-description': 'warn',
},
},
{
files: ['**/*.ts'],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaFeatures: { modules: true },
ecmaVersion: 'latest',
},
},
plugins: {
'@typescript-eslint': ts,
ts,
jsdoc,
},
rules: {
...ts.configs['eslint-recommended'].rules,
...ts.configs['recommended'].rules,
...jsdoc.configs['flat/recommended'].rules,
'indent': ['error', 'tab', { SwitchCase: 1 }],
'linebreak-style': ['error', 'unix'],
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
'sort-imports': 'warn',
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
'keyword-spacing': ['error', { before: true, after: true }],
'no-console': 'warn',
'no-dupe-args': 'error',
'no-duplicate-imports': 'error',
'no-mixed-spaces-and-tabs': ['error', 'smart-tabs'],
'no-unexpected-multiline': 'error',
'object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }],
'semi': ['warn', 'always', { omitLastInOneLineBlock: true }],
'semi-style': ['error', 'last'],
'semi-spacing': ['error', { before: false, after: true }],
'space-before-blocks': 'error',
'space-in-parens': ['warn', 'never'],
'template-curly-spacing': 'warn',
'wrap-regex': 'warn',
'jsdoc/require-description': 'warn',
},
},
{
files: ['**/*.astro'],
languageOptions: {
parser: astroParser,
parserOptions: {
parser: tsParser,
ecmaFeatures: { modules: true },
ecmaVersion: 'latest',
},
},
plugins: {
astro,
a11y,
jsdoc,
},
rules: {
'indent': ['error', 'tab', { SwitchCase: 1 }],
'linebreak-style': ['error', 'unix'],
'astro/no-conflict-set-directives': 'error',
'astro/no-deprecated-astro-canonicalurl': 'error',
'astro/no-deprecated-astro-fetchcontent': 'error',
'astro/no-deprecated-astro-resolve': 'error',
'astro/no-deprecated-getentrybyslug': 'error',
'astro/no-unused-define-vars-in-style': 'error',
'astro/no-set-html-directive': 'error',
'astro/no-set-text-directive': 'error',
'astro/prefer-class-list-directive': 'warn',
'astro/prefer-object-class-list': 'warn',
'astro/prefer-split-class-list': 'warn',
'astro/jsx-a11y/alt-text': 'error',
'astro/jsx-a11y/anchor-ambiguous-text': 'warn',
'astro/jsx-a11y/anchor-has-content': 'error',
'astro/jsx-a11y/anchor-is-valid': 'warn',
'astro/jsx-a11y/aria-activedescendant-has-tabindex': 'warn',
'astro/jsx-a11y/aria-props': 'error',
'astro/jsx-a11y/aria-proptypes': 'error',
'astro/jsx-a11y/aria-role': 'error',
'astro/jsx-a11y/aria-unsupported-elements': 'error',
'astro/jsx-a11y/autocomplete-valid': 'warn',
'astro/jsx-a11y/control-has-associated-label': 'warn',
'astro/jsx-a11y/heading-has-content': 'error',
'astro/jsx-a11y/html-has-lang': 'error',
'astro/jsx-a11y/iframe-has-title': 'error',
'astro/jsx-a11y/img-redundant-alt': 'warn',
'astro/jsx-a11y/interactive-supports-focus': 'warn',
'astro/jsx-a11y/label-has-associated-control': 'warn',
'astro/jsx-a11y/lang': 'error',
'astro/jsx-a11y/media-has-caption': 'warn',
'astro/jsx-a11y/no-access-key': 'warn',
'astro/jsx-a11y/no-aria-hidden-on-focusable': 'warn',
'astro/jsx-a11y/no-autofocus': 'warn',
'astro/jsx-a11y/no-distracting-elements': 'error',
'astro/jsx-a11y/no-interactive-element-to-noninteractive-role': 'warn',
'astro/jsx-a11y/no-noninteractive-element-interactions': 'warn',
'astro/jsx-a11y/no-noninteractive-element-to-interactive-role': 'warn',
'astro/jsx-a11y/no-noninteractive-tabindex': 'warn',
'astro/jsx-a11y/no-redundant-roles': 'warn',
'astro/jsx-a11y/prefer-tag-over-role': 'error',
'astro/jsx-a11y/role-has-required-aria-props': 'error',
'astro/jsx-a11y/role-supports-aria-props': 'warn',
'astro/jsx-a11y/scope': 'warn',
'astro/jsx-a11y/tabindex-no-positive': 'warn',
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
'sort-imports': 'warn',
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
'keyword-spacing': ['error', { before: true, after: true }],
'no-console': 'warn',
'no-dupe-args': 'error',
'no-duplicate-imports': 'error',
'no-mixed-spaces-and-tabs': ['error', 'smart-tabs'],
'no-unexpected-multiline': 'error',
'object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }],
'semi': ['warn', 'always', { omitLastInOneLineBlock: true }],
'semi-style': ['error', 'last'],
'semi-spacing': ['error', { before: false, after: true }],
'space-before-blocks': 'error',
'space-in-parens': ['warn', 'never'],
'template-curly-spacing': 'warn',
'wrap-regex': 'warn',
'jsdoc/require-description': 'warn',
},
},
{
ignores: [...ignoreArray],
},
];