@alexlit/lint-kit 214.4.0 → 216.0.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/README.md +27 -22
- package/eslint.config.js +31 -60
- package/lint-staged.config.js +2 -2
- package/linthtml.config.js +2 -2
- package/package.json +3 -2
- package/packages/config-eslint/README.md +181 -106
- package/packages/config-eslint/base.js +8 -3
- package/packages/config-eslint/index.d.ts +114 -0
- package/packages/config-eslint/index.js +82 -23
- package/packages/config-eslint/package.json +20 -17
- package/packages/config-eslint/plugins/de-morgan.js +11 -4
- package/packages/config-eslint/plugins/import-x.js +54 -37
- package/packages/config-eslint/plugins/javascript.js +100 -85
- package/packages/config-eslint/plugins/jsdoc.js +28 -17
- package/packages/config-eslint/plugins/json.js +35 -24
- package/packages/config-eslint/plugins/perfectionist.js +112 -95
- package/packages/config-eslint/plugins/pinia.js +21 -10
- package/packages/config-eslint/plugins/prettier.js +32 -10
- package/packages/config-eslint/plugins/regexp.js +20 -9
- package/packages/config-eslint/plugins/sonar.js +23 -12
- package/packages/config-eslint/plugins/stylistic.js +111 -100
- package/packages/config-eslint/plugins/tailwindcss.js +24 -10
- package/packages/config-eslint/plugins/tanstack-query.js +20 -9
- package/packages/config-eslint/plugins/typescript-type-checked.js +42 -33
- package/packages/config-eslint/plugins/typescript.js +27 -14
- package/packages/config-eslint/plugins/unicorn.js +77 -64
- package/packages/config-eslint/plugins/unocss.js +16 -5
- package/packages/config-eslint/plugins/vitest.js +24 -13
- package/packages/config-eslint/plugins/vue-accessibility.js +26 -13
- package/packages/config-eslint/plugins/vue-i18n.js +43 -31
- package/packages/config-eslint/plugins/vue.js +259 -242
- package/packages/config-eslint/plugins/zod.js +21 -10
- package/packages/config-eslint/rules/typescript.js +1 -1
- package/packages/config-hooks/README.md +119 -37
- package/packages/config-hooks/index.d.ts +19 -0
- package/packages/config-hooks/lint-staged.js +8 -6
- package/packages/config-hooks/package.json +3 -1
- package/packages/config-htmllint/README.md +50 -22
- package/packages/config-htmllint/index.d.ts +13 -0
- package/packages/config-htmllint/index.js +15 -7
- package/packages/config-htmllint/package.json +4 -2
- package/packages/config-markdownlint/README.md +40 -5
- package/packages/config-markdownlint/index.json +0 -2
- package/packages/config-markdownlint/package.json +1 -1
- package/packages/config-npmlint/README.md +48 -5
- package/packages/config-npmlint/package.json +3 -3
- package/packages/config-prettier/README.md +158 -23
- package/packages/config-prettier/index.d.ts +100 -0
- package/packages/config-prettier/index.js +63 -85
- package/packages/config-prettier/package.json +6 -4
- package/packages/config-prettier/plugins/jsdoc.js +17 -2
- package/packages/config-prettier/plugins/mdc.js +17 -2
- package/packages/config-prettier/plugins/packagejson.js +17 -4
- package/packages/config-prettier/plugins/php.js +17 -4
- package/packages/config-prettier/plugins/pug.js +17 -2
- package/packages/config-prettier/plugins/ruby.js +17 -11
- package/packages/config-prettier/plugins/sh.js +17 -4
- package/packages/config-prettier/plugins/solidity.js +17 -4
- package/packages/config-prettier/plugins/sort-json.js +17 -2
- package/packages/config-prettier/plugins/sql.js +17 -4
- package/packages/config-prettier/plugins/tailwindcss.js +17 -2
- package/packages/config-prettier/plugins/xml.js +17 -2
- package/packages/config-prettier/utils/merge-configs.js +18 -0
- package/packages/config-stylelint/README.md +182 -44
- package/packages/config-stylelint/index.d.ts +56 -0
- package/packages/config-stylelint/index.js +161 -165
- package/packages/config-stylelint/package.json +5 -2
- package/packages/config-stylelint/plugins/a11y.js +13 -6
- package/packages/config-stylelint/plugins/bem.js +14 -6
- package/packages/config-stylelint/plugins/color-format.js +14 -2
- package/packages/config-stylelint/plugins/declaration-block-no-ignored-properties.js +14 -5
- package/packages/config-stylelint/plugins/gamut.js +13 -5
- package/packages/config-stylelint/plugins/high-performance-animation.js +15 -6
- package/packages/config-stylelint/plugins/logical-css.js +13 -5
- package/packages/config-stylelint/plugins/media-use-custom-media.js +14 -5
- package/packages/config-stylelint/plugins/no-indistinguishable-colors.js +14 -5
- package/packages/config-stylelint/plugins/no-nested-media.js +13 -5
- package/packages/config-stylelint/plugins/no-unresolved-module.js +15 -6
- package/packages/config-stylelint/plugins/no-unsupported-browser-features.js +15 -6
- package/packages/config-stylelint/plugins/order.js +14 -6
- package/packages/config-stylelint/plugins/prettier.js +13 -5
- package/packages/config-stylelint/plugins/scss.js +13 -6
- package/packages/config-stylelint/plugins/selector-no-empty.js +14 -5
- package/packages/config-stylelint/plugins/use-nesting.js +13 -5
- package/packages/config-stylelint/plugins/vue.js +10 -2
- package/packages/config-stylelint/utils/merge-configs.js +20 -0
- package/prettier.config.js +15 -7
- package/scripts/semver.sh +3 -3
- package/stylelint.config.js +25 -11
- package/packages/config-eslint/_legacy/LICENSE +0 -20
- package/packages/config-eslint/_legacy/README.md +0 -48
- package/packages/config-eslint/_legacy/constants/allow-boolean-property-list.js +0 -38
- package/packages/config-eslint/_legacy/constants/boolean-prefixes.js +0 -11
- package/packages/config-eslint/_legacy/constants/english-verbs.js +0 -3368
- package/packages/config-eslint/_legacy/dictionaries/index.js +0 -467
- package/packages/config-eslint/_legacy/dictionaries/programming/bash.js +0 -25
- package/packages/config-eslint/_legacy/dictionaries/programming/django.js +0 -2345
- package/packages/config-eslint/_legacy/dictionaries/programming/elixir.js +0 -64
- package/packages/config-eslint/_legacy/dictionaries/programming/go.js +0 -7748
- package/packages/config-eslint/_legacy/dictionaries/programming/java.js +0 -33527
- package/packages/config-eslint/_legacy/dictionaries/programming/latex.js +0 -675
- package/packages/config-eslint/_legacy/dictionaries/programming/lua.js +0 -394
- package/packages/config-eslint/_legacy/dictionaries/programming/php.js +0 -9788
- package/packages/config-eslint/_legacy/dictionaries/programming/python.js +0 -367
- package/packages/config-eslint/_legacy/dictionaries/programming/ruby.js +0 -357
- package/packages/config-eslint/_legacy/dictionaries/programming/rust.js +0 -115
- package/packages/config-eslint/_legacy/dictionaries/programming/scala.js +0 -2755
- package/packages/config-eslint/_legacy/dictionaries/specialized/html-symbol-entities.js +0 -1118
- package/packages/config-eslint/_legacy/dictionaries/specialized/lorem-ipsum.js +0 -359
- package/packages/config-eslint/_legacy/index.js +0 -12
- package/packages/config-eslint/_legacy/legacy.js +0 -3
- package/packages/config-eslint/_legacy/package.json +0 -97
- package/packages/config-eslint/_legacy/plugins/array-func.js +0 -20
- package/packages/config-eslint/_legacy/plugins/compat.js +0 -7
- package/packages/config-eslint/_legacy/plugins/decorator-position.js +0 -15
- package/packages/config-eslint/_legacy/plugins/eslint-comments.js +0 -9
- package/packages/config-eslint/_legacy/plugins/etc.js +0 -13
- package/packages/config-eslint/_legacy/plugins/ext.js +0 -12
- package/packages/config-eslint/_legacy/plugins/filenames.js +0 -38
- package/packages/config-eslint/_legacy/plugins/import.js +0 -133
- package/packages/config-eslint/_legacy/plugins/jsdoc.js +0 -32
- package/packages/config-eslint/_legacy/plugins/jsx-a11y.js +0 -5
- package/packages/config-eslint/_legacy/plugins/lit-a11y.js +0 -5
- package/packages/config-eslint/_legacy/plugins/lit.js +0 -9
- package/packages/config-eslint/_legacy/plugins/more.js +0 -17
- package/packages/config-eslint/_legacy/plugins/no-await-in-promise.js +0 -5
- package/packages/config-eslint/_legacy/plugins/no-constructor-bind.js +0 -8
- package/packages/config-eslint/_legacy/plugins/no-explicit-type-exports.js +0 -7
- package/packages/config-eslint/_legacy/plugins/no-loops.js +0 -7
- package/packages/config-eslint/_legacy/plugins/no-secrets.js +0 -12
- package/packages/config-eslint/_legacy/plugins/no-use-extend-native.js +0 -5
- package/packages/config-eslint/_legacy/plugins/node.js +0 -5
- package/packages/config-eslint/_legacy/plugins/prettier.js +0 -24
- package/packages/config-eslint/_legacy/plugins/promise.js +0 -10
- package/packages/config-eslint/_legacy/plugins/regexp.js +0 -7
- package/packages/config-eslint/_legacy/plugins/security.js +0 -10
- package/packages/config-eslint/_legacy/plugins/simple-import-sort.js +0 -7
- package/packages/config-eslint/_legacy/plugins/sonar.js +0 -5
- package/packages/config-eslint/_legacy/plugins/sort-class-members.js +0 -298
- package/packages/config-eslint/_legacy/plugins/sort-destructure-keys.js +0 -10
- package/packages/config-eslint/_legacy/plugins/sort-keys-fix.js +0 -7
- package/packages/config-eslint/_legacy/plugins/spellcheck.js +0 -9
- package/packages/config-eslint/_legacy/plugins/sql.js +0 -26
- package/packages/config-eslint/_legacy/plugins/tanstack-query.js +0 -4
- package/packages/config-eslint/_legacy/plugins/testing-library.js +0 -9
- package/packages/config-eslint/_legacy/plugins/typescript-sort-keys.js +0 -5
- package/packages/config-eslint/_legacy/plugins/typescript.js +0 -157
- package/packages/config-eslint/_legacy/plugins/unicorn.js +0 -70
- package/packages/config-eslint/_legacy/plugins/unused-imports.js +0 -17
- package/packages/config-eslint/_legacy/plugins/vitest.js +0 -16
- package/packages/config-eslint/_legacy/plugins/vue-i18n.js +0 -34
- package/packages/config-eslint/_legacy/plugins/vue.js +0 -291
- package/packages/config-eslint/_legacy/plugins/vuejs-accessibility.js +0 -20
- package/packages/config-eslint/_legacy/plugins/wc.js +0 -5
- package/packages/config-eslint/_legacy/plugins/write-good-comments.js +0 -7
- package/packages/config-eslint/_legacy/utils/create-config.js +0 -377
- package/packages/config-eslint/_legacy/utils/extend-spell-checker.js +0 -23
package/README.md
CHANGED
|
@@ -1,32 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
[](https://www.npmjs.com/package/@alexlit/lint-kit)
|
|
2
|
+
[](https://npmx.dev/package/@alexlit/lint-kit)
|
|
3
|
+
[](LICENSE)
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
(designed for [Vue.js](https://vuejs.org) with
|
|
5
|
-
[TypeScript](https://www.typescriptlang.org/))
|
|
5
|
+
# Lint Kit
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Набор пакетов с конфигурациями для линтинга и форматирования кода Vue +
|
|
8
|
+
TypeScript проектов.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
## Пакеты
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
| Пакет | Назначение |
|
|
13
|
+
| :----------------------------------------------------- | :--------------------------------- |
|
|
14
|
+
| [eslint](packages/config-eslint/README.md) | Линтинг JavaScript и TypeScript |
|
|
15
|
+
| [hooks](packages/config-hooks/README.md) | Git-хуки (commitlint, lint-staged) |
|
|
16
|
+
| [htmllint](packages/config-htmllint/README.md) | Линтинг HTML |
|
|
17
|
+
| [markdownlint](packages/config-markdownlint/README.md) | Линтинг Markdown |
|
|
18
|
+
| [npmlint](packages/config-npmlint/README.md) | Линтинг `package.json` |
|
|
19
|
+
| [prettier](packages/config-prettier/README.md) | Форматирование кода |
|
|
20
|
+
| [stylelint](packages/config-stylelint/README.md) | Линтинг CSS |
|
|
14
21
|
|
|
15
|
-
|
|
22
|
+
## Установка
|
|
16
23
|
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- [htmllint](https://github.com/alex-lit/lint-kit/blob/master/packages/config-htmllint/README.md)
|
|
21
|
-
- [markdownlint](https://github.com/alex-lit/lint-kit/blob/master/packages/config-markdownlint/README.md)
|
|
22
|
-
- [npmlint](https://github.com/alex-lit/lint-kit/blob/master/packages/config-npmlint/README.md)
|
|
23
|
-
- [prettier](https://github.com/alex-lit/lint-kit/blob/master/packages/config-prettier/README.md)
|
|
24
|
-
- [stylelint](https://github.com/alex-lit/lint-kit/blob/master/packages/config-stylelint/README.md)
|
|
24
|
+
Рекомендуется устанавливать необходимые пакеты по отдельности - так вы
|
|
25
|
+
подключаете только те линтеры, которые необходимы и сможете управлять их
|
|
26
|
+
версиями.
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
Инструкции по настройке каждого пакета приведены в его README (см. ссылки в
|
|
29
|
+
разделе [«Пакеты»](#пакеты)).
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
```bash
|
|
32
|
+
# установка необходимого пакета
|
|
33
|
+
npm install --save-dev @alexlit/config-<PACKAGE_NAME>
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
npm
|
|
35
|
+
# или все сразу одной командой
|
|
36
|
+
npm install --save-dev @alexlit/lint-kit
|
|
32
37
|
```
|
package/eslint.config.js
CHANGED
|
@@ -1,65 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
base,
|
|
3
|
-
deMorgan,
|
|
4
|
-
importX,
|
|
5
|
-
javascript,
|
|
6
|
-
jsdoc,
|
|
7
|
-
json,
|
|
8
|
-
perfectionist,
|
|
9
|
-
prettierConfig,
|
|
10
|
-
regexp,
|
|
11
|
-
sonar,
|
|
12
|
-
stylistic,
|
|
13
|
-
tailwindcss,
|
|
14
|
-
tanstackQuery,
|
|
15
|
-
typescriptTypeChecked,
|
|
16
|
-
unicorn,
|
|
17
|
-
vitest,
|
|
18
|
-
vue,
|
|
19
|
-
vueAccessibility,
|
|
20
|
-
vueI18n,
|
|
21
|
-
zod,
|
|
22
|
-
} from '@alexlit/config-eslint';
|
|
1
|
+
import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
23
2
|
import path from 'node:path';
|
|
24
3
|
|
|
25
|
-
export default [
|
|
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
|
-
|
|
4
|
+
export default defineConfig([
|
|
5
|
+
...plugins.javascript(),
|
|
6
|
+
...plugins.deMorgan(),
|
|
7
|
+
...plugins.importX(),
|
|
8
|
+
...plugins.jsdoc(),
|
|
9
|
+
...plugins.json(),
|
|
10
|
+
...plugins.perfectionist(),
|
|
11
|
+
...plugins.regexp(),
|
|
12
|
+
...plugins.sonar(),
|
|
13
|
+
...plugins.stylistic(),
|
|
14
|
+
...plugins.typescriptTypeChecked(),
|
|
15
|
+
...plugins.unicorn(),
|
|
16
|
+
...plugins.vue(),
|
|
17
|
+
...plugins.vueAccessibility(),
|
|
18
|
+
...plugins.vueI18n(),
|
|
19
|
+
...plugins.tanstackQuery(),
|
|
20
|
+
...plugins.vitest(),
|
|
21
|
+
...plugins.zod(),
|
|
22
|
+
...plugins.tailwindcss({
|
|
23
|
+
settings: {
|
|
24
|
+
tailwindcss: {
|
|
25
|
+
cssConfigPath: path.resolve(
|
|
26
|
+
import.meta.dirname,
|
|
27
|
+
'examples/css.tailwind.css',
|
|
28
|
+
),
|
|
29
|
+
},
|
|
30
|
+
},
|
|
52
31
|
}),
|
|
53
32
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{ ignores: ['**/packages/config-eslint/_legacy/**'] },
|
|
33
|
+
{ files: ['**/*.js'], rules: { 'no-restricted-imports': 'off' } },
|
|
57
34
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
rules: {
|
|
61
|
-
'no-restricted-imports': 'off',
|
|
62
|
-
'unicorn/comment-content': ['warn'],
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
];
|
|
35
|
+
...plugins.prettierConfig(),
|
|
36
|
+
]);
|
package/lint-staged.config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineConfig } from '@alexlit/config-hooks';
|
|
2
2
|
|
|
3
|
-
export default
|
|
3
|
+
export default defineConfig();
|
package/linthtml.config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineConfig } from '@alexlit/config-htmllint';
|
|
2
2
|
|
|
3
|
-
export default
|
|
3
|
+
export default defineConfig();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alexlit/lint-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "216.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Preset of configuration files and dependencies for linting web applications (designed for Vue.js with TypeScript)",
|
|
6
6
|
"keywords": [
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
"commit-msg": "npx commitlint --edit"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
|
-
"changelogen": "^0.6.2"
|
|
76
|
+
"changelogen": "^0.6.2",
|
|
77
|
+
"radash": "^12.1.1"
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -1,135 +1,210 @@
|
|
|
1
1
|
# ESLint Configuration
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
> or lower.
|
|
3
|
+
[](https://www.npmjs.com/package/@alexlit/config-eslint)
|
|
4
|
+
[](https://npmx.dev/package/@alexlit/config-eslint)
|
|
5
|
+
[](LICENSE)
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
Готовая конфигурация [ESLint](https://eslint.org/) в формате flat config:
|
|
8
|
+
настроенные правила для JavaScript, TypeScript, Vue.js, JSON, YAML, импортов,
|
|
9
|
+
Prettier и не только - всё, что обычно приходится настраивать вручную. Вместо
|
|
10
|
+
того чтобы подключать и настраивать каждый плагин по отдельности, соберите
|
|
11
|
+
конфигурацию из готовых модулей.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
Плагины модульные: по умолчанию ничего не включено - вы сами перечисляете нужные
|
|
14
|
+
в `defineConfig`.
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
## Установка
|
|
17
|
+
|
|
18
|
+
```bash
|
|
15
19
|
npm i @alexlit/config-eslint -D
|
|
16
20
|
```
|
|
17
21
|
|
|
18
|
-
##
|
|
22
|
+
## Быстрый старт
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
// eslint.config.js
|
|
26
|
+
import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
27
|
+
|
|
28
|
+
export default defineConfig([
|
|
29
|
+
...plugins.javascript(),
|
|
30
|
+
...plugins.typescript(),
|
|
31
|
+
...plugins.unicorn(),
|
|
32
|
+
...plugins.prettierConfig(),
|
|
33
|
+
]);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Каждый плагин возвращает массив блоков конфигурации, поэтому его нужно
|
|
37
|
+
развернуть оператором spread (`...`). Добавьте только то, что нужно проекту;
|
|
38
|
+
полный список - в разделе [Плагины](#плагины).
|
|
39
|
+
|
|
40
|
+
> [!NOTE]
|
|
41
|
+
>
|
|
42
|
+
> `plugins.prettierConfig()` должен быть последним - он отключает правила,
|
|
43
|
+
> конфликтующие с Prettier.
|
|
44
|
+
|
|
45
|
+
Больше плагинов - просто допишите их в массив. Пример:
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
// eslint.config.js
|
|
49
|
+
import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
50
|
+
|
|
51
|
+
export default defineConfig([
|
|
52
|
+
// базовые
|
|
53
|
+
...plugins.deMorgan(),
|
|
54
|
+
...plugins.importX(),
|
|
55
|
+
...plugins.javascript(),
|
|
56
|
+
...plugins.jsdoc(),
|
|
57
|
+
...plugins.json(),
|
|
58
|
+
...plugins.perfectionist(),
|
|
59
|
+
...plugins.regexp(),
|
|
60
|
+
...plugins.sonar(),
|
|
61
|
+
...plugins.stylistic(),
|
|
62
|
+
...plugins.typescript(),
|
|
63
|
+
...plugins.unicorn(),
|
|
64
|
+
|
|
65
|
+
// проектные
|
|
66
|
+
...plugins.pinia(),
|
|
67
|
+
...plugins.tanstackQuery(),
|
|
68
|
+
...plugins.unocss(),
|
|
69
|
+
...plugins.vitest(),
|
|
70
|
+
...plugins.vue(),
|
|
71
|
+
...plugins.vueAccessibility(),
|
|
72
|
+
...plugins.vueI18n(),
|
|
73
|
+
...plugins.zod(),
|
|
74
|
+
|
|
75
|
+
// дополнительные правила
|
|
76
|
+
{ ignores: ['fixtures/**'], rules: { 'no-console': 'off' } },
|
|
77
|
+
|
|
78
|
+
// стилистика
|
|
79
|
+
...plugins.prettierConfig(),
|
|
80
|
+
]);
|
|
81
|
+
```
|
|
19
82
|
|
|
20
|
-
|
|
21
|
-
|
|
83
|
+
## Плагины
|
|
84
|
+
|
|
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` и другие опции, не отказываясь от пресета:
|
|
22
116
|
|
|
23
117
|
```js
|
|
24
118
|
// eslint.config.js
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
json,
|
|
35
|
-
perfectionist,
|
|
36
|
-
prettierConfig,
|
|
37
|
-
regexp,
|
|
38
|
-
sonar,
|
|
39
|
-
stylistic,
|
|
40
|
-
typescript,
|
|
41
|
-
unicorn,
|
|
42
|
-
|
|
43
|
-
// framework plugins
|
|
44
|
-
pinia,
|
|
45
|
-
tailwindcss,
|
|
46
|
-
tanstackQuery,
|
|
47
|
-
unocss,
|
|
48
|
-
vitest,
|
|
49
|
-
vue,
|
|
50
|
-
vueAccessibility,
|
|
51
|
-
vueI18n,
|
|
52
|
-
zod,
|
|
53
|
-
} from '@alexlit/config-eslint';
|
|
54
|
-
|
|
55
|
-
export default [
|
|
56
|
-
...base, // must be first
|
|
57
|
-
|
|
58
|
-
...deMorgan,
|
|
59
|
-
...importX,
|
|
60
|
-
...javascript,
|
|
61
|
-
...jsdoc,
|
|
62
|
-
...json,
|
|
63
|
-
...perfectionist,
|
|
64
|
-
...regexp,
|
|
65
|
-
...sonar,
|
|
66
|
-
...stylistic,
|
|
67
|
-
...typescript,
|
|
68
|
-
...unicorn,
|
|
69
|
-
|
|
70
|
-
...pinia,
|
|
71
|
-
...tanstackQuery,
|
|
72
|
-
...unocss,
|
|
73
|
-
...vitest,
|
|
74
|
-
...vue,
|
|
75
|
-
...vueAccessibility,
|
|
76
|
-
...vueI18n,
|
|
77
|
-
...zod,
|
|
78
|
-
|
|
79
|
-
// `tailwindcss` is the only plugin exported as a factory, because it needs a path to your CSS entrypoint
|
|
80
|
-
...tailwindcss({ cssConfigPath: './src/assets/css/main.css' }),
|
|
81
|
-
|
|
82
|
-
...prettierConfig, // must be last
|
|
83
|
-
|
|
84
|
-
// Custom rules example
|
|
85
|
-
// { files: ['**/*.js'], rules: { 'no-console': 'off' } },
|
|
86
|
-
];
|
|
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
|
+
]);
|
|
87
128
|
```
|
|
88
129
|
|
|
89
|
-
|
|
130
|
+
Можно передать как один объект, так и массив блоков. Так как конфиг добавляется
|
|
131
|
+
последним, он имеет более высокий приоритет, чем настройки пресета.
|
|
90
132
|
|
|
91
|
-
##
|
|
133
|
+
## Настройки Tailwind CSS
|
|
92
134
|
|
|
93
|
-
|
|
135
|
+
По умолчанию `plugins.tailwindcss()` использует путь `./styles/tailwind.css`.
|
|
136
|
+
Чтобы указать другой CSS-файл с конфигурацией Tailwind CSS, передайте обычный
|
|
137
|
+
flat-конфиг с настройками плагина:
|
|
138
|
+
|
|
139
|
+
```js
|
|
140
|
+
// eslint.config.js
|
|
141
|
+
import path from 'node:path';
|
|
142
|
+
|
|
143
|
+
import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
144
|
+
|
|
145
|
+
export default defineConfig([
|
|
146
|
+
...plugins.tailwindcss({
|
|
147
|
+
settings: {
|
|
148
|
+
tailwindcss: {
|
|
149
|
+
cssConfigPath: path.resolve(import.meta.dirname, 'src/main.css'),
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
}),
|
|
153
|
+
]);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Type-aware правила
|
|
157
|
+
|
|
158
|
+
Type-aware правила (`no-floating-promises`, `no-misused-promises`,
|
|
94
159
|
`await-thenable`, `no-unsafe-*`, `switch-exhaustiveness-check`,
|
|
95
|
-
`no-unnecessary-condition`, …)
|
|
96
|
-
|
|
160
|
+
`no-unnecessary-condition`, …) требуют информации о типах, из-за чего линтинг
|
|
161
|
+
замедляется. По умолчанию они не включены.
|
|
97
162
|
|
|
98
|
-
|
|
163
|
+
Чтобы их включить, замените `plugins.typescript()` на
|
|
164
|
+
`plugins.typescriptTypeChecked()`:
|
|
99
165
|
|
|
100
166
|
```js
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// ...other plugins
|
|
110
|
-
...typescriptTypeChecked, // instead of ...typescript
|
|
111
|
-
...prettierConfig,
|
|
112
|
-
];
|
|
167
|
+
// eslint.config.js
|
|
168
|
+
import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
169
|
+
|
|
170
|
+
export default defineConfig([
|
|
171
|
+
...plugins.javascript(),
|
|
172
|
+
...plugins.typescriptTypeChecked(), // вместо plugins.typescript()
|
|
173
|
+
...plugins.prettierConfig(),
|
|
174
|
+
]);
|
|
113
175
|
```
|
|
114
176
|
|
|
115
|
-
> [!NOTE]
|
|
116
|
-
>
|
|
117
|
-
> `
|
|
118
|
-
> `
|
|
177
|
+
> [!NOTE]
|
|
178
|
+
>
|
|
179
|
+
> `plugins.typescriptTypeChecked()` требует `tsconfig.json` в корне проекта
|
|
180
|
+
> (используется `projectService`, поэтому держите `tsconfig.json` и
|
|
181
|
+
> `tsconfig.node.json` в одном корне, если нужно). Используйте его вместо
|
|
182
|
+
> `plugins.typescript()`, а не вместе с ним.
|
|
183
|
+
|
|
184
|
+
## Prettier или prettierConfig
|
|
119
185
|
|
|
120
|
-
|
|
186
|
+
Оба варианта доступны, и они **не взаимозаменяемы**.
|
|
121
187
|
|
|
122
|
-
|
|
188
|
+
| Плагин | Пакет | Что делает |
|
|
189
|
+
| -------------------------- | ------------------------ | ---------------------------------------------------------------- |
|
|
190
|
+
| `plugins.prettierConfig()` | `eslint-config-prettier` | Только отключает форматирующие правила, конфликтующие с Prettier |
|
|
191
|
+
| `plugins.prettier()` | `eslint-plugin-prettier` | Дополнительно запускает сам Prettier как правило ESLint |
|
|
123
192
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
193
|
+
Используйте `plugins.prettierConfig()`, если Prettier запускается отдельным
|
|
194
|
+
шагом (редактор, CLI `prettier`, Husky). Используйте `plugins.prettier()`, если
|
|
195
|
+
хотите, чтобы ESLint сам сообщал о форматировании и исправлял его за один
|
|
196
|
+
проход - это медленнее и дублирует форматтер.
|
|
128
197
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
198
|
+
## Разработка
|
|
199
|
+
|
|
200
|
+
Просмотр итоговой конфигурации:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
npm run inspect
|
|
204
|
+
```
|
|
132
205
|
|
|
133
|
-
##
|
|
206
|
+
## Полезные ссылки
|
|
134
207
|
|
|
135
208
|
- [Awesome ESLint](https://github.com/dustinspecker/awesome-eslint)
|
|
209
|
+
- [ESLint - Documentation](https://eslint.org/docs/latest/)
|
|
210
|
+
- [ESLint - Configure Flat Config](https://eslint.org/docs/latest/use/configure/configuration-files)
|
|
@@ -37,6 +37,7 @@ export const IGNORES = [
|
|
|
37
37
|
'**/.*',
|
|
38
38
|
'**/.*/**',
|
|
39
39
|
'**/_deprecated/**',
|
|
40
|
+
'**/_legacy/**',
|
|
40
41
|
'**/build/**',
|
|
41
42
|
'**/dist/**',
|
|
42
43
|
'**/docs/**',
|
|
@@ -49,12 +50,16 @@ export const IGNORES = [
|
|
|
49
50
|
* Base config.
|
|
50
51
|
*
|
|
51
52
|
* Provides the file scope, the shared ignore patterns and the global variables.
|
|
52
|
-
*
|
|
53
|
+
* It is added automatically by `defineConfig`, so you never spread it
|
|
54
|
+
* yourself.
|
|
53
55
|
*
|
|
54
56
|
* @example
|
|
55
|
-
* import {
|
|
57
|
+
* import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
56
58
|
*
|
|
57
|
-
* export default [
|
|
59
|
+
* export default defineConfig([
|
|
60
|
+
* ...plugins.javascript(),
|
|
61
|
+
* ...plugins.unicorn(),
|
|
62
|
+
* ]);
|
|
58
63
|
*/
|
|
59
64
|
export const base = defineConfig([
|
|
60
65
|
{ files: FILES, languageOptions: { globals: globals.browser } },
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { Linter } from 'eslint';
|
|
2
|
+
|
|
3
|
+
/** Flat-конфиг ESLint. */
|
|
4
|
+
export type Config = Linter.Config;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Дополнительный flat-конфиг, который добавляется после предустановленного.
|
|
8
|
+
* Можно передать как один блок, так и массив блоков.
|
|
9
|
+
*/
|
|
10
|
+
export type PluginConfig = Config | Config[];
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Фабрики плагинов. Каждый вызов возвращает массив flat-конфигов, который нужно
|
|
14
|
+
* развернуть через spread-оператор: `...plugins.<name>()`.
|
|
15
|
+
*
|
|
16
|
+
* Любая фабрика принимает необязательный конфиг, который добавляется после
|
|
17
|
+
* предустановленных блоков и переопределяет их.
|
|
18
|
+
*/
|
|
19
|
+
export interface Plugins {
|
|
20
|
+
/** @see eslint-plugin-de-morgan */
|
|
21
|
+
deMorgan(config?: PluginConfig): Config[];
|
|
22
|
+
/** @see eslint-plugin-import-x */
|
|
23
|
+
importX(config?: PluginConfig): Config[];
|
|
24
|
+
/** @see eslint */
|
|
25
|
+
javascript(config?: PluginConfig): Config[];
|
|
26
|
+
/** @see eslint-plugin-jsdoc */
|
|
27
|
+
jsdoc(config?: PluginConfig): Config[];
|
|
28
|
+
/** @see ESLint/JSON */
|
|
29
|
+
json(config?: PluginConfig): Config[];
|
|
30
|
+
/** @see eslint-plugin-perfectionist */
|
|
31
|
+
perfectionist(config?: PluginConfig): Config[];
|
|
32
|
+
/** @see eslint-plugin-pinia */
|
|
33
|
+
pinia(config?: PluginConfig): Config[];
|
|
34
|
+
/** @see eslint-plugin-prettier */
|
|
35
|
+
prettier(config?: PluginConfig): Config[];
|
|
36
|
+
/** @see eslint-config-prettier */
|
|
37
|
+
prettierConfig(config?: PluginConfig): Config[];
|
|
38
|
+
/** @see eslint-plugin-regexp */
|
|
39
|
+
regexp(config?: PluginConfig): Config[];
|
|
40
|
+
/** @see eslint-plugin-sonarjs */
|
|
41
|
+
sonar(config?: PluginConfig): Config[];
|
|
42
|
+
/** @see @stylistic/eslint-plugin */
|
|
43
|
+
stylistic(config?: PluginConfig): Config[];
|
|
44
|
+
/** @see eslint-plugin-tailwindcss */
|
|
45
|
+
tailwindcss(config?: PluginConfig): Config[];
|
|
46
|
+
/** @see @tanstack/query */
|
|
47
|
+
tanstackQuery(config?: PluginConfig): Config[];
|
|
48
|
+
/** @see typescript-eslint */
|
|
49
|
+
typescript(config?: PluginConfig): Config[];
|
|
50
|
+
/** @see typescript-eslint */
|
|
51
|
+
typescriptTypeChecked(config?: PluginConfig): Config[];
|
|
52
|
+
/** @see eslint-plugin-unicorn */
|
|
53
|
+
unicorn(config?: PluginConfig): Config[];
|
|
54
|
+
/** @see @unocss/eslint-config */
|
|
55
|
+
unocss(config?: PluginConfig): Config[];
|
|
56
|
+
/** @see eslint-plugin-vitest */
|
|
57
|
+
vitest(config?: PluginConfig): Config[];
|
|
58
|
+
/** @see eslint-plugin-vue */
|
|
59
|
+
vue(config?: PluginConfig): Config[];
|
|
60
|
+
/** @see eslint-plugin-vuejs-accessibility */
|
|
61
|
+
vueAccessibility(config?: PluginConfig): Config[];
|
|
62
|
+
/** @see eslint-plugin-vue-i18n */
|
|
63
|
+
vueI18n(config?: PluginConfig): Config[];
|
|
64
|
+
/** @see eslint-plugin-zod */
|
|
65
|
+
zod(config?: PluginConfig): Config[];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Ограничение синтаксиса - сообщение об ошибке и селектор AST. */
|
|
69
|
+
export interface RestrictedSyntax {
|
|
70
|
+
message: string;
|
|
71
|
+
selector: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Пространство имён фабрик плагинов. */
|
|
75
|
+
export declare const plugins: Plugins;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Базовый конфиг: область файлов, игнорируемые пути и глобальные переменные.
|
|
79
|
+
* Добавляется автоматически первым блоком в `defineConfig`.
|
|
80
|
+
*/
|
|
81
|
+
export declare const base: Config[];
|
|
82
|
+
|
|
83
|
+
export declare const DATA_FILES: string[];
|
|
84
|
+
export declare const DTS_FILES: string[];
|
|
85
|
+
export declare const FILES: string[];
|
|
86
|
+
export declare const IGNORES: string[];
|
|
87
|
+
export declare const JSON_FILES: string[];
|
|
88
|
+
export declare const NO_RESTRICTED_SYNTAX: RestrictedSyntax[];
|
|
89
|
+
export declare const TEST_FILES: string[];
|
|
90
|
+
export declare const TS_FILES: string[];
|
|
91
|
+
export declare const TS_RULES: Record<string, Linter.RuleEntry>;
|
|
92
|
+
export declare const VUE_FILES: string[];
|
|
93
|
+
export declare const YAML_FILES: string[];
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Создать конфигурацию ESLint.
|
|
97
|
+
*
|
|
98
|
+
* Базовые настройки (`base`) добавляются автоматически и всегда идут первыми.
|
|
99
|
+
* Разворачивайте вызовы плагинов через spread-оператор, а переопределения
|
|
100
|
+
* добавляйте прямо в массив.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* import { defineConfig, plugins } from '@alexlit/config-eslint';
|
|
104
|
+
*
|
|
105
|
+
* export default defineConfig([
|
|
106
|
+
* ...plugins.javascript(),
|
|
107
|
+
* ...plugins.unicorn({ rules: { 'unicorn/no-null': 'off' } }),
|
|
108
|
+
* ...plugins.prettierConfig(), // последним
|
|
109
|
+
* { rules: { 'no-console': 'off' } },
|
|
110
|
+
* ]);
|
|
111
|
+
*
|
|
112
|
+
* @param configs - Массив flat-конфигов
|
|
113
|
+
*/
|
|
114
|
+
export declare function defineConfig(configs?: Config[]): Config[];
|