@alexlit/lint-kit 215.0.0 → 216.1.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/eslint.config.js +8 -4
- package/package.json +1 -1
- package/packages/config-eslint/README.md +57 -32
- package/packages/config-eslint/base.js +4 -1
- package/packages/config-eslint/index.d.ts +34 -32
- package/packages/config-eslint/index.js +5 -2
- package/packages/config-eslint/package.json +4 -4
- package/packages/config-eslint/plugins/de-morgan.js +4 -2
- package/packages/config-eslint/plugins/import-x.js +5 -1
- package/packages/config-eslint/plugins/javascript.js +5 -1
- package/packages/config-eslint/plugins/jsdoc.js +5 -1
- package/packages/config-eslint/plugins/json.js +5 -1
- package/packages/config-eslint/plugins/perfectionist.js +5 -1
- package/packages/config-eslint/plugins/pinia.js +5 -1
- package/packages/config-eslint/plugins/prettier.js +10 -2
- package/packages/config-eslint/plugins/regexp.js +5 -1
- package/packages/config-eslint/plugins/sonar.js +5 -1
- package/packages/config-eslint/plugins/stylistic.js +5 -1
- package/packages/config-eslint/plugins/tailwindcss.js +20 -17
- package/packages/config-eslint/plugins/tanstack-query.js +5 -1
- package/packages/config-eslint/plugins/typescript-type-checked.js +5 -1
- package/packages/config-eslint/plugins/typescript.js +5 -1
- package/packages/config-eslint/plugins/unicorn.js +5 -1
- package/packages/config-eslint/plugins/unocss.js +5 -1
- package/packages/config-eslint/plugins/vitest.js +5 -1
- package/packages/config-eslint/plugins/vue-accessibility.js +5 -1
- package/packages/config-eslint/plugins/vue-i18n.js +10 -5
- package/packages/config-eslint/plugins/vue.js +5 -1
- package/packages/config-eslint/plugins/zod.js +5 -1
- package/packages/config-hooks/README.md +2 -2
- package/packages/config-htmllint/README.md +2 -2
- package/packages/config-markdownlint/README.md +2 -2
- package/packages/config-npmlint/README.md +2 -2
- package/packages/config-prettier/README.md +68 -16
- package/packages/config-prettier/index.d.ts +9 -1
- package/packages/config-prettier/index.js +20 -28
- package/packages/config-prettier/package.json +3 -2
- package/packages/config-prettier/plugins/jsdoc.js +14 -8
- package/packages/config-prettier/plugins/mdc.js +12 -6
- package/packages/config-prettier/plugins/packagejson.js +9 -5
- package/packages/config-prettier/plugins/php.js +9 -5
- package/packages/config-prettier/plugins/pug.js +15 -9
- package/packages/config-prettier/plugins/ruby.js +12 -6
- package/packages/config-prettier/plugins/sh.js +9 -5
- package/packages/config-prettier/plugins/solidity.js +9 -5
- package/packages/config-prettier/plugins/sort-json.js +12 -6
- package/packages/config-prettier/plugins/sql.js +9 -5
- package/packages/config-prettier/plugins/tailwindcss.js +18 -12
- package/packages/config-prettier/plugins/xml.js +12 -6
- package/packages/config-prettier/utils/merge-configs.js +18 -0
- package/packages/config-stylelint/README.md +80 -29
- package/packages/config-stylelint/index.d.ts +4 -0
- package/packages/config-stylelint/index.js +4 -12
- package/packages/config-stylelint/package.json +3 -2
- package/packages/config-stylelint/plugins/a11y.js +15 -21
- package/packages/config-stylelint/plugins/bem.js +14 -13
- package/packages/config-stylelint/plugins/color-format.js +10 -8
- package/packages/config-stylelint/plugins/declaration-block-no-ignored-properties.js +10 -12
- package/packages/config-stylelint/plugins/gamut.js +9 -9
- package/packages/config-stylelint/plugins/high-performance-animation.js +15 -15
- package/packages/config-stylelint/plugins/logical-css.js +9 -8
- package/packages/config-stylelint/plugins/media-use-custom-media.js +10 -9
- package/packages/config-stylelint/plugins/no-indistinguishable-colors.js +10 -12
- package/packages/config-stylelint/plugins/no-nested-media.js +9 -9
- package/packages/config-stylelint/plugins/no-unresolved-module.js +16 -16
- package/packages/config-stylelint/plugins/no-unsupported-browser-features.js +16 -16
- package/packages/config-stylelint/plugins/order.js +15 -17
- package/packages/config-stylelint/plugins/prettier.js +9 -9
- package/packages/config-stylelint/plugins/scss.js +14 -17
- package/packages/config-stylelint/plugins/selector-no-empty.js +10 -9
- package/packages/config-stylelint/plugins/use-nesting.js +9 -12
- package/packages/config-stylelint/plugins/vue.js +6 -7
- package/packages/config-stylelint/utils/merge-configs.js +20 -0
package/eslint.config.js
CHANGED
|
@@ -20,10 +20,14 @@ export default defineConfig([
|
|
|
20
20
|
...plugins.vitest(),
|
|
21
21
|
...plugins.zod(),
|
|
22
22
|
...plugins.tailwindcss({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
settings: {
|
|
24
|
+
tailwindcss: {
|
|
25
|
+
cssConfigPath: path.resolve(
|
|
26
|
+
import.meta.dirname,
|
|
27
|
+
'examples/css.tailwind.css',
|
|
28
|
+
),
|
|
29
|
+
},
|
|
30
|
+
},
|
|
27
31
|
}),
|
|
28
32
|
|
|
29
33
|
{ files: ['**/*.js'], rules: { 'no-restricted-imports': 'off' } },
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
# ESLint Configuration
|
|
2
|
+
|
|
1
3
|
[](https://www.npmjs.com/package/@alexlit/config-eslint)
|
|
2
4
|
[](https://npmx.dev/package/@alexlit/config-eslint)
|
|
3
5
|
[](LICENSE)
|
|
4
6
|
|
|
5
|
-
# ESLint Configuration
|
|
6
|
-
|
|
7
7
|
Готовая конфигурация [ESLint](https://eslint.org/) в формате flat config:
|
|
8
8
|
настроенные правила для JavaScript, TypeScript, Vue.js, JSON, YAML, импортов,
|
|
9
9
|
Prettier и не только - всё, что обычно приходится настраивать вручную. Вместо
|
|
@@ -82,36 +82,59 @@ export default defineConfig([
|
|
|
82
82
|
|
|
83
83
|
## Плагины
|
|
84
84
|
|
|
85
|
-
| Плагин | Что делает | Пакет
|
|
86
|
-
| --------------------------------- | --------------------------------------------- |
|
|
87
|
-
| `plugins.deMorgan()` | Упрощает логические выражения | `eslint-plugin-de-morgan`
|
|
88
|
-
| `plugins.importX()` | Проверяет импорты и модули | `eslint-plugin-import-x`
|
|
89
|
-
| `plugins.javascript()` | Базовые правила JavaScript | `@eslint/js`
|
|
90
|
-
| `plugins.jsdoc()` | Проверяет JSDoc-комментарии | `eslint-plugin-jsdoc`
|
|
91
|
-
| `plugins.json()` | Проверяет JSON, JSONC, JSON5 и YAML | `@eslint/json`
|
|
92
|
-
| `plugins.perfectionist()` | Сортирует импорты, объекты, интерфейсы и типы | `eslint-plugin-perfectionist`
|
|
93
|
-
| `plugins.pinia()` | Проверяет Pinia-хранилища | `eslint-plugin-pinia`
|
|
94
|
-
| `plugins.prettier()` | Форматирует код самим Prettier | `eslint-plugin-prettier`
|
|
95
|
-
| `plugins.prettierConfig()` | Отключает правила, конфликтующие с Prettier | `eslint-config-prettier`
|
|
96
|
-
| `plugins.regexp()` | Проверяет регулярные выражения | `eslint-plugin-regexp`
|
|
97
|
-
| `plugins.sonar()` | Проверяет код по правилам SonarJS | `eslint-plugin-sonarjs`
|
|
98
|
-
| `plugins.stylistic()` | Проверяет форматирование и стиль кода | `@stylistic/eslint-plugin`
|
|
99
|
-
| `plugins.tailwindcss()` | Проверяет классы Tailwind CSS | `eslint-plugin-tailwindcss`
|
|
100
|
-
| `plugins.tanstackQuery()` | Проверяет TanStack Query | `@tanstack/eslint-plugin-query`
|
|
101
|
-
| `plugins.typescript()` | Проверяет TypeScript без анализа типов | `typescript-eslint`
|
|
102
|
-
| `plugins.typescriptTypeChecked()` | Проверяет TypeScript с анализом типов | `typescript-eslint`
|
|
103
|
-
| `plugins.unicorn()` | Проверяет код по правилам unicorn | `eslint-plugin-unicorn`
|
|
104
|
-
| `plugins.unocss()` | Проверяет UnoCSS | `@unocss/eslint-config`
|
|
105
|
-
| `plugins.vitest()` | Проверяет тесты Vitest | `@vitest/eslint-plugin`
|
|
106
|
-
| `plugins.vue()` | Проверяет Vue.js-компоненты | `eslint-plugin-vue`
|
|
107
|
-
| `plugins.vueAccessibility()` | Проверяет доступность Vue.js-компонентов | `eslint-plugin-vuejs-accessibility`
|
|
108
|
-
| `plugins.vueI18n()` | Проверяет Vue.js I18n | `@intlify/eslint-plugin-vue-i18n`
|
|
109
|
-
| `plugins.zod()` | Проверяет Zod-схемы | `eslint-plugin-zod`
|
|
85
|
+
| Плагин | Что делает | Пакет |
|
|
86
|
+
| --------------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
87
|
+
| `plugins.deMorgan()` | Упрощает логические выражения | [`eslint-plugin-de-morgan`](https://github.com/azat-io/eslint-plugin-de-morgan) |
|
|
88
|
+
| `plugins.importX()` | Проверяет импорты и модули | [`eslint-plugin-import-x`](https://github.com/un-ts/eslint-plugin-import-x) |
|
|
89
|
+
| `plugins.javascript()` | Базовые правила JavaScript | [`@eslint/js`](https://eslint.org/) |
|
|
90
|
+
| `plugins.jsdoc()` | Проверяет JSDoc-комментарии | [`eslint-plugin-jsdoc`](https://github.com/gajus/eslint-plugin-jsdoc) |
|
|
91
|
+
| `plugins.json()` | Проверяет JSON, JSONC, JSON5 и YAML | [`@eslint/json`](https://github.com/eslint/json) |
|
|
92
|
+
| `plugins.perfectionist()` | Сортирует импорты, объекты, интерфейсы и типы | [`eslint-plugin-perfectionist`](https://perfectionist.dev) |
|
|
93
|
+
| `plugins.pinia()` | Проверяет Pinia-хранилища | [`eslint-plugin-pinia`](https://github.com/lisilinhart/eslint-plugin-pinia) |
|
|
94
|
+
| `plugins.prettier()` | Форматирует код самим Prettier | [`eslint-plugin-prettier`](https://github.com/prettier/eslint-plugin-prettier) |
|
|
95
|
+
| `plugins.prettierConfig()` | Отключает правила, конфликтующие с Prettier | [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier) |
|
|
96
|
+
| `plugins.regexp()` | Проверяет регулярные выражения | [`eslint-plugin-regexp`](https://github.com/ota-meshi/eslint-plugin-regexp) |
|
|
97
|
+
| `plugins.sonar()` | Проверяет код по правилам SonarJS | [`eslint-plugin-sonarjs`](https://github.com/SonarSource/SonarJS/blob/master/packages/jsts/src/rules/README.md) |
|
|
98
|
+
| `plugins.stylistic()` | Проверяет форматирование и стиль кода | [`@stylistic/eslint-plugin`](https://eslint.style/) |
|
|
99
|
+
| `plugins.tailwindcss()` | Проверяет классы Tailwind CSS | [`eslint-plugin-tailwindcss`](https://github.com/francoismassart/eslint-plugin-tailwindcss) |
|
|
100
|
+
| `plugins.tanstackQuery()` | Проверяет TanStack Query | [`@tanstack/eslint-plugin-query`](https://tanstack.com/query/latest/docs/eslint/eslint-plugin-query) |
|
|
101
|
+
| `plugins.typescript()` | Проверяет TypeScript без анализа типов | [`typescript-eslint`](https://github.com/typescript-eslint/typescript-eslint) |
|
|
102
|
+
| `plugins.typescriptTypeChecked()` | Проверяет TypeScript с анализом типов | [`typescript-eslint`](https://github.com/typescript-eslint/typescript-eslint) |
|
|
103
|
+
| `plugins.unicorn()` | Проверяет код по правилам unicorn | [`eslint-plugin-unicorn`](https://github.com/sindresorhus/eslint-plugin-unicorn) |
|
|
104
|
+
| `plugins.unocss()` | Проверяет UnoCSS | [`@unocss/eslint-config`](https://unocss.dev/integrations/eslint) |
|
|
105
|
+
| `plugins.vitest()` | Проверяет тесты Vitest | [`@vitest/eslint-plugin`](https://github.com/veritem/eslint-plugin-vitest) |
|
|
106
|
+
| `plugins.vue()` | Проверяет Vue.js-компоненты | [`eslint-plugin-vue`](https://eslint.vuejs.org/rules/) |
|
|
107
|
+
| `plugins.vueAccessibility()` | Проверяет доступность Vue.js-компонентов | [`eslint-plugin-vuejs-accessibility`](https://vue-a11y.github.io/eslint-plugin-vuejs-accessibility/) |
|
|
108
|
+
| `plugins.vueI18n()` | Проверяет Vue.js I18n | [`@intlify/eslint-plugin-vue-i18n`](https://vue-i18n.intlify.dev/) |
|
|
109
|
+
| `plugins.zod()` | Проверяет Zod-схемы | [`eslint-plugin-zod`](https://github.com/marcalexiei/eslint-zod/tree/main/plugins/eslint-plugin-zod) |
|
|
110
|
+
|
|
111
|
+
## Свой конфиг
|
|
112
|
+
|
|
113
|
+
Любая фабрика принимает необязательный flat-конфиг, который добавляется после
|
|
114
|
+
предустановленного. Это позволяет точечно переопределять правила, `settings`,
|
|
115
|
+
`files` и другие опции, не отказываясь от пресета:
|
|
116
|
+
|
|
117
|
+
```js
|
|
118
|
+
// eslint.config.js
|
|
119
|
+
import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
120
|
+
|
|
121
|
+
export default defineConfig([
|
|
122
|
+
...plugins.javascript(),
|
|
123
|
+
...plugins.unicorn({ rules: { 'unicorn/no-null': 'off' } }),
|
|
124
|
+
...plugins.vue([
|
|
125
|
+
{ files: ['**/*.vue'], rules: { 'vue/max-lines-per-block': 'off' } },
|
|
126
|
+
]),
|
|
127
|
+
]);
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Можно передать как один объект, так и массив блоков. Так как конфиг добавляется
|
|
131
|
+
последним, он имеет более высокий приоритет, чем настройки пресета.
|
|
110
132
|
|
|
111
133
|
## Настройки Tailwind CSS
|
|
112
134
|
|
|
113
|
-
|
|
114
|
-
с конфигурацией Tailwind CSS
|
|
135
|
+
По умолчанию `plugins.tailwindcss()` использует путь `./styles/tailwind.css`.
|
|
136
|
+
Чтобы указать другой CSS-файл с конфигурацией Tailwind CSS, передайте обычный
|
|
137
|
+
flat-конфиг с настройками плагина:
|
|
115
138
|
|
|
116
139
|
```js
|
|
117
140
|
// eslint.config.js
|
|
@@ -121,13 +144,15 @@ import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
|
121
144
|
|
|
122
145
|
export default defineConfig([
|
|
123
146
|
...plugins.tailwindcss({
|
|
124
|
-
|
|
147
|
+
settings: {
|
|
148
|
+
tailwindcss: {
|
|
149
|
+
cssConfigPath: path.resolve(import.meta.dirname, 'src/main.css'),
|
|
150
|
+
},
|
|
151
|
+
},
|
|
125
152
|
}),
|
|
126
153
|
]);
|
|
127
154
|
```
|
|
128
155
|
|
|
129
|
-
По умолчанию используется путь `./styles/tailwind.css`.
|
|
130
|
-
|
|
131
156
|
## Type-aware правила
|
|
132
157
|
|
|
133
158
|
Type-aware правила (`no-floating-promises`, `no-misused-promises`,
|
|
@@ -56,7 +56,10 @@ export const IGNORES = [
|
|
|
56
56
|
* @example
|
|
57
57
|
* import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
58
58
|
*
|
|
59
|
-
* export default defineConfig([
|
|
59
|
+
* export default defineConfig([
|
|
60
|
+
* ...plugins.javascript(),
|
|
61
|
+
* ...plugins.unicorn(),
|
|
62
|
+
* ]);
|
|
60
63
|
*/
|
|
61
64
|
export const base = defineConfig([
|
|
62
65
|
{ files: FILES, languageOptions: { globals: globals.browser } },
|
|
@@ -3,57 +3,66 @@ import type { Linter } from 'eslint';
|
|
|
3
3
|
/** Flat-конфиг ESLint. */
|
|
4
4
|
export type Config = Linter.Config;
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Дополнительный flat-конфиг, который добавляется после предустановленного.
|
|
8
|
+
* Можно передать как один блок, так и массив блоков.
|
|
9
|
+
*/
|
|
10
|
+
export type PluginConfig = Config | Config[];
|
|
11
|
+
|
|
6
12
|
/**
|
|
7
13
|
* Фабрики плагинов. Каждый вызов возвращает массив flat-конфигов, который нужно
|
|
8
14
|
* развернуть через spread-оператор: `...plugins.<name>()`.
|
|
15
|
+
*
|
|
16
|
+
* Любая фабрика принимает необязательный конфиг, который добавляется после
|
|
17
|
+
* предустановленных блоков и переопределяет их.
|
|
9
18
|
*/
|
|
10
19
|
export interface Plugins {
|
|
11
20
|
/** @see eslint-plugin-de-morgan */
|
|
12
|
-
deMorgan(): Config[];
|
|
21
|
+
deMorgan(config?: PluginConfig): Config[];
|
|
13
22
|
/** @see eslint-plugin-import-x */
|
|
14
|
-
importX(): Config[];
|
|
23
|
+
importX(config?: PluginConfig): Config[];
|
|
15
24
|
/** @see eslint */
|
|
16
|
-
javascript(): Config[];
|
|
25
|
+
javascript(config?: PluginConfig): Config[];
|
|
17
26
|
/** @see eslint-plugin-jsdoc */
|
|
18
|
-
jsdoc(): Config[];
|
|
27
|
+
jsdoc(config?: PluginConfig): Config[];
|
|
19
28
|
/** @see ESLint/JSON */
|
|
20
|
-
json(): Config[];
|
|
29
|
+
json(config?: PluginConfig): Config[];
|
|
21
30
|
/** @see eslint-plugin-perfectionist */
|
|
22
|
-
perfectionist(): Config[];
|
|
31
|
+
perfectionist(config?: PluginConfig): Config[];
|
|
23
32
|
/** @see eslint-plugin-pinia */
|
|
24
|
-
pinia(): Config[];
|
|
33
|
+
pinia(config?: PluginConfig): Config[];
|
|
25
34
|
/** @see eslint-plugin-prettier */
|
|
26
|
-
prettier(): Config[];
|
|
35
|
+
prettier(config?: PluginConfig): Config[];
|
|
27
36
|
/** @see eslint-config-prettier */
|
|
28
|
-
prettierConfig(): Config[];
|
|
37
|
+
prettierConfig(config?: PluginConfig): Config[];
|
|
29
38
|
/** @see eslint-plugin-regexp */
|
|
30
|
-
regexp(): Config[];
|
|
39
|
+
regexp(config?: PluginConfig): Config[];
|
|
31
40
|
/** @see eslint-plugin-sonarjs */
|
|
32
|
-
sonar(): Config[];
|
|
41
|
+
sonar(config?: PluginConfig): Config[];
|
|
33
42
|
/** @see @stylistic/eslint-plugin */
|
|
34
|
-
stylistic(): Config[];
|
|
43
|
+
stylistic(config?: PluginConfig): Config[];
|
|
35
44
|
/** @see eslint-plugin-tailwindcss */
|
|
36
|
-
tailwindcss(
|
|
45
|
+
tailwindcss(config?: PluginConfig): Config[];
|
|
37
46
|
/** @see @tanstack/query */
|
|
38
|
-
tanstackQuery(): Config[];
|
|
47
|
+
tanstackQuery(config?: PluginConfig): Config[];
|
|
39
48
|
/** @see typescript-eslint */
|
|
40
|
-
typescript(): Config[];
|
|
49
|
+
typescript(config?: PluginConfig): Config[];
|
|
41
50
|
/** @see typescript-eslint */
|
|
42
|
-
typescriptTypeChecked(): Config[];
|
|
51
|
+
typescriptTypeChecked(config?: PluginConfig): Config[];
|
|
43
52
|
/** @see eslint-plugin-unicorn */
|
|
44
|
-
unicorn(): Config[];
|
|
53
|
+
unicorn(config?: PluginConfig): Config[];
|
|
45
54
|
/** @see @unocss/eslint-config */
|
|
46
|
-
unocss(): Config[];
|
|
55
|
+
unocss(config?: PluginConfig): Config[];
|
|
47
56
|
/** @see eslint-plugin-vitest */
|
|
48
|
-
vitest(): Config[];
|
|
57
|
+
vitest(config?: PluginConfig): Config[];
|
|
49
58
|
/** @see eslint-plugin-vue */
|
|
50
|
-
vue(): Config[];
|
|
59
|
+
vue(config?: PluginConfig): Config[];
|
|
51
60
|
/** @see eslint-plugin-vuejs-accessibility */
|
|
52
|
-
vueAccessibility(): Config[];
|
|
61
|
+
vueAccessibility(config?: PluginConfig): Config[];
|
|
53
62
|
/** @see eslint-plugin-vue-i18n */
|
|
54
|
-
vueI18n(): Config[];
|
|
63
|
+
vueI18n(config?: PluginConfig): Config[];
|
|
55
64
|
/** @see eslint-plugin-zod */
|
|
56
|
-
zod(): Config[];
|
|
65
|
+
zod(config?: PluginConfig): Config[];
|
|
57
66
|
}
|
|
58
67
|
|
|
59
68
|
/** Ограничение синтаксиса - сообщение об ошибке и селектор AST. */
|
|
@@ -62,13 +71,6 @@ export interface RestrictedSyntax {
|
|
|
62
71
|
selector: string;
|
|
63
72
|
}
|
|
64
73
|
|
|
65
|
-
/** Настройки eslint-plugin-tailwindcss. */
|
|
66
|
-
export interface TailwindcssSettings {
|
|
67
|
-
[key: string]: unknown;
|
|
68
|
-
/** Путь к CSS-файлу с Tailwind-конфигурацией */
|
|
69
|
-
cssConfigPath?: string;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
74
|
/** Пространство имён фабрик плагинов. */
|
|
73
75
|
export declare const plugins: Plugins;
|
|
74
76
|
|
|
@@ -102,8 +104,8 @@ export declare const YAML_FILES: string[];
|
|
|
102
104
|
*
|
|
103
105
|
* export default defineConfig([
|
|
104
106
|
* ...plugins.javascript(),
|
|
105
|
-
* ...plugins.unicorn(),
|
|
106
|
-
* ...plugins.prettierConfig(),
|
|
107
|
+
* ...plugins.unicorn({ rules: { 'unicorn/no-null': 'off' } }),
|
|
108
|
+
* ...plugins.prettierConfig(), // последним
|
|
107
109
|
* { rules: { 'no-console': 'off' } },
|
|
108
110
|
* ]);
|
|
109
111
|
*
|
|
@@ -27,6 +27,9 @@ import { zod } from './plugins/zod.js';
|
|
|
27
27
|
/**
|
|
28
28
|
* Фабрики плагинов. Каждый вызов возвращает массив flat-конфигов, который нужно
|
|
29
29
|
* развернуть через spread: `...plugins.<name>()`.
|
|
30
|
+
*
|
|
31
|
+
* Любая фабрика принимает необязательный конфиг, который добавляется после
|
|
32
|
+
* предустановленных блоков и переопределяет их.
|
|
30
33
|
*/
|
|
31
34
|
export const plugins = {
|
|
32
35
|
deMorgan,
|
|
@@ -66,9 +69,9 @@ export const plugins = {
|
|
|
66
69
|
*
|
|
67
70
|
* export default defineConfig([
|
|
68
71
|
* ...plugins.javascript(),
|
|
69
|
-
* ...plugins.unicorn(),
|
|
70
|
-
* ...plugins.prettierConfig(), // последним
|
|
72
|
+
* ...plugins.unicorn({ rules: { 'unicorn/no-null': 'off' } }),
|
|
71
73
|
* { rules: { 'no-console': 'off' } },
|
|
74
|
+
* ...plugins.prettierConfig(), // последним
|
|
72
75
|
* ]);
|
|
73
76
|
*
|
|
74
77
|
* @param {import('eslint').Linter.Config[]} [configs] - Массив flat-конфигов
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alexlit/config-eslint",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "163.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "eslint config",
|
|
6
6
|
"keywords": [
|
|
@@ -49,12 +49,12 @@
|
|
|
49
49
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
50
50
|
"@tanstack/eslint-plugin-query": "^5.104.5",
|
|
51
51
|
"@unocss/eslint-config": "^66.11.0",
|
|
52
|
-
"@vitest/eslint-plugin": "^1.6.
|
|
52
|
+
"@vitest/eslint-plugin": "^1.6.28",
|
|
53
53
|
"eslint": "^10.13.0",
|
|
54
54
|
"eslint-config-prettier": "^10.1.8",
|
|
55
|
-
"eslint-plugin-de-morgan": "^2.
|
|
55
|
+
"eslint-plugin-de-morgan": "^2.3.0",
|
|
56
56
|
"eslint-plugin-import-x": "^4.17.1",
|
|
57
|
-
"eslint-plugin-jsdoc": "^65.4.
|
|
57
|
+
"eslint-plugin-jsdoc": "^65.4.2",
|
|
58
58
|
"eslint-plugin-perfectionist": "^5.13.0",
|
|
59
59
|
"eslint-plugin-pinia": "^0.4.2",
|
|
60
60
|
"eslint-plugin-prettier": "^5.5.7",
|
|
@@ -6,9 +6,11 @@ import { FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Упрощает логические выражения с помощью правила Де Моргана.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [eslint-plugin-de-morgan](https://github.com/azat-io/eslint-plugin-de-morgan)
|
|
12
14
|
*/
|
|
13
|
-
export const deMorgan = () =>
|
|
14
|
-
defineConfig([{ files: FILES, ...plugin.configs.recommended }]);
|
|
15
|
+
export const deMorgan = (config = []) =>
|
|
16
|
+
defineConfig([{ files: FILES, ...plugin.configs.recommended }, config]);
|
|
@@ -21,11 +21,13 @@ const EXTENSIONS = [
|
|
|
21
21
|
/**
|
|
22
22
|
* Правила для импортов и модулей.
|
|
23
23
|
*
|
|
24
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
25
|
+
*
|
|
24
26
|
* @returns {import('eslint').Linter.Config[]}
|
|
25
27
|
*
|
|
26
28
|
* @see [eslint-plugin-import-x](https://github.com/un-ts/eslint-plugin-import-x)
|
|
27
29
|
*/
|
|
28
|
-
export const importX = () =>
|
|
30
|
+
export const importX = (config = []) =>
|
|
29
31
|
defineConfig([
|
|
30
32
|
{ ...plugin.flatConfigs.recommended, files: FILES, ignores: DATA_FILES },
|
|
31
33
|
|
|
@@ -71,4 +73,6 @@ export const importX = () =>
|
|
|
71
73
|
'import-x/unambiguous': 'off',
|
|
72
74
|
},
|
|
73
75
|
},
|
|
76
|
+
|
|
77
|
+
config,
|
|
74
78
|
]);
|
|
@@ -8,11 +8,13 @@ import { STYLE_RULES } from '../rules/style.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* Базовые правила JavaScript.
|
|
10
10
|
*
|
|
11
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
12
|
+
*
|
|
11
13
|
* @returns {import('eslint').Linter.Config[]}
|
|
12
14
|
*
|
|
13
15
|
* @see [eslint](https://eslint.org)
|
|
14
16
|
*/
|
|
15
|
-
export const javascript = () =>
|
|
17
|
+
export const javascript = (config = []) =>
|
|
16
18
|
defineConfig([
|
|
17
19
|
{ files: FILES, ...plugin.configs.recommended },
|
|
18
20
|
{
|
|
@@ -102,4 +104,6 @@ export const javascript = () =>
|
|
|
102
104
|
files: TEST_FILES,
|
|
103
105
|
rules: { 'no-alert': 'off', 'no-console': 'off' },
|
|
104
106
|
},
|
|
107
|
+
|
|
108
|
+
config,
|
|
105
109
|
]);
|
|
@@ -6,11 +6,13 @@ import { FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Правила для JSDoc-комментариев.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc)
|
|
12
14
|
*/
|
|
13
|
-
export const jsdoc = () =>
|
|
15
|
+
export const jsdoc = (config = []) =>
|
|
14
16
|
defineConfig([
|
|
15
17
|
{ files: FILES, ...plugin.configs['flat/recommended'] },
|
|
16
18
|
{
|
|
@@ -27,4 +29,6 @@ export const jsdoc = () =>
|
|
|
27
29
|
'jsdoc/tag-lines': 'off',
|
|
28
30
|
},
|
|
29
31
|
},
|
|
32
|
+
|
|
33
|
+
config,
|
|
30
34
|
]);
|
|
@@ -7,11 +7,13 @@ import { YAML_FILES } from '../base.js';
|
|
|
7
7
|
/**
|
|
8
8
|
* Правила для JSON, JSONC, JSON5 и YAML-файлов.
|
|
9
9
|
*
|
|
10
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
11
|
+
*
|
|
10
12
|
* @returns {import('eslint').Linter.Config[]}
|
|
11
13
|
*
|
|
12
14
|
* @see [ESLint/JSON](https://github.com/eslint/json)
|
|
13
15
|
*/
|
|
14
|
-
export const json = () =>
|
|
16
|
+
export const json = (config = []) =>
|
|
15
17
|
defineConfig([
|
|
16
18
|
{
|
|
17
19
|
extends: ['json/recommended'],
|
|
@@ -37,4 +39,6 @@ export const json = () =>
|
|
|
37
39
|
},
|
|
38
40
|
|
|
39
41
|
{ files: YAML_FILES, languageOptions: { parser: yamlParser } },
|
|
42
|
+
|
|
43
|
+
config,
|
|
40
44
|
]);
|
|
@@ -6,11 +6,13 @@ import { FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Правила сортировки импортов, объектов, интерфейсов и типов.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [eslint-plugin-perfectionist](https://perfectionist.dev)
|
|
12
14
|
*/
|
|
13
|
-
export const perfectionist = () =>
|
|
15
|
+
export const perfectionist = (config = []) =>
|
|
14
16
|
defineConfig([
|
|
15
17
|
{ ...plugin.configs['recommended-natural'], files: FILES },
|
|
16
18
|
{
|
|
@@ -119,4 +121,6 @@ export const perfectionist = () =>
|
|
|
119
121
|
],
|
|
120
122
|
},
|
|
121
123
|
},
|
|
124
|
+
|
|
125
|
+
config,
|
|
122
126
|
]);
|
|
@@ -6,11 +6,13 @@ import { FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Правила для Pinia-хранилищ.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [eslint-plugin-pinia](https://github.com/lisilinhart/eslint-plugin-pinia)
|
|
12
14
|
*/
|
|
13
|
-
export const pinia = () =>
|
|
15
|
+
export const pinia = (config = []) =>
|
|
14
16
|
defineConfig([
|
|
15
17
|
{
|
|
16
18
|
...plugin.configs['recommended-flat'],
|
|
@@ -20,4 +22,6 @@ export const pinia = () =>
|
|
|
20
22
|
'pinia/prefer-single-store-per-file': 'error',
|
|
21
23
|
},
|
|
22
24
|
},
|
|
25
|
+
|
|
26
|
+
config,
|
|
23
27
|
]);
|
|
@@ -20,25 +20,33 @@ const fixes = {
|
|
|
20
20
|
/**
|
|
21
21
|
* Форматирование кода самим Prettier (ESLint запускает Prettier как правило).
|
|
22
22
|
*
|
|
23
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
24
|
+
*
|
|
23
25
|
* @returns {import('eslint').Linter.Config[]}
|
|
24
26
|
*
|
|
25
27
|
* @see [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier)
|
|
26
28
|
*/
|
|
27
|
-
export const prettier = () =>
|
|
29
|
+
export const prettier = (config = []) =>
|
|
28
30
|
defineConfig([
|
|
29
31
|
{ files: FILES, ...plugin, rules: { ...plugin.rules, ...STYLE_RULES } },
|
|
30
32
|
{ files: VUE_FILES, rules: { ...fixes } },
|
|
33
|
+
|
|
34
|
+
config,
|
|
31
35
|
]);
|
|
32
36
|
|
|
33
37
|
/**
|
|
34
38
|
* Отключение правил, конфликтующих с Prettier.
|
|
35
39
|
*
|
|
40
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [customConfig]
|
|
41
|
+
*
|
|
36
42
|
* @returns {import('eslint').Linter.Config[]}
|
|
37
43
|
*
|
|
38
44
|
* @see [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier)
|
|
39
45
|
*/
|
|
40
|
-
export const prettierConfig = () =>
|
|
46
|
+
export const prettierConfig = (customConfig = []) =>
|
|
41
47
|
defineConfig([
|
|
42
48
|
{ files: FILES, ...config, rules: { ...config.rules, ...STYLE_RULES } },
|
|
43
49
|
{ files: VUE_FILES, rules: { ...fixes } },
|
|
50
|
+
|
|
51
|
+
customConfig,
|
|
44
52
|
]);
|
|
@@ -6,11 +6,13 @@ import { FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Правила для регулярных выражений.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [eslint-plugin-regexp](https://github.com/ota-meshi/eslint-plugin-regexp)
|
|
12
14
|
*/
|
|
13
|
-
export const regexp = () =>
|
|
15
|
+
export const regexp = (config = []) =>
|
|
14
16
|
defineConfig([
|
|
15
17
|
{
|
|
16
18
|
files: FILES,
|
|
@@ -19,4 +21,6 @@ export const regexp = () =>
|
|
|
19
21
|
regexp: { allowedCharacterRanges: ['alphanumeric', 'а-я', 'А-Я'] },
|
|
20
22
|
},
|
|
21
23
|
},
|
|
24
|
+
|
|
25
|
+
config,
|
|
22
26
|
]);
|
|
@@ -6,11 +6,13 @@ import { FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Правила SonarJS.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [eslint-plugin-sonarjs](https://github.com/SonarSource/SonarJS/blob/master/packages/jsts/src/rules/README.md)
|
|
12
14
|
*/
|
|
13
|
-
export const sonar = () =>
|
|
15
|
+
export const sonar = (config = []) =>
|
|
14
16
|
defineConfig([
|
|
15
17
|
{
|
|
16
18
|
files: FILES,
|
|
@@ -22,4 +24,6 @@ export const sonar = () =>
|
|
|
22
24
|
'sonarjs/unused-import': 'off', // @typescript-eslint/no-unused-vars
|
|
23
25
|
},
|
|
24
26
|
},
|
|
27
|
+
|
|
28
|
+
config,
|
|
25
29
|
]);
|
|
@@ -6,11 +6,13 @@ import { DATA_FILES, FILES } from '../base.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Правила форматирования и стиля кода.
|
|
8
8
|
*
|
|
9
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
10
|
+
*
|
|
9
11
|
* @returns {import('eslint').Linter.Config[]}
|
|
10
12
|
*
|
|
11
13
|
* @see [@stylistic/eslint-plugin](https://eslint.style/)
|
|
12
14
|
*/
|
|
13
|
-
export const stylistic = () =>
|
|
15
|
+
export const stylistic = (config = []) =>
|
|
14
16
|
defineConfig([
|
|
15
17
|
{
|
|
16
18
|
...plugin.configs.recommended,
|
|
@@ -110,4 +112,6 @@ export const stylistic = () =>
|
|
|
110
112
|
],
|
|
111
113
|
},
|
|
112
114
|
},
|
|
115
|
+
|
|
116
|
+
config,
|
|
113
117
|
]);
|
|
@@ -5,40 +5,43 @@ import { FILES } from '../base.js';
|
|
|
5
5
|
|
|
6
6
|
const DEFAULT_CSS_CONFIG_PATH = './styles/tailwind.css';
|
|
7
7
|
|
|
8
|
+
const recommended = plugin.configs.recommended;
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* Правила для Tailwind CSS.
|
|
10
12
|
*
|
|
11
|
-
* @
|
|
12
|
-
*
|
|
13
|
-
* import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
14
|
-
*
|
|
15
|
-
* export default defineConfig([
|
|
16
|
-
* plugins.tailwindcss({
|
|
17
|
-
* cssConfigPath: path.resolve(import.meta.dirname, 'src/styles.css'),
|
|
18
|
-
* }),
|
|
19
|
-
* ]);
|
|
13
|
+
* @param {import('eslint').Linter.Config | import('eslint').Linter.Config[]} [config]
|
|
14
|
+
* Например, чтобы переопределить путь к CSS-файлу Tailwind:
|
|
20
15
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
16
|
+
* ```js
|
|
17
|
+
* plugins.tailwindcss({
|
|
18
|
+
* settings: {
|
|
19
|
+
* tailwindcss: {
|
|
20
|
+
* cssConfigPath: path.resolve(import.meta.dirname, 'src/main.css'),
|
|
21
|
+
* },
|
|
22
|
+
* },
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
24
25
|
*
|
|
25
26
|
* @returns {import('eslint').Linter.Config[]}
|
|
26
27
|
*
|
|
27
28
|
* @see [eslint-plugin-tailwindcss](https://github.com/francoismassart/eslint-plugin-tailwindcss)
|
|
28
29
|
*/
|
|
29
|
-
export const tailwindcss = (
|
|
30
|
+
export const tailwindcss = (config = []) =>
|
|
30
31
|
defineConfig([
|
|
31
32
|
{
|
|
33
|
+
...recommended,
|
|
32
34
|
files: FILES,
|
|
33
|
-
plugins: { tailwindcss: plugin },
|
|
34
35
|
rules: {
|
|
35
|
-
...
|
|
36
|
+
...recommended.rules,
|
|
36
37
|
'tailwindcss/no-custom-classname': 'off',
|
|
37
38
|
'vue/static-class-names-order': 'off',
|
|
38
39
|
},
|
|
39
40
|
settings: {
|
|
40
|
-
|
|
41
|
-
tailwindcss: { cssConfigPath: DEFAULT_CSS_CONFIG_PATH
|
|
41
|
+
...recommended.settings,
|
|
42
|
+
tailwindcss: { cssConfigPath: DEFAULT_CSS_CONFIG_PATH },
|
|
42
43
|
},
|
|
43
44
|
},
|
|
45
|
+
|
|
46
|
+
config,
|
|
44
47
|
]);
|