@alexlit/lint-kit 214.3.0 → 215.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 (155) hide show
  1. package/README.md +27 -22
  2. package/eslint.config.js +23 -56
  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 +156 -106
  7. package/packages/config-eslint/base.js +5 -3
  8. package/packages/config-eslint/index.d.ts +112 -0
  9. package/packages/config-eslint/index.js +79 -23
  10. package/packages/config-eslint/package.json +21 -18
  11. package/packages/config-eslint/plugins/de-morgan.js +9 -4
  12. package/packages/config-eslint/plugins/import-x.js +50 -37
  13. package/packages/config-eslint/plugins/javascript.js +96 -85
  14. package/packages/config-eslint/plugins/jsdoc.js +24 -17
  15. package/packages/config-eslint/plugins/json.js +31 -24
  16. package/packages/config-eslint/plugins/perfectionist.js +108 -95
  17. package/packages/config-eslint/plugins/pinia.js +17 -10
  18. package/packages/config-eslint/plugins/prettier.js +24 -10
  19. package/packages/config-eslint/plugins/regexp.js +16 -9
  20. package/packages/config-eslint/plugins/sonar.js +19 -12
  21. package/packages/config-eslint/plugins/stylistic.js +107 -100
  22. package/packages/config-eslint/plugins/tailwindcss.js +17 -6
  23. package/packages/config-eslint/plugins/tanstack-query.js +16 -9
  24. package/packages/config-eslint/plugins/typescript-type-checked.js +38 -33
  25. package/packages/config-eslint/plugins/typescript.js +23 -14
  26. package/packages/config-eslint/plugins/unicorn.js +73 -64
  27. package/packages/config-eslint/plugins/unocss.js +12 -5
  28. package/packages/config-eslint/plugins/vitest.js +20 -13
  29. package/packages/config-eslint/plugins/vue-accessibility.js +22 -13
  30. package/packages/config-eslint/plugins/vue-i18n.js +38 -31
  31. package/packages/config-eslint/plugins/vue.js +255 -242
  32. package/packages/config-eslint/plugins/zod.js +17 -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 +106 -23
  48. package/packages/config-prettier/index.d.ts +92 -0
  49. package/packages/config-prettier/index.js +60 -74
  50. package/packages/config-prettier/package.json +5 -4
  51. package/packages/config-prettier/plugins/jsdoc.js +12 -3
  52. package/packages/config-prettier/plugins/mdc.js +12 -3
  53. package/packages/config-prettier/plugins/packagejson.js +12 -3
  54. package/packages/config-prettier/plugins/php.js +12 -3
  55. package/packages/config-prettier/plugins/pug.js +12 -3
  56. package/packages/config-prettier/plugins/ruby.js +10 -10
  57. package/packages/config-prettier/plugins/sh.js +12 -3
  58. package/packages/config-prettier/plugins/solidity.js +12 -3
  59. package/packages/config-prettier/plugins/sort-json.js +12 -3
  60. package/packages/config-prettier/plugins/sql.js +12 -3
  61. package/packages/config-prettier/plugins/tailwindcss.js +12 -3
  62. package/packages/config-prettier/plugins/xml.js +12 -3
  63. package/packages/config-stylelint/README.md +131 -44
  64. package/packages/config-stylelint/index.d.ts +52 -0
  65. package/packages/config-stylelint/index.js +169 -165
  66. package/packages/config-stylelint/package.json +3 -1
  67. package/packages/config-stylelint/plugins/a11y.js +24 -11
  68. package/packages/config-stylelint/plugins/bem.js +10 -3
  69. package/packages/config-stylelint/plugins/color-format.js +14 -4
  70. package/packages/config-stylelint/plugins/declaration-block-no-ignored-properties.js +15 -4
  71. package/packages/config-stylelint/plugins/gamut.js +12 -4
  72. package/packages/config-stylelint/plugins/high-performance-animation.js +12 -3
  73. package/packages/config-stylelint/plugins/logical-css.js +10 -3
  74. package/packages/config-stylelint/plugins/media-use-custom-media.js +12 -4
  75. package/packages/config-stylelint/plugins/no-indistinguishable-colors.js +15 -4
  76. package/packages/config-stylelint/plugins/no-nested-media.js +12 -4
  77. package/packages/config-stylelint/plugins/no-unresolved-module.js +12 -3
  78. package/packages/config-stylelint/plugins/no-unsupported-browser-features.js +12 -3
  79. package/packages/config-stylelint/plugins/order.js +13 -3
  80. package/packages/config-stylelint/plugins/prettier.js +12 -4
  81. package/packages/config-stylelint/plugins/scss.js +13 -3
  82. package/packages/config-stylelint/plugins/selector-no-empty.js +12 -4
  83. package/packages/config-stylelint/plugins/use-nesting.js +15 -4
  84. package/packages/config-stylelint/plugins/vue.js +11 -2
  85. package/prettier.config.js +15 -7
  86. package/scripts/semver.sh +3 -3
  87. package/stylelint.config.js +25 -11
  88. package/packages/config-eslint/_legacy/LICENSE +0 -20
  89. package/packages/config-eslint/_legacy/README.md +0 -48
  90. package/packages/config-eslint/_legacy/constants/allow-boolean-property-list.js +0 -38
  91. package/packages/config-eslint/_legacy/constants/boolean-prefixes.js +0 -11
  92. package/packages/config-eslint/_legacy/constants/english-verbs.js +0 -3368
  93. package/packages/config-eslint/_legacy/dictionaries/index.js +0 -467
  94. package/packages/config-eslint/_legacy/dictionaries/programming/bash.js +0 -25
  95. package/packages/config-eslint/_legacy/dictionaries/programming/django.js +0 -2345
  96. package/packages/config-eslint/_legacy/dictionaries/programming/elixir.js +0 -64
  97. package/packages/config-eslint/_legacy/dictionaries/programming/go.js +0 -7748
  98. package/packages/config-eslint/_legacy/dictionaries/programming/java.js +0 -33527
  99. package/packages/config-eslint/_legacy/dictionaries/programming/latex.js +0 -675
  100. package/packages/config-eslint/_legacy/dictionaries/programming/lua.js +0 -394
  101. package/packages/config-eslint/_legacy/dictionaries/programming/php.js +0 -9788
  102. package/packages/config-eslint/_legacy/dictionaries/programming/python.js +0 -367
  103. package/packages/config-eslint/_legacy/dictionaries/programming/ruby.js +0 -357
  104. package/packages/config-eslint/_legacy/dictionaries/programming/rust.js +0 -115
  105. package/packages/config-eslint/_legacy/dictionaries/programming/scala.js +0 -2755
  106. package/packages/config-eslint/_legacy/dictionaries/specialized/html-symbol-entities.js +0 -1118
  107. package/packages/config-eslint/_legacy/dictionaries/specialized/lorem-ipsum.js +0 -359
  108. package/packages/config-eslint/_legacy/index.js +0 -12
  109. package/packages/config-eslint/_legacy/legacy.js +0 -3
  110. package/packages/config-eslint/_legacy/package.json +0 -97
  111. package/packages/config-eslint/_legacy/plugins/array-func.js +0 -20
  112. package/packages/config-eslint/_legacy/plugins/compat.js +0 -7
  113. package/packages/config-eslint/_legacy/plugins/decorator-position.js +0 -15
  114. package/packages/config-eslint/_legacy/plugins/eslint-comments.js +0 -9
  115. package/packages/config-eslint/_legacy/plugins/etc.js +0 -13
  116. package/packages/config-eslint/_legacy/plugins/ext.js +0 -12
  117. package/packages/config-eslint/_legacy/plugins/filenames.js +0 -38
  118. package/packages/config-eslint/_legacy/plugins/import.js +0 -133
  119. package/packages/config-eslint/_legacy/plugins/jsdoc.js +0 -32
  120. package/packages/config-eslint/_legacy/plugins/jsx-a11y.js +0 -5
  121. package/packages/config-eslint/_legacy/plugins/lit-a11y.js +0 -5
  122. package/packages/config-eslint/_legacy/plugins/lit.js +0 -9
  123. package/packages/config-eslint/_legacy/plugins/more.js +0 -17
  124. package/packages/config-eslint/_legacy/plugins/no-await-in-promise.js +0 -5
  125. package/packages/config-eslint/_legacy/plugins/no-constructor-bind.js +0 -8
  126. package/packages/config-eslint/_legacy/plugins/no-explicit-type-exports.js +0 -7
  127. package/packages/config-eslint/_legacy/plugins/no-loops.js +0 -7
  128. package/packages/config-eslint/_legacy/plugins/no-secrets.js +0 -12
  129. package/packages/config-eslint/_legacy/plugins/no-use-extend-native.js +0 -5
  130. package/packages/config-eslint/_legacy/plugins/node.js +0 -5
  131. package/packages/config-eslint/_legacy/plugins/prettier.js +0 -24
  132. package/packages/config-eslint/_legacy/plugins/promise.js +0 -10
  133. package/packages/config-eslint/_legacy/plugins/regexp.js +0 -7
  134. package/packages/config-eslint/_legacy/plugins/security.js +0 -10
  135. package/packages/config-eslint/_legacy/plugins/simple-import-sort.js +0 -7
  136. package/packages/config-eslint/_legacy/plugins/sonar.js +0 -5
  137. package/packages/config-eslint/_legacy/plugins/sort-class-members.js +0 -298
  138. package/packages/config-eslint/_legacy/plugins/sort-destructure-keys.js +0 -10
  139. package/packages/config-eslint/_legacy/plugins/sort-keys-fix.js +0 -7
  140. package/packages/config-eslint/_legacy/plugins/spellcheck.js +0 -9
  141. package/packages/config-eslint/_legacy/plugins/sql.js +0 -26
  142. package/packages/config-eslint/_legacy/plugins/tanstack-query.js +0 -4
  143. package/packages/config-eslint/_legacy/plugins/testing-library.js +0 -9
  144. package/packages/config-eslint/_legacy/plugins/typescript-sort-keys.js +0 -5
  145. package/packages/config-eslint/_legacy/plugins/typescript.js +0 -157
  146. package/packages/config-eslint/_legacy/plugins/unicorn.js +0 -70
  147. package/packages/config-eslint/_legacy/plugins/unused-imports.js +0 -17
  148. package/packages/config-eslint/_legacy/plugins/vitest.js +0 -16
  149. package/packages/config-eslint/_legacy/plugins/vue-i18n.js +0 -34
  150. package/packages/config-eslint/_legacy/plugins/vue.js +0 -291
  151. package/packages/config-eslint/_legacy/plugins/vuejs-accessibility.js +0 -20
  152. package/packages/config-eslint/_legacy/plugins/wc.js +0 -5
  153. package/packages/config-eslint/_legacy/plugins/write-good-comments.js +0 -7
  154. package/packages/config-eslint/_legacy/utils/create-config.js +0 -377
  155. package/packages/config-eslint/_legacy/utils/extend-spell-checker.js +0 -23
@@ -1,37 +1,120 @@
1
+ [![version](https://npmx.dev/api/registry/badge/version/@alexlit/config-prettier)](https://www.npmjs.com/package/@alexlit/config-prettier)
2
+ [![downloads](https://npmx.dev/api/registry/badge/downloads/@alexlit/config-prettier)](https://npmx.dev/package/@alexlit/config-prettier)
3
+ [![license](https://npmx.dev/api/registry/badge/license/@alexlit/config-prettier)](LICENSE)
4
+
1
5
  # Prettier Configuration
2
6
 
3
- ## Installation
7
+ Готовая конфигурация [Prettier](https://prettier.io/) с плагинами для
8
+ форматирования языков и форматов, которых Prettier не поддерживает из коробки
9
+ (PHP, SQL, шаблоны, shell-скрипты и т.д.), а также расширений для сортировки
10
+ JSON и утилит Tailwind CSS. Вместо того чтобы подключать и настраивать каждый
11
+ плагин вручную, соберите конфигурацию из готовых модулей.
12
+
13
+ Плагины модульные: по умолчанию ничего не включено - вы сами перечисляете нужные
14
+ в `defineConfig`.
15
+
16
+ ## Установка
4
17
 
5
- ```sh
18
+ ```bash
6
19
  npm i @alexlit/config-prettier -D
7
20
  ```
8
21
 
9
- ## Connection
22
+ ## Быстрый старт
23
+
24
+ ```js
25
+ // prettier.config.js
26
+ import { defineConfig, plugins } from '@alexlit/config-prettier';
27
+
28
+ export default defineConfig([plugins.packageJson(), plugins.xml()]);
29
+ ```
30
+
31
+ Каждый вызов `plugins.*()` - отдельный плагин. Добавьте только то, что нужно
32
+ проекту; полный список - в разделе [Плагины](#плагины).
33
+
34
+ Больше плагинов - просто допишите их в массив:
35
+
36
+ ```js
37
+ // prettier.config.js
38
+ import { defineConfig, plugins } from '@alexlit/config-prettier';
39
+
40
+ export default defineConfig([
41
+ plugins.jsdoc(),
42
+ plugins.mdc(),
43
+ plugins.packageJson(),
44
+ plugins.php(),
45
+ plugins.pug(),
46
+ plugins.ruby(),
47
+ plugins.sh(),
48
+ plugins.sortJson(),
49
+ plugins.solidity(),
50
+ plugins.sql(),
51
+ plugins.tailwindcss(),
52
+ plugins.xml(),
53
+ ]);
54
+ ```
55
+
56
+ ## Настройка
57
+
58
+ ### Настройки конкретного плагина
59
+
60
+ Чтобы переопределить настройки одного плагина, передайте объект в его вызов:
61
+
62
+ ```js
63
+ // prettier.config.js
64
+ import { defineConfig, plugins } from '@alexlit/config-prettier';
65
+
66
+ export default defineConfig([
67
+ plugins.sortJson({ jsonRecursiveSort: false }),
68
+ plugins.tailwindcss({ tailwindFunctions: ['cn', 'cva'] }),
69
+ ]);
70
+ ```
71
+
72
+ ### Общие настройки Prettier
73
+
74
+ Второй аргумент `defineConfig` - общие опции Prettier. Он перебивает настройки
75
+ всех плагинов:
76
+
77
+ ```js
78
+ // prettier.config.js
79
+ import { defineConfig, plugins } from '@alexlit/config-prettier';
80
+
81
+ export default defineConfig([plugins.php()], {
82
+ printWidth: 100,
83
+ singleQuote: false,
84
+ });
85
+ ```
10
86
 
11
- - Default
12
- ([see plugins enabled by default](https://github.com/alex-lit/lint-kit/blob/master/packages/config-prettier/index.js#L5))
87
+ ## Плагины
13
88
 
14
- ```js
15
- // prettier.config.js
16
- import { createConfig } from '@alexlit/config-prettier';
89
+ | Плагин | Что делает | Пакет |
90
+ | ----------------------- | ----------------------------------------------- | ------------------------------------------------- |
91
+ | `plugins.jsdoc()` | Нормализует JSDoc-комментарии | `prettier-plugin-jsdoc` |
92
+ | `plugins.mdc()` | Форматирует MDC-документы (Nuxt Content) | `prettier-plugin-mdc` |
93
+ | `plugins.packageJson()` | Сортирует ключи в package.json | `prettier-plugin-packagejson` |
94
+ | `plugins.php()` | Форматирует PHP-файлы | `@prettier/plugin-php` |
95
+ | `plugins.pug()` | Форматирует Pug-шаблоны с сортировкой атрибутов | `@prettier/plugin-pug` |
96
+ | `plugins.ruby()` | Форматирует Ruby и ERB файлы | `@prettier/plugin-ruby` + `prettier-plugin-eruby` |
97
+ | `plugins.sh()` | Форматирует shell-скрипты | `prettier-plugin-sh` |
98
+ | `plugins.sortJson()` | Рекурсивно сортирует ключи JSON-объектов | `prettier-plugin-sort-json` |
99
+ | `plugins.solidity()` | Форматирует контракты Solidity | `prettier-plugin-solidity` |
100
+ | `plugins.sql()` | Форматирует SQL-запросы | `prettier-plugin-sql` |
101
+ | `plugins.tailwindcss()` | Сортирует утилитарные классы Tailwind CSS | `prettier-plugin-tailwindcss` |
102
+ | `plugins.xml()` | Форматирует XML-файлы | `@prettier/plugin-xml` |
17
103
 
18
- export default createConfig();
19
- ```
104
+ ## Миграция с v23
20
105
 
21
- - Custom
106
+ v24 - breaking-релиз: плагинов по умолчанию больше нет, всё подключается явно.
22
107
 
23
- ```js
24
- // prettier.config.js
25
- import { createConfig } from '@alexlit/config-prettier';
108
+ | v23 | v24 |
109
+ | ------------------------------ | --------------------------------------------- |
110
+ | `createConfig()` | перечислите нужные плагины явно |
111
+ | `createConfig({ php: true })` | `defineConfig([plugins.php()])` |
112
+ | `createConfig({ sql: false })` | просто не добавляйте `plugins.sql()` в список |
113
+ | `createConfig({}, options)` | `defineConfig([...], options)` |
26
114
 
27
- export default createConfig({
28
- php: true,
29
- ruby: true,
30
- sql: false,
31
- tailwindcss: false,
32
- });
33
- ```
115
+ Плагины, включённые по умолчанию в v23: `jsdoc`, `mdc`, `packagejson`, `pug`,
116
+ `sh`, `solidity`, `sort-json`, `xml`.
34
117
 
35
- ## Issues
118
+ ## Известные проблемы
36
119
 
37
- - **tailwindcss** conflicts with **jsdoc**
120
+ - **tailwindcss** ранее конфликтовал с **jsdoc**
@@ -0,0 +1,92 @@
1
+ import type { Config } from 'prettier';
2
+
3
+ /**
4
+ * Options of
5
+ * [prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc)
6
+ */
7
+ export interface JsdocOptions {
8
+ jsdocCommentLineStrategy?: 'fallback' | 'multiLine' | 'singleLine';
9
+ jsdocSeparateReturnsFromParam?: boolean;
10
+ jsdocSeparateTagGroups?: boolean;
11
+ }
12
+
13
+ /**
14
+ * Plugin factories. Every plugin is connected explicitly: pass
15
+ * `plugins.<name>()` to `defineConfig`
16
+ */
17
+ export interface Plugins {
18
+ /** @see prettier-plugin-jsdoc */
19
+ jsdoc(options?: Config & JsdocOptions): Config;
20
+ /** @see prettier-plugin-mdc */
21
+ mdc(options?: Config): Config;
22
+ /** @see prettier-plugin-packagejson */
23
+ packageJson(options?: Config): Config;
24
+ /** @see plugin-php */
25
+ php(options?: Config): Config;
26
+ /** @see plugin-pug */
27
+ pug(options?: Config & PugOptions): Config;
28
+ /** @see plugin-ruby */
29
+ ruby(options?: Config): Config;
30
+ /** @see prettier-plugin-sh */
31
+ sh(options?: Config): Config;
32
+ /** @see prettier-plugin-solidity */
33
+ solidity(options?: Config): Config;
34
+ /** @see prettier-plugin-sort-json */
35
+ sortJson(options?: Config & SortJsonOptions): Config;
36
+ /** @see prettier-plugin-sql */
37
+ sql(options?: Config): Config;
38
+ /** @see prettier-plugin-tailwindcss */
39
+ tailwindcss(options?: Config & TailwindcssOptions): Config;
40
+ /** @see plugin-xml */
41
+ xml(options?: Config & XmlOptions): Config;
42
+ }
43
+
44
+ /** Options of [plugin-pug](https://github.com/prettier/plugin-pug) */
45
+ export interface PugOptions {
46
+ pugCommentPreserveSpaces?: string;
47
+ pugSingleQuote?: boolean;
48
+ pugSortAttributes?: 'asc' | 'desc' | 'natural' | false;
49
+ pugWrapAttributesThreshold?: number;
50
+ }
51
+
52
+ /**
53
+ * Options of
54
+ * [prettier-plugin-sort-json](https://github.com/Gudahtt/prettier-plugin-sort-json)
55
+ */
56
+ export interface SortJsonOptions {
57
+ jsonRecursiveSort?: boolean;
58
+ }
59
+
60
+ /**
61
+ * Options of
62
+ * [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss)
63
+ */
64
+ export interface TailwindcssOptions {
65
+ tailwindFunctions?: string[];
66
+ }
67
+
68
+ /** Options of [plugin-xml](https://github.com/prettier/plugin-xml) */
69
+ export interface XmlOptions {
70
+ xmlWhitespaceSensitivity?: 'ignore' | 'preserve' | 'strict';
71
+ }
72
+
73
+ export declare const plugins: Plugins;
74
+
75
+ /**
76
+ * Create prettier config
77
+ *
78
+ * There are no default plugins - connect the required ones explicitly:
79
+ *
80
+ * ```js
81
+ * defineConfig([plugins.php(), plugins.tailwindcss()], {
82
+ * printWidth: 100,
83
+ * });
84
+ * ```
85
+ *
86
+ * @param pluginConfigs Plugin configs, e.g. `[plugins.php()]`
87
+ * @param options Base prettier options (highest precedence)
88
+ */
89
+ export declare function defineConfig(
90
+ pluginConfigs?: Config[],
91
+ options?: Config,
92
+ ): Config;
@@ -1,87 +1,62 @@
1
- import { omit } from 'radash';
2
-
3
- const DEFAULT_PLUGINS = {
4
- 'jsdoc': true,
5
- 'mdc': true,
6
- 'packagejson': true,
7
- 'pug': true,
8
- 'sh': true,
9
- 'solidity': true,
10
- 'sort-json': true,
11
- 'xml': true,
12
- };
13
-
14
- const OPTIONAL_PLUGINS = {
15
- php: false,
16
- ruby: false,
17
- sql: false,
18
- tailwindcss: false,
19
- };
20
-
21
- const PLUGINS = { ...DEFAULT_PLUGINS, ...OPTIONAL_PLUGINS };
1
+ import { jsdoc } from './plugins/jsdoc.js';
2
+ import { mdc } from './plugins/mdc.js';
3
+ import { packageJson } from './plugins/packagejson.js';
4
+ import { php } from './plugins/php.js';
5
+ import { pug } from './plugins/pug.js';
6
+ import { ruby } from './plugins/ruby.js';
7
+ import { sh } from './plugins/sh.js';
8
+ import { solidity } from './plugins/solidity.js';
9
+ import { sortJson } from './plugins/sort-json.js';
10
+ import { sql } from './plugins/sql.js';
11
+ import { tailwindcss } from './plugins/tailwindcss.js';
12
+ import { xml } from './plugins/xml.js';
22
13
 
23
14
  /**
24
- * Create plugins config list
25
- *
26
- * @param {PLUGINS} plugins Enabled/disabled plugins list
27
- *
28
- * @returns {import('prettier').Config} Prettier configuration
15
+ * Фабрики плагинов. Каждый плагин подключается явно: передайте
16
+ * `plugins.<name>()` в `defineConfig`
29
17
  */
30
- const createPluginsConfig = async (plugins = {}) => {
31
- const pluginEntries = Object.entries({ ...PLUGINS, ...plugins });
32
-
33
- const configs = await Promise.all(
34
- pluginEntries
35
- .filter(([, isActive]) => isActive)
36
- .map(async ([name]) => {
37
- const { default: config } = await import(
38
- `@alexlit/config-prettier/plugins/${name}.js`
39
- );
40
-
41
- return config;
42
- }),
43
- );
44
-
45
- let pluginsConfig = { overrides: [], plugins: [] };
46
-
47
- configs.forEach((config) => {
48
- if (config.plugins?.length > 0) {
49
- pluginsConfig.plugins.push(...config.plugins);
50
- }
51
-
52
- if (config.overrides?.length > 0) {
53
- pluginsConfig.overrides.push(...config.overrides);
54
- }
55
-
56
- pluginsConfig = {
57
- ...pluginsConfig,
58
- ...omit(config, ['plugins', 'overrides']),
59
- };
60
- });
61
-
62
- return pluginsConfig;
18
+ export const plugins = {
19
+ jsdoc,
20
+ mdc,
21
+ packageJson,
22
+ php,
23
+ pug,
24
+ ruby,
25
+ sh,
26
+ solidity,
27
+ sortJson,
28
+ sql,
29
+ tailwindcss,
30
+ xml,
63
31
  };
64
32
 
65
33
  /**
66
- * Create prettier config
34
+ * Создать конфигурацию Prettier
35
+ *
36
+ * Плагинов по умолчанию нет - подключайте нужные явно:
67
37
  *
68
- * @param {PLUGINS} plugins
69
- * @param {import('prettier').Config} options Prettier options
38
+ * ```js
39
+ * defineConfig(
40
+ * [
41
+ * plugins.php(),
42
+ * plugins.tailwindcss({ tailwindFunctions: ['cn', 'tw'] }),
43
+ * ],
44
+ * { printWidth: 100 },
45
+ * );
46
+ * ```
70
47
  *
71
- * @returns {import('prettier').Config} Prettier configuration
48
+ * @param {import('prettier').Config[]} pluginConfigs Конфиги плагинов, напр.
49
+ * `[plugins.php()]`
50
+ * @param {import('prettier').Config} options Базовые опции Prettier (наивысший
51
+ * приоритет)
52
+ *
53
+ * @returns {import('prettier').Config} Конфигурация Prettier
72
54
  */
73
- export const createConfig = async (plugins = {}, options = {}) => {
74
- const pluginsConfig = await createPluginsConfig(plugins);
75
-
76
- return {
55
+ export const defineConfig = (pluginConfigs = [], options = {}) => {
56
+ const config = {
77
57
  bracketSameLine: false,
78
58
  endOfLine: 'lf',
79
59
  objectWrap: 'collapse',
80
- overrides: [
81
- ...(pluginsConfig.overrides ?? []),
82
- ...(options.overrides ?? []),
83
- ],
84
- plugins: [...(pluginsConfig.plugins ?? []), ...(options.plugins ?? [])],
85
60
  proseWrap: 'always',
86
61
  quoteProps: 'consistent',
87
62
  singleAttributePerLine: true,
@@ -90,7 +65,18 @@ export const createConfig = async (plugins = {}, options = {}) => {
90
65
  trailingComma: 'all',
91
66
  vueIndentScriptAndStyle: true,
92
67
 
93
- ...omit(pluginsConfig, ['plugins']),
94
- ...omit(options, ['plugins']),
68
+ // конфиги плагинов перекрывают базовые опции, а пользовательские опции
69
+ // имеют наивысший приоритет
70
+ ...Object.assign({}, ...pluginConfigs, options),
71
+ };
72
+
73
+ const sources = [...pluginConfigs, options];
74
+
75
+ return {
76
+ ...config,
77
+
78
+ // `overrides` и `plugins` конкатенируются, а не заменяются
79
+ overrides: sources.flatMap((source) => source.overrides ?? []),
80
+ plugins: [...new Set(sources.flatMap((source) => source.plugins ?? []))],
95
81
  };
96
82
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alexlit/config-prettier",
3
- "version": "23.2.2",
3
+ "version": "24.1.3",
4
4
  "private": false,
5
5
  "description": "prettier config",
6
6
  "keywords": [
@@ -23,8 +23,10 @@
23
23
  ],
24
24
  "type": "module",
25
25
  "main": "index.js",
26
+ "types": "index.d.ts",
26
27
  "files": [
27
28
  "README.md",
29
+ "index.d.ts",
28
30
  "index.js",
29
31
  "plugins"
30
32
  ],
@@ -35,7 +37,7 @@
35
37
  "up": "../../scripts/up.sh"
36
38
  },
37
39
  "dependencies": {
38
- "@prettier/plugin-php": "^0.25.0",
40
+ "@prettier/plugin-php": "^0.26.0",
39
41
  "@prettier/plugin-pug": "^3.6.0",
40
42
  "@prettier/plugin-ruby": "^4.0.4",
41
43
  "@prettier/plugin-xml": "^3.4.2",
@@ -48,8 +50,7 @@
48
50
  "prettier-plugin-solidity": "^2.4.1",
49
51
  "prettier-plugin-sort-json": "^4.2.0",
50
52
  "prettier-plugin-sql": "^0.20.0",
51
- "prettier-plugin-tailwindcss": "^0.8.1",
52
- "radash": "^12.1.1"
53
+ "prettier-plugin-tailwindcss": "^0.8.1"
53
54
  },
54
55
  "publishConfig": {
55
56
  "access": "public",
@@ -1,7 +1,16 @@
1
- /** @see [prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc) */
2
- export default {
1
+ /**
2
+ * Нормализует JSDoc-комментарии
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc)
9
+ */
10
+ export const jsdoc = (options = {}) => ({
3
11
  jsdocCommentLineStrategy: 'singleLine',
4
12
  jsdocSeparateReturnsFromParam: true,
5
13
  jsdocSeparateTagGroups: true,
6
14
  plugins: ['prettier-plugin-jsdoc'],
7
- };
15
+ ...options,
16
+ });
@@ -1,5 +1,14 @@
1
- /** @see [prettier-plugin-mdc](https://github.com/so1ve/prettier-plugin-mdc) */
2
- export default {
1
+ /**
2
+ * Форматирует MDC-документы (Nuxt Content)
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-mdc](https://github.com/so1ve/prettier-plugin-mdc)
9
+ */
10
+ export const mdc = (options = {}) => ({
3
11
  overrides: [{ files: ['*.md'], options: { parser: 'mdc' } }],
4
12
  plugins: ['prettier-plugin-mdc'],
5
- };
13
+ ...options,
14
+ });
@@ -1,4 +1,13 @@
1
- /** @see [prettier-plugin-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson) */
2
- export default {
1
+ /**
2
+ * Сортирует ключи в package.json
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson)
9
+ */
10
+ export const packageJson = (options = {}) => ({
3
11
  plugins: ['prettier-plugin-packagejson'],
4
- };
12
+ ...options,
13
+ });
@@ -1,4 +1,13 @@
1
- /** @see [plugin-php](https://github.com/prettier/plugin-php) */
2
- export default {
1
+ /**
2
+ * Форматирует PHP-файлы
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [plugin-php](https://github.com/prettier/plugin-php)
9
+ */
10
+ export const php = (options = {}) => ({
3
11
  plugins: ['@prettier/plugin-php'],
4
- };
12
+ ...options,
13
+ });
@@ -1,8 +1,17 @@
1
- /** @see [plugin-pug](https://github.com/prettier/plugin-pug) */
2
- export default {
1
+ /**
2
+ * Форматирует Pug-шаблоны с сортировкой атрибутов и одинарными кавычками
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [plugin-pug](https://github.com/prettier/plugin-pug)
9
+ */
10
+ export const pug = (options = {}) => ({
3
11
  plugins: ['@prettier/plugin-pug'],
4
12
  pugCommentPreserveSpaces: 'trim-all',
5
13
  pugSingleQuote: false,
6
14
  pugSortAttributes: 'asc',
7
15
  pugWrapAttributesThreshold: 3,
8
- };
16
+ ...options,
17
+ });
@@ -1,15 +1,15 @@
1
1
  /**
2
+ * Форматирует Ruby и ERB файлы
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
2
8
  * @see [plugin-ruby](https://github.com/prettier/plugin-ruby)
3
9
  * @see [prettier-plugin-eruby](https://github.com/ippachi/prettier-plugin-eruby)
4
10
  */
5
- export default {
6
- overrides: [
7
- {
8
- files: '*.html.erb',
9
- options: {
10
- parser: 'eruby-parse',
11
- },
12
- },
13
- ],
11
+ export const ruby = (options = {}) => ({
12
+ overrides: [{ files: '*.html.erb', options: { parser: 'eruby-parse' } }],
14
13
  plugins: ['@prettier/plugin-ruby', 'prettier-plugin-eruby'],
15
- };
14
+ ...options,
15
+ });
@@ -1,4 +1,13 @@
1
- /** @see [prettier-plugin-sh](https://github.com/astorije/prettier-plugin-sh) */
2
- export default {
1
+ /**
2
+ * Форматирует shell-скрипты
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-sh](https://github.com/astorije/prettier-plugin-sh)
9
+ */
10
+ export const sh = (options = {}) => ({
3
11
  plugins: ['prettier-plugin-sh'],
4
- };
12
+ ...options,
13
+ });
@@ -1,4 +1,13 @@
1
- /** @see [prettier-plugin-solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) */
2
- export default {
1
+ /**
2
+ * Форматирует контракты Solidity
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-solidity](https://github.com/prettier-solidity/prettier-plugin-solidity)
9
+ */
10
+ export const solidity = (options = {}) => ({
3
11
  plugins: ['prettier-plugin-solidity'],
4
- };
12
+ ...options,
13
+ });
@@ -1,5 +1,14 @@
1
- /** @see [prettier-plugin-sort-json](https://github.com/Gudahtt/prettier-plugin-sort-json) */
2
- export default {
1
+ /**
2
+ * Рекурсивно сортирует ключи JSON-объектов
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-sort-json](https://github.com/Gudahtt/prettier-plugin-sort-json)
9
+ */
10
+ export const sortJson = (options = {}) => ({
3
11
  jsonRecursiveSort: true,
4
12
  plugins: ['prettier-plugin-sort-json'],
5
- };
13
+ ...options,
14
+ });
@@ -1,4 +1,13 @@
1
- /** @see [prettier-plugin-sql](https://github.com/un-ts/prettier/tree/master/packages/sql) */
2
- export default {
1
+ /**
2
+ * Форматирует SQL-запросы
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-sql](https://github.com/un-ts/prettier/tree/master/packages/sql)
9
+ */
10
+ export const sql = (options = {}) => ({
3
11
  plugins: ['prettier-plugin-sql'],
4
- };
12
+ ...options,
13
+ });
@@ -1,5 +1,13 @@
1
- /** @see [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) */
2
- export default {
1
+ /**
2
+ * Сортирует утилитарные классы Tailwind CSS по каноническому порядку
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss)
9
+ */
10
+ export const tailwindcss = (options = {}) => ({
3
11
  plugins: ['prettier-plugin-tailwindcss'],
4
12
  tailwindFunctions: [
5
13
  'classnames',
@@ -11,4 +19,5 @@ export default {
11
19
  'tw',
12
20
  'twMerge',
13
21
  ],
14
- };
22
+ ...options,
23
+ });
@@ -1,5 +1,14 @@
1
- /** @see [plugin-xml](https://github.com/prettier/plugin-xml) */
2
- export default {
1
+ /**
2
+ * Форматирует XML-файлы
3
+ *
4
+ * @param {Partial<import('prettier').Config>} [options]
5
+ *
6
+ * @returns {import('prettier').Config}
7
+ *
8
+ * @see [plugin-xml](https://github.com/prettier/plugin-xml)
9
+ */
10
+ export const xml = (options = {}) => ({
3
11
  plugins: ['@prettier/plugin-xml'],
4
12
  xmlWhitespaceSensitivity: 'ignore',
5
- };
13
+ ...options,
14
+ });