@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.
Files changed (157) hide show
  1. package/README.md +27 -22
  2. package/eslint.config.js +31 -60
  3. package/lint-staged.config.js +2 -2
  4. package/linthtml.config.js +2 -2
  5. package/package.json +3 -2
  6. package/packages/config-eslint/README.md +181 -106
  7. package/packages/config-eslint/base.js +8 -3
  8. package/packages/config-eslint/index.d.ts +114 -0
  9. package/packages/config-eslint/index.js +82 -23
  10. package/packages/config-eslint/package.json +20 -17
  11. package/packages/config-eslint/plugins/de-morgan.js +11 -4
  12. package/packages/config-eslint/plugins/import-x.js +54 -37
  13. package/packages/config-eslint/plugins/javascript.js +100 -85
  14. package/packages/config-eslint/plugins/jsdoc.js +28 -17
  15. package/packages/config-eslint/plugins/json.js +35 -24
  16. package/packages/config-eslint/plugins/perfectionist.js +112 -95
  17. package/packages/config-eslint/plugins/pinia.js +21 -10
  18. package/packages/config-eslint/plugins/prettier.js +32 -10
  19. package/packages/config-eslint/plugins/regexp.js +20 -9
  20. package/packages/config-eslint/plugins/sonar.js +23 -12
  21. package/packages/config-eslint/plugins/stylistic.js +111 -100
  22. package/packages/config-eslint/plugins/tailwindcss.js +24 -10
  23. package/packages/config-eslint/plugins/tanstack-query.js +20 -9
  24. package/packages/config-eslint/plugins/typescript-type-checked.js +42 -33
  25. package/packages/config-eslint/plugins/typescript.js +27 -14
  26. package/packages/config-eslint/plugins/unicorn.js +77 -64
  27. package/packages/config-eslint/plugins/unocss.js +16 -5
  28. package/packages/config-eslint/plugins/vitest.js +24 -13
  29. package/packages/config-eslint/plugins/vue-accessibility.js +26 -13
  30. package/packages/config-eslint/plugins/vue-i18n.js +43 -31
  31. package/packages/config-eslint/plugins/vue.js +259 -242
  32. package/packages/config-eslint/plugins/zod.js +21 -10
  33. package/packages/config-eslint/rules/typescript.js +1 -1
  34. package/packages/config-hooks/README.md +119 -37
  35. package/packages/config-hooks/index.d.ts +19 -0
  36. package/packages/config-hooks/lint-staged.js +8 -6
  37. package/packages/config-hooks/package.json +3 -1
  38. package/packages/config-htmllint/README.md +50 -22
  39. package/packages/config-htmllint/index.d.ts +13 -0
  40. package/packages/config-htmllint/index.js +15 -7
  41. package/packages/config-htmllint/package.json +4 -2
  42. package/packages/config-markdownlint/README.md +40 -5
  43. package/packages/config-markdownlint/index.json +0 -2
  44. package/packages/config-markdownlint/package.json +1 -1
  45. package/packages/config-npmlint/README.md +48 -5
  46. package/packages/config-npmlint/package.json +3 -3
  47. package/packages/config-prettier/README.md +158 -23
  48. package/packages/config-prettier/index.d.ts +100 -0
  49. package/packages/config-prettier/index.js +63 -85
  50. package/packages/config-prettier/package.json +6 -4
  51. package/packages/config-prettier/plugins/jsdoc.js +17 -2
  52. package/packages/config-prettier/plugins/mdc.js +17 -2
  53. package/packages/config-prettier/plugins/packagejson.js +17 -4
  54. package/packages/config-prettier/plugins/php.js +17 -4
  55. package/packages/config-prettier/plugins/pug.js +17 -2
  56. package/packages/config-prettier/plugins/ruby.js +17 -11
  57. package/packages/config-prettier/plugins/sh.js +17 -4
  58. package/packages/config-prettier/plugins/solidity.js +17 -4
  59. package/packages/config-prettier/plugins/sort-json.js +17 -2
  60. package/packages/config-prettier/plugins/sql.js +17 -4
  61. package/packages/config-prettier/plugins/tailwindcss.js +17 -2
  62. package/packages/config-prettier/plugins/xml.js +17 -2
  63. package/packages/config-prettier/utils/merge-configs.js +18 -0
  64. package/packages/config-stylelint/README.md +182 -44
  65. package/packages/config-stylelint/index.d.ts +56 -0
  66. package/packages/config-stylelint/index.js +161 -165
  67. package/packages/config-stylelint/package.json +5 -2
  68. package/packages/config-stylelint/plugins/a11y.js +13 -6
  69. package/packages/config-stylelint/plugins/bem.js +14 -6
  70. package/packages/config-stylelint/plugins/color-format.js +14 -2
  71. package/packages/config-stylelint/plugins/declaration-block-no-ignored-properties.js +14 -5
  72. package/packages/config-stylelint/plugins/gamut.js +13 -5
  73. package/packages/config-stylelint/plugins/high-performance-animation.js +15 -6
  74. package/packages/config-stylelint/plugins/logical-css.js +13 -5
  75. package/packages/config-stylelint/plugins/media-use-custom-media.js +14 -5
  76. package/packages/config-stylelint/plugins/no-indistinguishable-colors.js +14 -5
  77. package/packages/config-stylelint/plugins/no-nested-media.js +13 -5
  78. package/packages/config-stylelint/plugins/no-unresolved-module.js +15 -6
  79. package/packages/config-stylelint/plugins/no-unsupported-browser-features.js +15 -6
  80. package/packages/config-stylelint/plugins/order.js +14 -6
  81. package/packages/config-stylelint/plugins/prettier.js +13 -5
  82. package/packages/config-stylelint/plugins/scss.js +13 -6
  83. package/packages/config-stylelint/plugins/selector-no-empty.js +14 -5
  84. package/packages/config-stylelint/plugins/use-nesting.js +13 -5
  85. package/packages/config-stylelint/plugins/vue.js +10 -2
  86. package/packages/config-stylelint/utils/merge-configs.js +20 -0
  87. package/prettier.config.js +15 -7
  88. package/scripts/semver.sh +3 -3
  89. package/stylelint.config.js +25 -11
  90. package/packages/config-eslint/_legacy/LICENSE +0 -20
  91. package/packages/config-eslint/_legacy/README.md +0 -48
  92. package/packages/config-eslint/_legacy/constants/allow-boolean-property-list.js +0 -38
  93. package/packages/config-eslint/_legacy/constants/boolean-prefixes.js +0 -11
  94. package/packages/config-eslint/_legacy/constants/english-verbs.js +0 -3368
  95. package/packages/config-eslint/_legacy/dictionaries/index.js +0 -467
  96. package/packages/config-eslint/_legacy/dictionaries/programming/bash.js +0 -25
  97. package/packages/config-eslint/_legacy/dictionaries/programming/django.js +0 -2345
  98. package/packages/config-eslint/_legacy/dictionaries/programming/elixir.js +0 -64
  99. package/packages/config-eslint/_legacy/dictionaries/programming/go.js +0 -7748
  100. package/packages/config-eslint/_legacy/dictionaries/programming/java.js +0 -33527
  101. package/packages/config-eslint/_legacy/dictionaries/programming/latex.js +0 -675
  102. package/packages/config-eslint/_legacy/dictionaries/programming/lua.js +0 -394
  103. package/packages/config-eslint/_legacy/dictionaries/programming/php.js +0 -9788
  104. package/packages/config-eslint/_legacy/dictionaries/programming/python.js +0 -367
  105. package/packages/config-eslint/_legacy/dictionaries/programming/ruby.js +0 -357
  106. package/packages/config-eslint/_legacy/dictionaries/programming/rust.js +0 -115
  107. package/packages/config-eslint/_legacy/dictionaries/programming/scala.js +0 -2755
  108. package/packages/config-eslint/_legacy/dictionaries/specialized/html-symbol-entities.js +0 -1118
  109. package/packages/config-eslint/_legacy/dictionaries/specialized/lorem-ipsum.js +0 -359
  110. package/packages/config-eslint/_legacy/index.js +0 -12
  111. package/packages/config-eslint/_legacy/legacy.js +0 -3
  112. package/packages/config-eslint/_legacy/package.json +0 -97
  113. package/packages/config-eslint/_legacy/plugins/array-func.js +0 -20
  114. package/packages/config-eslint/_legacy/plugins/compat.js +0 -7
  115. package/packages/config-eslint/_legacy/plugins/decorator-position.js +0 -15
  116. package/packages/config-eslint/_legacy/plugins/eslint-comments.js +0 -9
  117. package/packages/config-eslint/_legacy/plugins/etc.js +0 -13
  118. package/packages/config-eslint/_legacy/plugins/ext.js +0 -12
  119. package/packages/config-eslint/_legacy/plugins/filenames.js +0 -38
  120. package/packages/config-eslint/_legacy/plugins/import.js +0 -133
  121. package/packages/config-eslint/_legacy/plugins/jsdoc.js +0 -32
  122. package/packages/config-eslint/_legacy/plugins/jsx-a11y.js +0 -5
  123. package/packages/config-eslint/_legacy/plugins/lit-a11y.js +0 -5
  124. package/packages/config-eslint/_legacy/plugins/lit.js +0 -9
  125. package/packages/config-eslint/_legacy/plugins/more.js +0 -17
  126. package/packages/config-eslint/_legacy/plugins/no-await-in-promise.js +0 -5
  127. package/packages/config-eslint/_legacy/plugins/no-constructor-bind.js +0 -8
  128. package/packages/config-eslint/_legacy/plugins/no-explicit-type-exports.js +0 -7
  129. package/packages/config-eslint/_legacy/plugins/no-loops.js +0 -7
  130. package/packages/config-eslint/_legacy/plugins/no-secrets.js +0 -12
  131. package/packages/config-eslint/_legacy/plugins/no-use-extend-native.js +0 -5
  132. package/packages/config-eslint/_legacy/plugins/node.js +0 -5
  133. package/packages/config-eslint/_legacy/plugins/prettier.js +0 -24
  134. package/packages/config-eslint/_legacy/plugins/promise.js +0 -10
  135. package/packages/config-eslint/_legacy/plugins/regexp.js +0 -7
  136. package/packages/config-eslint/_legacy/plugins/security.js +0 -10
  137. package/packages/config-eslint/_legacy/plugins/simple-import-sort.js +0 -7
  138. package/packages/config-eslint/_legacy/plugins/sonar.js +0 -5
  139. package/packages/config-eslint/_legacy/plugins/sort-class-members.js +0 -298
  140. package/packages/config-eslint/_legacy/plugins/sort-destructure-keys.js +0 -10
  141. package/packages/config-eslint/_legacy/plugins/sort-keys-fix.js +0 -7
  142. package/packages/config-eslint/_legacy/plugins/spellcheck.js +0 -9
  143. package/packages/config-eslint/_legacy/plugins/sql.js +0 -26
  144. package/packages/config-eslint/_legacy/plugins/tanstack-query.js +0 -4
  145. package/packages/config-eslint/_legacy/plugins/testing-library.js +0 -9
  146. package/packages/config-eslint/_legacy/plugins/typescript-sort-keys.js +0 -5
  147. package/packages/config-eslint/_legacy/plugins/typescript.js +0 -157
  148. package/packages/config-eslint/_legacy/plugins/unicorn.js +0 -70
  149. package/packages/config-eslint/_legacy/plugins/unused-imports.js +0 -17
  150. package/packages/config-eslint/_legacy/plugins/vitest.js +0 -16
  151. package/packages/config-eslint/_legacy/plugins/vue-i18n.js +0 -34
  152. package/packages/config-eslint/_legacy/plugins/vue.js +0 -291
  153. package/packages/config-eslint/_legacy/plugins/vuejs-accessibility.js +0 -20
  154. package/packages/config-eslint/_legacy/plugins/wc.js +0 -5
  155. package/packages/config-eslint/_legacy/plugins/write-good-comments.js +0 -7
  156. package/packages/config-eslint/_legacy/utils/create-config.js +0 -377
  157. package/packages/config-eslint/_legacy/utils/extend-spell-checker.js +0 -23
@@ -1,4 +1,17 @@
1
- /** @see [prettier-plugin-solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) */
2
- export default {
3
- plugins: ['prettier-plugin-solidity'],
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
- /** @see [prettier-plugin-sort-json](https://github.com/Gudahtt/prettier-plugin-sort-json) */
2
- export default {
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
- /** @see [prettier-plugin-sql](https://github.com/un-ts/prettier/tree/master/packages/sql) */
2
- export default {
3
- plugins: ['prettier-plugin-sql'],
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
- /** @see [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) */
2
- export default {
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
- /** @see [plugin-xml](https://github.com/prettier/plugin-xml) */
2
- export default {
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
- # StyleLint Configuration
1
+ # Stylelint Configuration
2
2
 
3
- ## Installation
3
+ [![version](https://npmx.dev/api/registry/badge/version/@alexlit/config-stylelint)](https://www.npmjs.com/package/@alexlit/config-stylelint)
4
+ [![downloads](https://npmx.dev/api/registry/badge/downloads/@alexlit/config-stylelint)](https://npmx.dev/package/@alexlit/config-stylelint)
5
+ [![license](https://npmx.dev/api/registry/badge/license/@alexlit/config-stylelint)](LICENSE)
4
6
 
5
- ```sh
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
- ## Connection
22
+ ## Быстрый старт
10
23
 
11
- - Default
12
- ([see plugins enabled by default](https://github.com/alex-lit/lint-kit/blob/master/packages/config-stylelint/index.js))
24
+ ```js
25
+ // stylelint.config.js
26
+ import { defineConfig, plugins } from '@alexlit/config-stylelint';
13
27
 
14
- ```js
15
- // stylelint.config.js
16
- import { createConfig } from '@alexlit/config-stylelint';
28
+ export default defineConfig([
29
+ plugins.scss(),
30
+ plugins.vue(),
17
31
 
18
- export default createConfig();
19
- ```
32
+ plugins.prettier(),
33
+ ]);
34
+ ```
20
35
 
21
- - Custom
22
-
23
- ```js
24
- // stylelint.config.js
25
- import { createConfig } from '@alexlit/config-stylelint';
26
-
27
- export default createConfig(
28
- {
29
- // disable some default plugins
30
- 'no-nested-media': false,
31
-
32
- // enable some optional plugins
33
- 'gamut': true,
34
- 'logical-css': true,
35
- },
36
- {
37
- // add custom rules
38
- rules: {
39
- 'custom-property-empty-line-before': [
40
- 'always',
41
- {
42
- except: ['after-comment', 'after-custom-property', 'first-nested'],
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
- ## Development
188
+ ## Разработка
51
189
 
52
- - Check rules
190
+ - Проверка актуальности правил:
53
191
 
54
- ```sh
192
+ ```bash
55
193
  npx stylelint-find-new-rules
56
194
  ```
57
195
 
58
- ## Useful links
196
+ ## Полезные ссылки
59
197
 
60
- - [Awesome StyleLint](https://github.com/stylelint/awesome-stylelint)
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 };