@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
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { mergeConfigs } from '../utils/merge-configs.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULTS = { plugins: ['prettier-plugin-solidity'] };
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Форматирует контракты Solidity
|
|
7
|
+
*
|
|
8
|
+
* @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
|
|
9
|
+
* поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
|
|
10
|
+
* дополняются, `plugins` дедуплицируются, более поздние `overrides`
|
|
11
|
+
* выигрывают, остальные поля заменяются
|
|
12
|
+
*
|
|
13
|
+
* @returns {import('prettier').Config}
|
|
14
|
+
*
|
|
15
|
+
* @see [prettier-plugin-solidity](https://github.com/prettier-solidity/prettier-plugin-solidity)
|
|
16
|
+
*/
|
|
17
|
+
export const solidity = (options = {}) => mergeConfigs(DEFAULTS, options);
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { mergeConfigs } from '../utils/merge-configs.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULTS = {
|
|
3
4
|
jsonRecursiveSort: true,
|
|
4
5
|
plugins: ['prettier-plugin-sort-json'],
|
|
5
6
|
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Рекурсивно сортирует ключи JSON-объектов
|
|
10
|
+
*
|
|
11
|
+
* @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
|
|
12
|
+
* поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
|
|
13
|
+
* дополняются, `plugins` дедуплицируются, более поздние `overrides`
|
|
14
|
+
* выигрывают, остальные поля заменяются
|
|
15
|
+
*
|
|
16
|
+
* @returns {import('prettier').Config}
|
|
17
|
+
*
|
|
18
|
+
* @see [prettier-plugin-sort-json](https://github.com/Gudahtt/prettier-plugin-sort-json)
|
|
19
|
+
*/
|
|
20
|
+
export const sortJson = (options = {}) => mergeConfigs(DEFAULTS, options);
|
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { mergeConfigs } from '../utils/merge-configs.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULTS = { plugins: ['prettier-plugin-sql'] };
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Форматирует SQL-запросы
|
|
7
|
+
*
|
|
8
|
+
* @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
|
|
9
|
+
* поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
|
|
10
|
+
* дополняются, `plugins` дедуплицируются, более поздние `overrides`
|
|
11
|
+
* выигрывают, остальные поля заменяются
|
|
12
|
+
*
|
|
13
|
+
* @returns {import('prettier').Config}
|
|
14
|
+
*
|
|
15
|
+
* @see [prettier-plugin-sql](https://github.com/un-ts/prettier/tree/master/packages/sql)
|
|
16
|
+
*/
|
|
17
|
+
export const sql = (options = {}) => mergeConfigs(DEFAULTS, options);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { mergeConfigs } from '../utils/merge-configs.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULTS = {
|
|
3
4
|
plugins: ['prettier-plugin-tailwindcss'],
|
|
4
5
|
tailwindFunctions: [
|
|
5
6
|
'classnames',
|
|
@@ -12,3 +13,17 @@ export default {
|
|
|
12
13
|
'twMerge',
|
|
13
14
|
],
|
|
14
15
|
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Сортирует утилитарные классы Tailwind CSS по каноническому порядку
|
|
19
|
+
*
|
|
20
|
+
* @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
|
|
21
|
+
* поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
|
|
22
|
+
* дополняются, `plugins` дедуплицируются, более поздние `overrides`
|
|
23
|
+
* выигрывают, остальные поля заменяются
|
|
24
|
+
*
|
|
25
|
+
* @returns {import('prettier').Config}
|
|
26
|
+
*
|
|
27
|
+
* @see [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss)
|
|
28
|
+
*/
|
|
29
|
+
export const tailwindcss = (options = {}) => mergeConfigs(DEFAULTS, options);
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { mergeConfigs } from '../utils/merge-configs.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULTS = {
|
|
3
4
|
plugins: ['@prettier/plugin-xml'],
|
|
4
5
|
xmlWhitespaceSensitivity: 'ignore',
|
|
5
6
|
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Форматирует XML-файлы
|
|
10
|
+
*
|
|
11
|
+
* @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
|
|
12
|
+
* поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
|
|
13
|
+
* дополняются, `plugins` дедуплицируются, более поздние `overrides`
|
|
14
|
+
* выигрывают, остальные поля заменяются
|
|
15
|
+
*
|
|
16
|
+
* @returns {import('prettier').Config}
|
|
17
|
+
*
|
|
18
|
+
* @see [plugin-xml](https://github.com/prettier/plugin-xml)
|
|
19
|
+
*/
|
|
20
|
+
export const xml = (options = {}) => mergeConfigs(DEFAULTS, options);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Объединяет конфигурации Prettier
|
|
3
|
+
*
|
|
4
|
+
* Коллекции `overrides` и `plugins` дополняются: пользовательские значения идут
|
|
5
|
+
* после дефолтных, поэтому более поздние overrides выигрывают. `plugins`
|
|
6
|
+
* дедуплицируются. Остальные поля заменяются значениями из последующих
|
|
7
|
+
* конфигураций.
|
|
8
|
+
*
|
|
9
|
+
* @param {...import('prettier').Config} configs Конфигурации в порядке
|
|
10
|
+
* приоритета
|
|
11
|
+
*
|
|
12
|
+
* @returns {import('prettier').Config} Объединённая конфигурация
|
|
13
|
+
*/
|
|
14
|
+
export const mergeConfigs = (...configs) => ({
|
|
15
|
+
...Object.assign({}, ...configs),
|
|
16
|
+
overrides: configs.flatMap((config) => config.overrides ?? []),
|
|
17
|
+
plugins: [...new Set(configs.flatMap((config) => config.plugins ?? []))],
|
|
18
|
+
});
|
|
@@ -1,62 +1,200 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Stylelint Configuration
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@alexlit/config-stylelint)
|
|
4
|
+
[](https://npmx.dev/package/@alexlit/config-stylelint)
|
|
5
|
+
[](LICENSE)
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
Готовая конфигурация [Stylelint](https://stylelint.io/) для проверки CSS, SCSS и
|
|
8
|
+
Vue-файлов: настроенные правила из популярных stylelint-плагинов - порядок и
|
|
9
|
+
синтаксис свойств, доступность, БЭМ, поддержка SCSS и т.д. Вместо того чтобы
|
|
10
|
+
подключать и настраивать каждый плагин вручную, соберите конфигурацию из готовых
|
|
11
|
+
проверок.
|
|
12
|
+
|
|
13
|
+
Проверки модульные: по умолчанию ничего не включено - вы сами перечисляете
|
|
14
|
+
нужные в `defineConfig`.
|
|
15
|
+
|
|
16
|
+
## Установка
|
|
17
|
+
|
|
18
|
+
```bash
|
|
6
19
|
npm i @alexlit/config-stylelint -D
|
|
7
20
|
```
|
|
8
21
|
|
|
9
|
-
##
|
|
22
|
+
## Быстрый старт
|
|
10
23
|
|
|
11
|
-
|
|
12
|
-
|
|
24
|
+
```js
|
|
25
|
+
// stylelint.config.js
|
|
26
|
+
import { defineConfig, plugins } from '@alexlit/config-stylelint';
|
|
13
27
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
28
|
+
export default defineConfig([
|
|
29
|
+
plugins.scss(),
|
|
30
|
+
plugins.vue(),
|
|
17
31
|
|
|
18
|
-
|
|
19
|
-
|
|
32
|
+
plugins.prettier(),
|
|
33
|
+
]);
|
|
34
|
+
```
|
|
20
35
|
|
|
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
|
-
|
|
36
|
+
Каждый вызов `plugins.*()` - отдельная проверка. Добавьте только то, что нужно
|
|
37
|
+
проекту; полный список - в разделе [Проверки](#проверки).
|
|
38
|
+
|
|
39
|
+
Больше проверок - просто допишите их в массив:
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
// stylelint.config.js
|
|
43
|
+
import { defineConfig, plugins } from '@alexlit/config-stylelint';
|
|
44
|
+
|
|
45
|
+
export default defineConfig([
|
|
46
|
+
plugins.a11y(),
|
|
47
|
+
plugins.bem(),
|
|
48
|
+
plugins.colorFormat(),
|
|
49
|
+
plugins.declarationBlockNoIgnoredProperties(),
|
|
50
|
+
plugins.gamut(),
|
|
51
|
+
plugins.highPerformanceAnimation(),
|
|
52
|
+
plugins.logicalCss(),
|
|
53
|
+
plugins.mediaUseCustomMedia(),
|
|
54
|
+
plugins.noNestedMedia(),
|
|
55
|
+
plugins.noUnresolvedModule(),
|
|
56
|
+
plugins.noUnsupportedBrowserFeatures(),
|
|
57
|
+
plugins.order(),
|
|
58
|
+
plugins.scss(),
|
|
59
|
+
plugins.selectorNoEmpty(),
|
|
60
|
+
plugins.useNesting(),
|
|
61
|
+
plugins.vue(),
|
|
62
|
+
|
|
63
|
+
plugins.prettier(),
|
|
64
|
+
]);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Настройка
|
|
68
|
+
|
|
69
|
+
### Правила конкретной проверки
|
|
70
|
+
|
|
71
|
+
Чтобы переопределить правила одной проверки, передайте объект в её вызов:
|
|
72
|
+
|
|
73
|
+
```js
|
|
74
|
+
// stylelint.config.js
|
|
75
|
+
import { defineConfig, plugins } from '@alexlit/config-stylelint';
|
|
76
|
+
|
|
77
|
+
export default defineConfig([
|
|
78
|
+
plugins.useNesting({ rules: { 'csstools/use-nesting': 'never' } }),
|
|
79
|
+
plugins.noUnresolvedModule({
|
|
80
|
+
rules: { 'plugin/no-unresolved-module': { alias: { '~': 'src' } } },
|
|
81
|
+
}),
|
|
82
|
+
]);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`rules` мержатся поверхностно: настройка одноимённого правила из опций заменяет
|
|
86
|
+
дефолтную целиком.
|
|
87
|
+
|
|
88
|
+
### Правила для отдельных файлов
|
|
89
|
+
|
|
90
|
+
Чтобы применить правила только к части файлов, используйте `overrides` в опциях
|
|
91
|
+
проверки. Пользовательские overrides добавляются после дефолтных, поэтому
|
|
92
|
+
выигрывают у них:
|
|
93
|
+
|
|
94
|
+
```js
|
|
95
|
+
// stylelint.config.js
|
|
96
|
+
import { defineConfig, plugins } from '@alexlit/config-stylelint';
|
|
97
|
+
|
|
98
|
+
export default defineConfig([
|
|
99
|
+
plugins.useNesting({
|
|
100
|
+
overrides: [
|
|
101
|
+
{ files: ['**/*.vue'], rules: { 'csstools/use-nesting': 'never' } },
|
|
102
|
+
],
|
|
103
|
+
}),
|
|
104
|
+
]);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`files` обязателен: Stylelint падает с ошибкой, если в override его нет.
|
|
108
|
+
|
|
109
|
+
### Приоритет настроек
|
|
110
|
+
|
|
111
|
+
Внутри одной проверки: дефолты → `options.rules` → `options.overrides` (для
|
|
112
|
+
подходящих файлов). Между проверками и вторым аргументом `defineConfig`
|
|
113
|
+
действует тот же порядок: база → проверки по порядку → `options`.
|
|
114
|
+
|
|
115
|
+
Коллекции (`extends`, `ignoreFiles`, `overrides`, `plugins`) дополняются,
|
|
116
|
+
`plugins` дедуплицируются. Остальные поля, например `customSyntax`, заменяются
|
|
117
|
+
значениями из опций.
|
|
118
|
+
|
|
119
|
+
### Общие настройки Stylelint
|
|
120
|
+
|
|
121
|
+
Второй аргумент `defineConfig` - общие опции: собственные правила, файлы для
|
|
122
|
+
игнора и т.д. Он перебивает настройки всех проверок:
|
|
123
|
+
|
|
124
|
+
```js
|
|
125
|
+
// stylelint.config.js
|
|
126
|
+
import { defineConfig, plugins } from '@alexlit/config-stylelint';
|
|
127
|
+
|
|
128
|
+
export default defineConfig([plugins.scss(), plugins.vue()], {
|
|
129
|
+
ignoreFiles: ['fixtures/**'],
|
|
130
|
+
rules: { 'max-nesting-depth': 3 },
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Проверки
|
|
135
|
+
|
|
136
|
+
| Проверка | Что делает | Плагин |
|
|
137
|
+
| ----------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
138
|
+
| `plugins.a11y()` | Проверяет типичные ошибки доступности | [`@double-great/stylelint-a11y`](https://github.com/double-great/stylelint-a11y) |
|
|
139
|
+
| `plugins.bem()` | Настраивает линтинг по методологии БЭМ | [`@morev/stylelint-plugin`](https://morevm.github.io/stylelint-plugin/) |
|
|
140
|
+
| `plugins.colorFormat()` | Нормализует формат цветов (hex → rgb/hsl) | встроенное правило `color-format/format` |
|
|
141
|
+
| `plugins.declarationBlockNoIgnoredProperties()` | Запрещает бесполезные свойства в блоке объявлений | [`stylelint-declaration-block-no-ignored-properties`](https://github.com/kristerkari/stylelint-declaration-block-no-ignored-properties) |
|
|
142
|
+
| `plugins.gamut()` | Проверяет цвета на выход за пределы цветового охвата | [`stylelint-gamut`](https://github.com/fpetrakov/stylelint-gamut) |
|
|
143
|
+
| `plugins.highPerformanceAnimation()` | Запрещает анимации, нагружающие рендеринг | [`stylelint-high-performance-animation`](https://github.com/kristerkari/stylelint-high-performance-animation) |
|
|
144
|
+
| `plugins.logicalCss()` | Проверяет использование логических CSS-свойств | [`stylelint-plugin-logical-css`](https://github.com/yuschick/stylelint-plugin-logical-css) |
|
|
145
|
+
| `plugins.mediaUseCustomMedia()` | Требует использования кастомных медиа-запросов | [`stylelint-media-use-custom-media`](https://github.com/csstools/stylelint-media-use-custom-media) |
|
|
146
|
+
| `plugins.noIndistinguishableColors()` | Запрещает неразличимые цвета | [`stylelint-no-indistinguishable-colors`](https://github.com/ierhyna/stylelint-no-indistinguishable-colors) |
|
|
147
|
+
| `plugins.noNestedMedia()` | Запрещает вложенные медиа-запросы | [`stylelint-no-nested-media`](https://github.com/dkrnl/stylelint-no-nested-media) |
|
|
148
|
+
| `plugins.noUnresolvedModule()` | Проверяет разрешение импортов | [`stylelint-no-unresolved-module`](https://github.com/niksy/stylelint-no-unresolved-module) |
|
|
149
|
+
| `plugins.noUnsupportedBrowserFeatures()` | Проверяет поддержку CSS-функций целевыми браузерами | [`stylelint-no-unsupported-browser-features`](https://github.com/ismay/stylelint-no-unsupported-browser-features) |
|
|
150
|
+
| `plugins.order()` | Настраивает порядок свойств и селекторов | [`stylelint-order`](https://github.com/hudochenkov/stylelint-order) |
|
|
151
|
+
| `plugins.prettier()` | Интегрирует Prettier | [`stylelint-prettier`](https://github.com/prettier/stylelint-prettier) |
|
|
152
|
+
| `plugins.scss()` | Настраивает линтинг SCSS | [`stylelint-scss`](https://github.com/kristerkari/stylelint-scss) |
|
|
153
|
+
| `plugins.selectorNoEmpty()` | Запрещает пустые селекторы | [`stylelint-selector-no-empty`](https://github.com/ssivanatarajan/stylelint-selector-no-empty) |
|
|
154
|
+
| `plugins.useNesting()` | Требует использования CSS-вложенности | [`stylelint-use-nesting`](https://github.com/csstools/stylelint-use-nesting) |
|
|
155
|
+
| `plugins.vue()` | Подключает поддержку Vue.js SFC | [`stylelint-config-recommended-vue`](https://github.com/ota-meshi/stylelint-config-recommended-vue) |
|
|
156
|
+
|
|
157
|
+
## Миграция с v63
|
|
158
|
+
|
|
159
|
+
v64 - major-релиз: коллекции в опциях проверок теперь дополняют дефолты, а не
|
|
160
|
+
заменяют их.
|
|
161
|
+
|
|
162
|
+
| Было | Стало |
|
|
163
|
+
| --------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
164
|
+
| `plugins.scss({ extends: ['custom'] })` заменял дефолтный | `extends` дополняется, `custom` применяется после дефолтного |
|
|
165
|
+
| `plugins.useNesting({ plugins: ['custom'] })` заменял | `plugins` дополняется, дубли убираются |
|
|
166
|
+
| `plugins.bem({ overrides: [...] })` заменял дефолтные | overrides дополняются, пользовательские применяются после дефолтных |
|
|
167
|
+
|
|
168
|
+
Отключить конкретное дефолтное правило можно через `rules: { 'rule': null }`.
|
|
169
|
+
Общие настройки, которые должны перебивать всё, передавайте вторым аргументом
|
|
170
|
+
`defineConfig`.
|
|
171
|
+
|
|
172
|
+
## Миграция с v61
|
|
173
|
+
|
|
174
|
+
v62 - breaking-релиз: проверок по умолчанию больше нет, всё подключается явно.
|
|
175
|
+
|
|
176
|
+
| v61 | v62 |
|
|
177
|
+
| ------------------------------- | ---------------------------------------------- |
|
|
178
|
+
| `createConfig()` | перечислите нужные проверки явно |
|
|
179
|
+
| `createConfig({ gamut: true })` | `defineConfig([plugins.gamut()])` |
|
|
180
|
+
| `createConfig({ scss: false })` | просто не добавляйте `plugins.scss()` в список |
|
|
181
|
+
| `createConfig({}, options)` | `defineConfig([...], options)` |
|
|
182
|
+
|
|
183
|
+
Проверки, включённые по умолчанию в v61: `color-format`,
|
|
184
|
+
`declaration-block-no-ignored-properties`, `high-performance-animation`,
|
|
185
|
+
`no-nested-media`, `order`, `scss`, `selector-no-empty`, `use-nesting`, `vue`, а
|
|
186
|
+
также `prettier`.
|
|
49
187
|
|
|
50
|
-
##
|
|
188
|
+
## Разработка
|
|
51
189
|
|
|
52
|
-
-
|
|
190
|
+
- Проверка актуальности правил:
|
|
53
191
|
|
|
54
|
-
```
|
|
192
|
+
```bash
|
|
55
193
|
npx stylelint-find-new-rules
|
|
56
194
|
```
|
|
57
195
|
|
|
58
|
-
##
|
|
196
|
+
## Полезные ссылки
|
|
59
197
|
|
|
60
|
-
- [
|
|
198
|
+
- [awesome-stylelint](https://github.com/stylelint/awesome-stylelint)
|
|
61
199
|
- [stylelint-scales](https://github.com/jeddy3/stylelint-scales)
|
|
62
200
|
- [stylelint-value-no-unknown-custom-properties](https://github.com/csstools/stylelint-value-no-unknown-custom-properties)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Config } from 'stylelint';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Опции фабрики плагина - частичный конфиг Stylelint, накладываемый поверх
|
|
5
|
+
* значений по умолчанию.
|
|
6
|
+
*
|
|
7
|
+
* Коллекции (`extends`, `ignoreFiles`, `overrides`, `plugins`) дополняют
|
|
8
|
+
* значения по умолчанию, `rules` мержатся поверхностно, остальные поля
|
|
9
|
+
* заменяются. Для каждого элемента `overrides` обязателен `files`.
|
|
10
|
+
*/
|
|
11
|
+
type PluginOptions = Partial<Config>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Пространство имён фабрик конфигов плагинов. Дефолтных плагинов нет -
|
|
15
|
+
* подключайте нужные явно.
|
|
16
|
+
*/
|
|
17
|
+
interface Plugins {
|
|
18
|
+
a11y: (options?: PluginOptions) => Config;
|
|
19
|
+
bem: (options?: PluginOptions) => Config;
|
|
20
|
+
colorFormat: (options?: PluginOptions) => Config;
|
|
21
|
+
declarationBlockNoIgnoredProperties: (options?: PluginOptions) => Config;
|
|
22
|
+
gamut: (options?: PluginOptions) => Config;
|
|
23
|
+
highPerformanceAnimation: (options?: PluginOptions) => Config;
|
|
24
|
+
logicalCss: (options?: PluginOptions) => Config;
|
|
25
|
+
mediaUseCustomMedia: (options?: PluginOptions) => Config;
|
|
26
|
+
noIndistinguishableColors: (options?: PluginOptions) => Config;
|
|
27
|
+
noNestedMedia: (options?: PluginOptions) => Config;
|
|
28
|
+
noUnresolvedModule: (options?: PluginOptions) => Config;
|
|
29
|
+
noUnsupportedBrowserFeatures: (options?: PluginOptions) => Config;
|
|
30
|
+
order: (options?: PluginOptions) => Config;
|
|
31
|
+
prettier: (options?: PluginOptions) => Config;
|
|
32
|
+
scss: (options?: PluginOptions) => Config;
|
|
33
|
+
selectorNoEmpty: (options?: PluginOptions) => Config;
|
|
34
|
+
useNesting: (options?: PluginOptions) => Config;
|
|
35
|
+
vue: (options?: PluginOptions) => Config;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Пространство имён фабрик конфигов плагинов. */
|
|
39
|
+
declare const plugins: Plugins;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Создать конфиг Stylelint.
|
|
43
|
+
*
|
|
44
|
+
* Приоритет (от низкого к высокому): база → конфиги плагинов по порядку →
|
|
45
|
+
* `options`. `extends`, `ignoreFiles`, `overrides` и `plugins` конкатенируются
|
|
46
|
+
* (дубли `plugins` убираются), `rules` - shallow merge.
|
|
47
|
+
*
|
|
48
|
+
* @param pluginConfigs - Конфиги плагинов (например, `[plugins.scss()]`)
|
|
49
|
+
* @param options - Базовые опции Stylelint, наивысший приоритет
|
|
50
|
+
*/
|
|
51
|
+
declare function defineConfig(
|
|
52
|
+
pluginConfigs?: Config[],
|
|
53
|
+
options?: Config,
|
|
54
|
+
): Config;
|
|
55
|
+
|
|
56
|
+
export { defineConfig, plugins };
|