@nitra/cursor 12.6.0 → 12.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/rules/text/lint/docs/lint.md +1 -1
- package/rules/text/lint/docs/run-v8r.md +1 -1
- package/rules/text/text.mdc +5 -14
- package/scripts/lib/docs/gha-workflow.md +5 -5
- package/scripts/lib/gha-workflow.mjs +1 -1
- package/scripts/lib/run-lint-step.mjs +1 -1
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@ docgen:
|
|
|
8
8
|
score: 90
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
runLintTextCli надає
|
|
11
|
+
runLintTextCli надає внутрішню обгортку для послідовного лінтингу текстових файлів (text.mdc). Обгортка автоматично встановлює необхідні інструменти (`shellcheck`, `dotenv-linter`) через `ensureTool` перед виконанням ланцюжка перевірок. Ланцюжок включає: перевірку правопису (`cspell`), аналіз скриптів (`shellcheck`), перевірку конфігураційних файлів (`dotenv-linter`), форматування Markdown (`markdownlint-cli2`) та валідацію схем (`v8r`). При виявленні першого ненульового коду в ланцюжку, цей код повертається як код виходу, і подальші кроки не виконуються. Зовнішня точка входу правила — `n-cursor lint text`.
|
|
12
12
|
|
|
13
13
|
## Поведінка
|
|
14
14
|
|
|
@@ -143,7 +143,7 @@ if (isRunAsCli(import.meta.url)) {
|
|
|
143
143
|
|
|
144
144
|
### Як частина команди `lint-text`
|
|
145
145
|
|
|
146
|
-
Раннер призначений для виклику з
|
|
146
|
+
Раннер призначений для виклику з правила `n-cursor lint text`. Замість того, щоб запускати `v8r` чотирма (або п’ятьма) окремими командами в `package.json`, використовується один виклик цього модуля, який сам обходить усі типові glob-и:
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
149
|
node ./npm/rules/text/lint/run-v8r.mjs
|
package/rules/text/text.mdc
CHANGED
|
@@ -117,19 +117,16 @@ version: '1.30'
|
|
|
117
117
|
|
|
118
118
|
Завжди пиши **JSDoc** до функцій та методів.
|
|
119
119
|
|
|
120
|
-
**`package.json`:**
|
|
120
|
+
**`package.json`:** у `devDependencies` має бути **`@nitra/cspell-dict`** (**`^2.0.0`** або новіший у лінії 2.x) — з **2.0.0** у пакет транзитивно входять типові **`@cspell/dict-*`**, тому **не** додавай їх окремо в корінь. Окремий `package.json`-скрипт `lint-text` не потрібен: запуск іде через **`n-cursor lint text`**. **`markdownlint-cli2`** запускається rule-адаптером через **`bunx markdownlint-cli2`**, не додавай пакет до devDependencies. **`v8r`** лише через **`bunx v8r`**, не в devDependencies. Окремий пакет **`markdownlint`** не потрібний.
|
|
121
121
|
|
|
122
|
-
**shellcheck:** інструмент лише в **`PATH`** (як у **ga.mdc** для `lint-ga`), **не** додавай до `dependencies` / `devDependencies`. Якщо `shellcheck` відсутній — встанови локально (**macOS:** `brew install shellcheck`; **Debian/Ubuntu:** `sudo apt-get install -y shellcheck`; **Arch:** `sudo pacman -S shellcheck`). Канонічний
|
|
122
|
+
**shellcheck:** інструмент лише в **`PATH`** (як у **ga.mdc** для `lint-ga`), **не** додавай до `dependencies` / `devDependencies`. Якщо `shellcheck` відсутній — встанови локально (**macOS:** `brew install shellcheck`; **Debian/Ubuntu:** `sudo apt-get install -y shellcheck`; **Arch:** `sudo pacman -S shellcheck`). Канонічний запуск — **`n-cursor lint text`** (бінарка з `node_modules/.bin/` пакету `@nitra/cursor`): після **`cspell .`** виконується **`runShellcheckText()`** з пакета — циклічно **`shellcheck -f diff`** і **`patch -p1`** для авто-виправлень, потім повний прогін **`shellcheck`** по всіх tracked `*.sh` (у git) або по `**/*.sh` без `node_modules`. Потрібен також **`patch`** у `PATH` (на macOS зазвичай уже є).
|
|
123
123
|
|
|
124
124
|
**dotenv-linter:** після shellcheck CLI запускає **`runDotenvLinter()`** з пакета — рекурсивно по `.env*`-файлах проєкту через **`dotenv-linter fix -r --no-backup --quiet . --exclude node_modules --exclude .envrc`**, далі такий самий **`check`** для фінальної перевірки. Інструмент має бути в **`PATH`** і **не** додається в `dependencies` / `devDependencies`. Якщо `dotenv-linter` відсутній — встанови локально (**macOS:** `brew install dotenv-linter`; **Linux:** `curl -sSfL https://git.io/JLbXn | sh -s -- -b /usr/local/bin`; через **cargo:** `cargo install dotenv-linter`).
|
|
125
125
|
|
|
126
|
-
У v8r **немає** прапорця тихого режиму;
|
|
126
|
+
У v8r **немає** прапорця тихого режиму; rule-адаптер **`n-cursor lint text`** на четвертому кроці викликає **`runV8rWithGlobs()`** з пакета (реалізація — `npm/rules/text/js/run-v8r.mjs`): під капотом послідовні **`bunx v8r`** для кожного типу (**json**, **json5**, **yml**, **yaml**, **toml**), бо один процес v8r з кількома глобами падає з **98**, якщо хоч один glob порожній, і тоді інші розширення не перевіряються. Вивід при кодах **0** і **98** не показується. Каталог схем **`schemas/v8r-catalog.json`** пакета `@nitra/cursor` обгортка підставляє в v8r сама.
|
|
127
127
|
|
|
128
128
|
```json title="package.json"
|
|
129
129
|
{
|
|
130
|
-
"scripts": {
|
|
131
|
-
"lint-text": "n-cursor lint-text"
|
|
132
|
-
},
|
|
133
130
|
"devDependencies": {
|
|
134
131
|
"@nitra/cspell-dict": "^2.1.0"
|
|
135
132
|
}
|
|
@@ -174,7 +171,7 @@ version: '1.30'
|
|
|
174
171
|
|
|
175
172
|
- Канон: [lint-text.yml.snippet.yml](./policy/lint_text/template/lint-text.yml.snippet.yml)
|
|
176
173
|
|
|
177
|
-
Перед **`./.github/actions/setup-bun-deps`** — **`actions/checkout@v6`** (див. **ga.mdc**). Після composite — кроки **`Install shellcheck`** (apt) і **`Install dotenv-linter`** (curl), бо `n-cursor lint
|
|
174
|
+
Перед **`./.github/actions/setup-bun-deps`** — **`actions/checkout@v6`** (див. **ga.mdc**). Після composite — кроки **`Install shellcheck`** (apt) і **`Install dotenv-linter`** (curl), бо `n-cursor lint text` вимагає обидва бінарники в PATH; на ubuntu-latest shellcheck часто вже є, dotenv-linter — ні. Composite: Node 24, Bun, кеш, `bun install --frozen-lockfile`.
|
|
178
175
|
|
|
179
176
|
Не дублюй окремий workflow з тими самими кроками cspell/markdownlint.
|
|
180
177
|
|
|
@@ -198,9 +195,6 @@ version: '1.30'
|
|
|
198
195
|
|
|
199
196
|
```json title="package.json"
|
|
200
197
|
{
|
|
201
|
-
"scripts": {
|
|
202
|
-
"lint-text": "n-cursor lint-text"
|
|
203
|
-
},
|
|
204
198
|
"devDependencies": {
|
|
205
199
|
"@nitra/cspell-dict": "^2.1.0"
|
|
206
200
|
}
|
|
@@ -215,9 +209,6 @@ version: '1.30'
|
|
|
215
209
|
|
|
216
210
|
```json title="package.json"
|
|
217
211
|
{
|
|
218
|
-
"scripts": {
|
|
219
|
-
"lint-text": "n-cursor lint-text"
|
|
220
|
-
},
|
|
221
212
|
"devDependencies": {
|
|
222
213
|
"@nitra/cspell-dict": "^2.1.0"
|
|
223
214
|
}
|
|
@@ -262,4 +253,4 @@ kebab-case
|
|
|
262
253
|
|
|
263
254
|
## Перевірка
|
|
264
255
|
|
|
265
|
-
`npx @nitra/cursor fix text` (охоплює oxfmt, cspell, shellcheck
|
|
256
|
+
`npx @nitra/cursor fix text` (охоплює oxfmt, cspell, shellcheck, markdownlint, v8r і CI для `n-cursor lint text`). Зокрема падає, якщо у корені є `.prettierignore`, `.prettierrc*`, `prettier.config.*` або у `package.json#scripts` зустрічається команда з `prettier` — Prettier повністю заборонено, форматування лише через **oxfmt**.
|
|
@@ -12,7 +12,7 @@ docgen:
|
|
|
12
12
|
|
|
13
13
|
- `check-ga` — загальна перевірка GitHub Actions workflows;
|
|
14
14
|
- `check-js-lint` — перевірка структури `lint-js.yml`;
|
|
15
|
-
- `check-text` — перевірка наявності викликів `
|
|
15
|
+
- `check-text` — перевірка наявності викликів `n-cursor lint text --read-only` у CI;
|
|
16
16
|
- `check-style-lint` — перевірка викликів стайл-лінту в CI;
|
|
17
17
|
- `check-npm-module` — перевірка workflow npm-модуля.
|
|
18
18
|
|
|
@@ -191,7 +191,7 @@ docgen:
|
|
|
191
191
|
|
|
192
192
|
**Side effects:** немає. Ітерація припиняється на першому збігу (рання передача).
|
|
193
193
|
|
|
194
|
-
**Типовий приклад:** `anyRunStepIncludes(root, '
|
|
194
|
+
**Типовий приклад:** `anyRunStepIncludes(root, 'n-cursor lint text --read-only')` для `check-text` — перевірити, що CI взагалі викликає таргет лінту текстів.
|
|
195
195
|
|
|
196
196
|
---
|
|
197
197
|
|
|
@@ -299,14 +299,14 @@ if (!result.ok) {
|
|
|
299
299
|
}
|
|
300
300
|
```
|
|
301
301
|
|
|
302
|
-
### Приклад: перевірка наявності таргета `
|
|
302
|
+
### Приклад: перевірка наявності таргета `n-cursor lint text --read-only`
|
|
303
303
|
|
|
304
304
|
```js
|
|
305
305
|
import { parseWorkflowYaml, anyRunStepIncludes } from './gha-workflow.mjs'
|
|
306
306
|
|
|
307
307
|
const root = parseWorkflowYaml(content)
|
|
308
|
-
if (root && !anyRunStepIncludes(root, '
|
|
309
|
-
console.error('у CI відсутній виклик
|
|
308
|
+
if (root && !anyRunStepIncludes(root, 'n-cursor lint text --read-only')) {
|
|
309
|
+
console.error('у CI відсутній виклик n-cursor lint text --read-only')
|
|
310
310
|
}
|
|
311
311
|
```
|
|
312
312
|
|
|
@@ -135,7 +135,7 @@ export function verifyLintJsWorkflowStructure(root) {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
/**
|
|
138
|
-
* Чи є в будь-якому `run` кроку підрядок (наприклад `
|
|
138
|
+
* Чи є в будь-якому `run` кроку підрядок (наприклад `n-cursor lint text --read-only`).
|
|
139
139
|
* @param {Record<string, unknown>} root корінь workflow
|
|
140
140
|
* @param {string} needle підрядок для пошуку
|
|
141
141
|
* @returns {boolean} `true`, якщо хоча б один `run` містить `needle`
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* команди і прокидає stdout/stderr на користувацькі stream-и (`stdio: 'inherit'`), щоб виглядало
|
|
4
4
|
* як прямий виклик у shell.
|
|
5
5
|
*
|
|
6
|
-
* Використовується з
|
|
6
|
+
* Використовується з rule-адаптерів `n-cursor lint <rule>`, щоб не дублювати
|
|
7
7
|
* одну й ту саму обгортку у кожному `rules/<id>/js/lint.mjs` (jscpd-clone).
|
|
8
8
|
*/
|
|
9
9
|
import { spawnSync } from 'node:child_process'
|