@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,37 +1,172 @@
1
1
  # Prettier Configuration
2
2
 
3
- ## Installation
3
+ [![version](https://npmx.dev/api/registry/badge/version/@alexlit/config-prettier)](https://www.npmjs.com/package/@alexlit/config-prettier)
4
+ [![downloads](https://npmx.dev/api/registry/badge/downloads/@alexlit/config-prettier)](https://npmx.dev/package/@alexlit/config-prettier)
5
+ [![license](https://npmx.dev/api/registry/badge/license/@alexlit/config-prettier)](LICENSE)
4
6
 
5
- ```sh
7
+ Готовая конфигурация [Prettier](https://prettier.io/) с плагинами для
8
+ форматирования языков и форматов, которых Prettier не поддерживает из коробки
9
+ (PHP, SQL, шаблоны, shell-скрипты и т.д.), а также расширений для сортировки
10
+ JSON и утилит Tailwind CSS. Вместо того чтобы подключать и настраивать каждый
11
+ плагин вручную, соберите конфигурацию из готовых модулей.
12
+
13
+ Плагины модульные: по умолчанию ничего не включено - вы сами перечисляете нужные
14
+ в `defineConfig`.
15
+
16
+ ## Установка
17
+
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
+ Скалярные опции заменяют значения плагина, а `plugins` и `overrides` дополняют
73
+ дефолтные списки. Подробнее - в разделе
74
+ [Приоритет настроек](#приоритет-настроек).
75
+
76
+ ### Общие настройки Prettier
77
+
78
+ Второй аргумент `defineConfig` - общие опции Prettier. Он перебивает настройки
79
+ всех плагинов:
80
+
81
+ ```js
82
+ // prettier.config.js
83
+ import { defineConfig, plugins } from '@alexlit/config-prettier';
84
+
85
+ export default defineConfig([plugins.php()], {
86
+ printWidth: 100,
87
+ singleQuote: false,
88
+ });
89
+ ```
90
+
91
+ ### Приоритет настроек
92
+
93
+ Настройки применяются в таком порядке:
94
+
95
+ 1. Базовые опции пакета.
96
+ 2. Конфиги плагинов в порядке массива `defineConfig`.
97
+ 3. Второй аргумент `defineConfig`.
98
+
99
+ Скалярные опции перекрывают друг друга. Коллекции `plugins` и `overrides`
100
+ дополняются, а не заменяются. `plugins` дедуплицируются, поэтому один и тот же
101
+ плагин можно безопасно указать несколько раз.
102
+
103
+ Для `overrides` более позднее правило выигрывает: пользовательские overrides
104
+ идут после дефолтных и перекрывают их при совпадении `files`.
105
+
106
+ ### Правила для отдельных файлов
107
+
108
+ `overrides` из фабрики добавляются к дефолтным. Например, чтобы форматировать
109
+ документацию как обычный Markdown, оставив MDC для остальных файлов:
110
+
111
+ ```js
112
+ // prettier.config.js
113
+ import { defineConfig, plugins } from '@alexlit/config-prettier';
114
+
115
+ export default defineConfig([
116
+ plugins.mdc({
117
+ overrides: [{ files: ['docs/**/*.md'], options: { parser: 'markdown' } }],
118
+ }),
119
+ ]);
120
+ ```
121
+
122
+ Пустой массив `overrides: []` не отключает дефолтные правила. Чтобы
123
+ переопределить поведение, добавьте свой override с теми же `files` - он будет
124
+ применён после дефолтного.
125
+
126
+ ## Плагины
127
+
128
+ | Плагин | Что делает | Пакет |
129
+ | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
130
+ | `plugins.jsdoc()` | Нормализует JSDoc-комментарии | [`prettier-plugin-jsdoc`](https://github.com/hosseinmd/prettier-plugin-jsdoc) |
131
+ | `plugins.mdc()` | Форматирует MDC-документы (Nuxt Content) | [`prettier-plugin-mdc`](https://github.com/so1ve/prettier-plugin-mdc) |
132
+ | `plugins.packageJson()` | Сортирует ключи в package.json | [`prettier-plugin-packagejson`](https://github.com/matzkoh/prettier-plugin-packagejson) |
133
+ | `plugins.php()` | Форматирует PHP-файлы | [`@prettier/plugin-php`](https://github.com/prettier/plugin-php) |
134
+ | `plugins.pug()` | Форматирует Pug-шаблоны с сортировкой атрибутов | [`@prettier/plugin-pug`](https://github.com/prettier/plugin-pug) |
135
+ | `plugins.ruby()` | Форматирует Ruby и ERB файлы | [`@prettier/plugin-ruby`](https://github.com/prettier/plugin-ruby) + [`prettier-plugin-eruby`](https://github.com/ippachi/prettier-plugin-eruby) |
136
+ | `plugins.sh()` | Форматирует shell-скрипты | [`prettier-plugin-sh`](https://github.com/astorije/prettier-plugin-sh) |
137
+ | `plugins.sortJson()` | Рекурсивно сортирует ключи JSON-объектов | [`prettier-plugin-sort-json`](https://github.com/Gudahtt/prettier-plugin-sort-json) |
138
+ | `plugins.solidity()` | Форматирует контракты Solidity | [`prettier-plugin-solidity`](https://github.com/prettier-solidity/prettier-plugin-solidity) |
139
+ | `plugins.sql()` | Форматирует SQL-запросы | [`prettier-plugin-sql`](https://github.com/un-ts/prettier/tree/master/packages/sql) |
140
+ | `plugins.tailwindcss()` | Сортирует утилитарные классы Tailwind CSS | [`prettier-plugin-tailwindcss`](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) |
141
+ | `plugins.xml()` | Форматирует XML-файлы | [`@prettier/plugin-xml`](https://github.com/prettier/plugin-xml) |
142
+
143
+ ## Миграция с v24
144
+
145
+ v25 - breaking-релиз: `plugins` и `overrides`, переданные в фабрику, теперь
146
+ дополняют дефолтные значения, а не заменяют их.
10
147
 
11
- - Default
12
- ([see plugins enabled by default](https://github.com/alex-lit/lint-kit/blob/master/packages/config-prettier/index.js#L5))
148
+ | v24 | v25 |
149
+ | --------------------------------------------------------- | ------------------------------------------------ |
150
+ | `plugins.mdc({ plugins: ['custom'] })` заменял MDC-плагин | добавляет `custom` к `prettier-plugin-mdc` |
151
+ | `plugins.mdc({ overrides: [...] })` заменял MDC-override | добавляет overrides после дефолтного |
152
+ | `plugins.ruby({ overrides: [] })` отключал ERB-override | не отключает; добавьте override для `*.html.erb` |
13
153
 
14
- ```js
15
- // prettier.config.js
16
- import { createConfig } from '@alexlit/config-prettier';
154
+ Скалярные опции работают как раньше: значения из `options` заменяют дефолтные.
17
155
 
18
- export default createConfig();
19
- ```
156
+ ## Миграция с v23
20
157
 
21
- - Custom
158
+ v24 - breaking-релиз: плагинов по умолчанию больше нет, всё подключается явно.
22
159
 
23
- ```js
24
- // prettier.config.js
25
- import { createConfig } from '@alexlit/config-prettier';
160
+ | v23 | v24 |
161
+ | ------------------------------ | --------------------------------------------- |
162
+ | `createConfig()` | перечислите нужные плагины явно |
163
+ | `createConfig({ php: true })` | `defineConfig([plugins.php()])` |
164
+ | `createConfig({ sql: false })` | просто не добавляйте `plugins.sql()` в список |
165
+ | `createConfig({}, options)` | `defineConfig([...], options)` |
26
166
 
27
- export default createConfig({
28
- php: true,
29
- ruby: true,
30
- sql: false,
31
- tailwindcss: false,
32
- });
33
- ```
167
+ Плагины, включённые по умолчанию в v23: `jsdoc`, `mdc`, `packagejson`, `pug`,
168
+ `sh`, `solidity`, `sort-json`, `xml`.
34
169
 
35
- ## Issues
170
+ ## Известные проблемы
36
171
 
37
- - **tailwindcss** conflicts with **jsdoc**
172
+ - **tailwindcss** ранее конфликтовал с **jsdoc**
@@ -0,0 +1,100 @@
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
+ * Collection options (`overrides`, `plugins`) are appended to the defaults:
18
+ * `plugins` are deduplicated and later `overrides` win. Other options replace
19
+ * default values.
20
+ */
21
+ export interface Plugins {
22
+ /** @see prettier-plugin-jsdoc */
23
+ jsdoc(options?: Config & JsdocOptions): Config;
24
+ /** @see prettier-plugin-mdc */
25
+ mdc(options?: Config): Config;
26
+ /** @see prettier-plugin-packagejson */
27
+ packageJson(options?: Config): Config;
28
+ /** @see plugin-php */
29
+ php(options?: Config): Config;
30
+ /** @see plugin-pug */
31
+ pug(options?: Config & PugOptions): Config;
32
+ /** @see plugin-ruby */
33
+ ruby(options?: Config): Config;
34
+ /** @see prettier-plugin-sh */
35
+ sh(options?: Config): Config;
36
+ /** @see prettier-plugin-solidity */
37
+ solidity(options?: Config): Config;
38
+ /** @see prettier-plugin-sort-json */
39
+ sortJson(options?: Config & SortJsonOptions): Config;
40
+ /** @see prettier-plugin-sql */
41
+ sql(options?: Config): Config;
42
+ /** @see prettier-plugin-tailwindcss */
43
+ tailwindcss(options?: Config & TailwindcssOptions): Config;
44
+ /** @see plugin-xml */
45
+ xml(options?: Config & XmlOptions): Config;
46
+ }
47
+
48
+ /** Options of [plugin-pug](https://github.com/prettier/plugin-pug) */
49
+ export interface PugOptions {
50
+ pugCommentPreserveSpaces?: string;
51
+ pugSingleQuote?: boolean;
52
+ pugSortAttributes?: 'asc' | 'desc' | 'natural' | false;
53
+ pugWrapAttributesThreshold?: number;
54
+ }
55
+
56
+ /**
57
+ * Options of
58
+ * [prettier-plugin-sort-json](https://github.com/Gudahtt/prettier-plugin-sort-json)
59
+ */
60
+ export interface SortJsonOptions {
61
+ jsonRecursiveSort?: boolean;
62
+ }
63
+
64
+ /**
65
+ * Options of
66
+ * [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss)
67
+ */
68
+ export interface TailwindcssOptions {
69
+ tailwindFunctions?: string[];
70
+ }
71
+
72
+ /** Options of [plugin-xml](https://github.com/prettier/plugin-xml) */
73
+ export interface XmlOptions {
74
+ xmlWhitespaceSensitivity?: 'ignore' | 'preserve' | 'strict';
75
+ }
76
+
77
+ export declare const plugins: Plugins;
78
+
79
+ /**
80
+ * Create prettier config
81
+ *
82
+ * There are no default plugins - connect the required ones explicitly:
83
+ *
84
+ * ```js
85
+ * defineConfig([plugins.php(), plugins.tailwindcss()], {
86
+ * printWidth: 100,
87
+ * });
88
+ * ```
89
+ *
90
+ * Base options are replaced by plugin options and `options`. Collection options
91
+ * (`overrides`, `plugins`) are appended: `plugins` are deduplicated and later
92
+ * `overrides` win.
93
+ *
94
+ * @param pluginConfigs Plugin configs, e.g. `[plugins.php()]`
95
+ * @param options Base prettier options (highest precedence)
96
+ */
97
+ export declare function defineConfig(
98
+ pluginConfigs?: Config[],
99
+ options?: Config,
100
+ ): Config;
@@ -1,96 +1,74 @@
1
- import { omit } from 'radash';
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';
13
+ import { mergeConfigs } from './utils/merge-configs.js';
2
14
 
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,
15
+ const DEFAULTS = {
16
+ bracketSameLine: false,
17
+ endOfLine: 'lf',
18
+ objectWrap: 'collapse',
19
+ proseWrap: 'always',
20
+ quoteProps: 'consistent',
21
+ singleAttributePerLine: true,
22
+ singleQuote: true,
23
+ tabWidth: 2,
24
+ trailingComma: 'all',
25
+ vueIndentScriptAndStyle: true,
12
26
  };
13
27
 
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 };
22
-
23
28
  /**
24
- * Create plugins config list
25
- *
26
- * @param {PLUGINS} plugins Enabled/disabled plugins list
27
- *
28
- * @returns {import('prettier').Config} Prettier configuration
29
+ * Фабрики плагинов. Каждый плагин подключается явно: передайте
30
+ * `plugins.<name>()` в `defineConfig`
29
31
  */
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;
32
+ export const plugins = {
33
+ jsdoc,
34
+ mdc,
35
+ packageJson,
36
+ php,
37
+ pug,
38
+ ruby,
39
+ sh,
40
+ solidity,
41
+ sortJson,
42
+ sql,
43
+ tailwindcss,
44
+ xml,
63
45
  };
64
46
 
65
47
  /**
66
- * Create prettier config
48
+ * Создать конфигурацию Prettier
49
+ *
50
+ * Плагинов по умолчанию нет - подключайте нужные явно:
51
+ *
52
+ * ```js
53
+ * defineConfig(
54
+ * [
55
+ * plugins.php(),
56
+ * plugins.tailwindcss({ tailwindFunctions: ['cn', 'tw'] }),
57
+ * ],
58
+ * { printWidth: 100 },
59
+ * );
60
+ * ```
67
61
  *
68
- * @param {PLUGINS} plugins
69
- * @param {import('prettier').Config} options Prettier options
62
+ * Базовые опции заменяются опциями плагинов и `options`. Коллекции `overrides`
63
+ * и `plugins` дополняются, `plugins` дедуплицируются, более поздние `overrides`
64
+ * выигрывают.
70
65
  *
71
- * @returns {import('prettier').Config} Prettier configuration
66
+ * @param {import('prettier').Config[]} pluginConfigs Конфиги плагинов, напр.
67
+ * `[plugins.php()]`
68
+ * @param {import('prettier').Config} options Базовые опции Prettier (наивысший
69
+ * приоритет)
70
+ *
71
+ * @returns {import('prettier').Config} Конфигурация Prettier
72
72
  */
73
- export const createConfig = async (plugins = {}, options = {}) => {
74
- const pluginsConfig = await createPluginsConfig(plugins);
75
-
76
- return {
77
- bracketSameLine: false,
78
- endOfLine: 'lf',
79
- objectWrap: 'collapse',
80
- overrides: [
81
- ...(pluginsConfig.overrides ?? []),
82
- ...(options.overrides ?? []),
83
- ],
84
- plugins: [...(pluginsConfig.plugins ?? []), ...(options.plugins ?? [])],
85
- proseWrap: 'always',
86
- quoteProps: 'consistent',
87
- singleAttributePerLine: true,
88
- singleQuote: true,
89
- tabWidth: 2,
90
- trailingComma: 'all',
91
- vueIndentScriptAndStyle: true,
92
-
93
- ...omit(pluginsConfig, ['plugins']),
94
- ...omit(options, ['plugins']),
95
- };
96
- };
73
+ export const defineConfig = (pluginConfigs = [], options = {}) =>
74
+ mergeConfigs(DEFAULTS, ...pluginConfigs, options);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alexlit/config-prettier",
3
- "version": "23.3.0",
3
+ "version": "25.0.0",
4
4
  "private": false,
5
5
  "description": "prettier config",
6
6
  "keywords": [
@@ -23,10 +23,13 @@
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
- "plugins"
31
+ "plugins",
32
+ "utils"
30
33
  ],
31
34
  "scripts": {
32
35
  "ou": "../../scripts/ou.sh",
@@ -48,8 +51,7 @@
48
51
  "prettier-plugin-solidity": "^2.4.1",
49
52
  "prettier-plugin-sort-json": "^4.2.0",
50
53
  "prettier-plugin-sql": "^0.20.0",
51
- "prettier-plugin-tailwindcss": "^0.8.1",
52
- "radash": "^12.1.1"
54
+ "prettier-plugin-tailwindcss": "^0.8.1"
53
55
  },
54
56
  "publishConfig": {
55
57
  "access": "public",
@@ -1,7 +1,22 @@
1
- /** @see [prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc) */
2
- export default {
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = {
3
4
  jsdocCommentLineStrategy: 'singleLine',
4
5
  jsdocSeparateReturnsFromParam: true,
5
6
  jsdocSeparateTagGroups: true,
6
7
  plugins: ['prettier-plugin-jsdoc'],
7
8
  };
9
+
10
+ /**
11
+ * Нормализует JSDoc-комментарии
12
+ *
13
+ * @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
14
+ * поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
15
+ * дополняются, `plugins` дедуплицируются, более поздние `overrides`
16
+ * выигрывают, остальные поля заменяются
17
+ *
18
+ * @returns {import('prettier').Config}
19
+ *
20
+ * @see [prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc)
21
+ */
22
+ export const jsdoc = (options = {}) => mergeConfigs(DEFAULTS, options);
@@ -1,5 +1,20 @@
1
- /** @see [prettier-plugin-mdc](https://github.com/so1ve/prettier-plugin-mdc) */
2
- export default {
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = {
3
4
  overrides: [{ files: ['*.md'], options: { parser: 'mdc' } }],
4
5
  plugins: ['prettier-plugin-mdc'],
5
6
  };
7
+
8
+ /**
9
+ * Форматирует MDC-документы (Nuxt Content)
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-mdc](https://github.com/so1ve/prettier-plugin-mdc)
19
+ */
20
+ export const mdc = (options = {}) => mergeConfigs(DEFAULTS, options);
@@ -1,4 +1,17 @@
1
- /** @see [prettier-plugin-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson) */
2
- export default {
3
- plugins: ['prettier-plugin-packagejson'],
4
- };
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = { plugins: ['prettier-plugin-packagejson'] };
4
+
5
+ /**
6
+ * Сортирует ключи в package.json
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-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson)
16
+ */
17
+ export const packageJson = (options = {}) => mergeConfigs(DEFAULTS, options);
@@ -1,4 +1,17 @@
1
- /** @see [plugin-php](https://github.com/prettier/plugin-php) */
2
- export default {
3
- plugins: ['@prettier/plugin-php'],
4
- };
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = { plugins: ['@prettier/plugin-php'] };
4
+
5
+ /**
6
+ * Форматирует PHP-файлы
7
+ *
8
+ * @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
9
+ * поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
10
+ * дополняются, `plugins` дедуплицируются, более поздние `overrides`
11
+ * выигрывают, остальные поля заменяются
12
+ *
13
+ * @returns {import('prettier').Config}
14
+ *
15
+ * @see [plugin-php](https://github.com/prettier/plugin-php)
16
+ */
17
+ export const php = (options = {}) => mergeConfigs(DEFAULTS, options);
@@ -1,8 +1,23 @@
1
- /** @see [plugin-pug](https://github.com/prettier/plugin-pug) */
2
- export default {
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = {
3
4
  plugins: ['@prettier/plugin-pug'],
4
5
  pugCommentPreserveSpaces: 'trim-all',
5
6
  pugSingleQuote: false,
6
7
  pugSortAttributes: 'asc',
7
8
  pugWrapAttributesThreshold: 3,
8
9
  };
10
+
11
+ /**
12
+ * Форматирует Pug-шаблоны с сортировкой атрибутов и одинарными кавычками
13
+ *
14
+ * @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
15
+ * поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
16
+ * дополняются, `plugins` дедуплицируются, более поздние `overrides`
17
+ * выигрывают, остальные поля заменяются
18
+ *
19
+ * @returns {import('prettier').Config}
20
+ *
21
+ * @see [plugin-pug](https://github.com/prettier/plugin-pug)
22
+ */
23
+ export const pug = (options = {}) => mergeConfigs(DEFAULTS, options);
@@ -1,15 +1,21 @@
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = {
4
+ overrides: [{ files: '*.html.erb', options: { parser: 'eruby-parse' } }],
5
+ plugins: ['@prettier/plugin-ruby', 'prettier-plugin-eruby'],
6
+ };
7
+
1
8
  /**
9
+ * Форматирует Ruby и ERB файлы
10
+ *
11
+ * @param {Partial<import('prettier').Config>} [options] - Опции, накладываемые
12
+ * поверх значений по умолчанию. Коллекции (`overrides`, `plugins`)
13
+ * дополняются, `plugins` дедуплицируются, более поздние `overrides`
14
+ * выигрывают, остальные поля заменяются
15
+ *
16
+ * @returns {import('prettier').Config}
17
+ *
2
18
  * @see [plugin-ruby](https://github.com/prettier/plugin-ruby)
3
19
  * @see [prettier-plugin-eruby](https://github.com/ippachi/prettier-plugin-eruby)
4
20
  */
5
- export default {
6
- overrides: [
7
- {
8
- files: '*.html.erb',
9
- options: {
10
- parser: 'eruby-parse',
11
- },
12
- },
13
- ],
14
- plugins: ['@prettier/plugin-ruby', 'prettier-plugin-eruby'],
15
- };
21
+ export const ruby = (options = {}) => mergeConfigs(DEFAULTS, options);
@@ -1,4 +1,17 @@
1
- /** @see [prettier-plugin-sh](https://github.com/astorije/prettier-plugin-sh) */
2
- export default {
3
- plugins: ['prettier-plugin-sh'],
4
- };
1
+ import { mergeConfigs } from '../utils/merge-configs.js';
2
+
3
+ const DEFAULTS = { plugins: ['prettier-plugin-sh'] };
4
+
5
+ /**
6
+ * Форматирует shell-скрипты
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-sh](https://github.com/astorije/prettier-plugin-sh)
16
+ */
17
+ export const sh = (options = {}) => mergeConfigs(DEFAULTS, options);