@nitra/cursor 12.8.0 → 12.8.2
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 +12 -0
- package/package.json +1 -1
- package/rules/doc-files/js/docgen-scan.mjs +4 -2
- package/rules/doc-files/js/docs/docgen-extract.md +10 -10
- package/rules/doc-files/js/docs/docgen-judge-measure.md +10 -10
- package/rules/doc-files/js/docs/docgen-judge.md +13 -11
- package/rules/doc-files/js/docs/docgen-scan.md +28 -27
- package/rules/doc-files/js/docs/index.md +15 -16
- package/rules/feedback/feedback.mdc +3 -3
- package/rules/ga/ga.mdc +1 -1
- package/rules/ga/policy/workflow_common/workflow_common.rego +3 -3
- package/rules/{js-lint → js}/coverage/coverage.mjs +7 -7
- package/rules/{js-lint → js}/docs/fix.md +1 -1
- package/rules/{js-lint → js}/docs/index.md +3 -3
- package/rules/{js-lint → js}/docs/main.md +1 -1
- package/rules/{js-lint → js}/js/check.mjs +10 -10
- package/rules/{js-lint → js}/js/docs/check.md +3 -3
- package/rules/{js-lint → js}/js/docs/index.md +3 -3
- package/rules/{js-lint → js}/js/docs/lint-findings.md +1 -1
- package/rules/{js-lint → js}/js/docs/tooling.md +1 -1
- package/rules/{js-lint → js}/js/docs/utils_imports.md +8 -8
- package/rules/{js-lint → js}/js/tooling.mjs +1 -1
- package/rules/{js-lint → js}/js/utils_imports.mjs +3 -3
- package/rules/{js-lint/js-lint.mdc → js/js.mdc} +30 -6
- package/rules/{js-lint → js}/main.mjs +22 -5
- package/rules/{js-lint → js}/policy/jscpd/jscpd.rego +4 -4
- package/rules/{js-lint → js}/policy/jscpd/target.json +1 -1
- package/rules/{js-lint → js}/policy/lint_js_yml/lint_js_yml.rego +6 -6
- package/rules/{js-lint → js}/policy/lint_js_yml/template/lint-js.yml.snippet.yml +1 -1
- package/rules/{js-lint → js}/policy/package_json/package_json.rego +7 -7
- package/rules/{js-lint → js}/policy/vscode_extensions/target.json +1 -1
- package/rules/{js-lint → js}/policy/vscode_extensions/vscode_extensions.rego +2 -2
- package/rules/js-run/lib/docs/conn-file-rules.md +1 -1
- package/rules/npm-module/js/docs/header_doc_pointer.md +23 -13
- package/rules/python/docs/main.md +10 -10
- package/rules/rust/docs/main.md +7 -7
- package/rules/style-lint/js/tooling.mjs +1 -1
- package/rules/test/js/docs/stryker_config.md +1 -1
- package/rules/test/js/stryker_config.mjs +4 -4
- package/rules/test/js/vitest-config-pool-forks.mjs +1 -1
- package/rules/test/test.mdc +4 -4
- package/rules/text/docs/main.md +8 -8
- package/rules/text/js/docs/cspell-fix.md +8 -8
- package/rules/text/js/docs/index.md +0 -1
- package/scripts/lib/docs/discover-checkable-rules.md +2 -2
- package/scripts/lib/docs/run-lint.md +6 -6
- package/scripts/lib/fix/docs/analyze-escalation.md +28 -15
- package/scripts/lib/fix/docs/orchestrator.md +14 -15
- package/scripts/lib/fix/docs/t0.md +8 -7
- package/scripts/lib/gha-workflow.mjs +1 -1
- package/scripts/lib/timing-summary.mjs +1 -1
- package/scripts/sync-setup-bun-deps-action.mjs +1 -1
- package/scripts/utils/resolve-js-root.mjs +1 -1
- package/skills/coverage-fix/meta.json +1 -1
- package/skills/lint/SKILL.md +2 -2
- package/skills/llm-patch/SKILL.md +1 -1
- package/rules/js-lint-ci/docs/fix.md +0 -28
- package/rules/js-lint-ci/docs/index.md +0 -12
- package/rules/js-lint-ci/docs/main.md +0 -27
- package/rules/js-lint-ci/js/docs/index.md +0 -11
- package/rules/js-lint-ci/js-lint-ci.mdc +0 -45
- package/rules/js-lint-ci/main.mjs +0 -33
- package/rules/js-lint-ci/meta.json +0 -1
- /package/rules/{js-lint → js}/js/data/tooling/knip-canonical.json +0 -0
- /package/rules/{js-lint → js}/js/data/tooling/oxlint-canonical.json +0 -0
- /package/rules/{js-lint → js}/js/lint-findings.mjs +0 -0
- /package/rules/{js-lint → js}/meta.json +0 -0
- /package/rules/{js-lint → js}/policy/jscpd/template/.jscpd.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/lint_js_yml/target.json +0 -0
- /package/rules/{js-lint → js}/policy/package_json/target.json +0 -0
- /package/rules/{js-lint → js}/policy/package_json/template/package.json.snippet.json +0 -0
- /package/rules/{js-lint → js}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Крос-файловий ci-етап js-lint — jscpd (детектор клонів) і knip (невикористані експорти). Лише у `lint --full`, по всьому репо.
|
|
3
|
-
globs: "**/{.oxlintrc.json,eslint.config.js,.jscpd.json,knip.json,package.json},**/*.{js,mjs,cjs,jsx,ts,tsx}"
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
version: '1.0'
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# js-lint-ci — крос-файловий ci-етап
|
|
9
|
-
|
|
10
|
-
`jscpd` і `knip` аналізують увесь граф проєкту, тож мають сенс лише у повному прогоні
|
|
11
|
-
`npx @nitra/cursor lint --full` (CI: `lint --read-only --full`) — не у швидкому `lint` по змінених файлах. Per-file режиму нема.
|
|
12
|
-
|
|
13
|
-
Швидкий етап js-lint (oxlint/eslint) — у правилі `js-lint` (`lint: per-file`).
|
|
14
|
-
|
|
15
|
-
## Залежнісна політика (що не додавати)
|
|
16
|
-
|
|
17
|
-
Залежнісний аналіз — крос-файлова зона цього ci-етапу, тож і політика «що не додавати в залежності» живе тут.
|
|
18
|
-
|
|
19
|
-
`@e18e/eslint-plugin` окремо не додавай — він уже в залежностях `@nitra/eslint-config` (з **3.8.0**), oxlint підвантажує його з `node_modules`. Пакети oxlint/eslint/jscpd/knip теж не додавай у `devDependencies` без потреби монорепо — `bunx` тягне їх ad-hoc.
|
|
20
|
-
|
|
21
|
-
## knip
|
|
22
|
-
|
|
23
|
-
Перевірку невикористаних залежностей і експортів виконує **knip** (заміна `depcheck`). Викликається у скрипті `lint-js` і в CI разом з oxlint/eslint/jscpd — окремий крок у CI не потрібен.
|
|
24
|
-
|
|
25
|
-
У корені проєкту має бути **`knip.json`**, який стартує з канонічного baseline з пакета `@nitra/cursor` — файл [`npm/rules/js-lint/js/tooling/knip-canonical.json`](../js-lint/js/tooling/knip-canonical.json). Він покриває типові false-positives для наших правил: `entry` зі CLI-конфігами (eslint, stylelint, oxlint, jscpd, markdownlint-cli2, `commitlint`), `project` для `**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}`, `ignore` для `**/__fixtures__/**`, `ignoreDependencies` для пакетів, посилання на які є лише в не-JS-конфігах (`@nitra/cspell-dict`, `/@cspell\/dict-.+/`, `graphql`), і `ignoreBinaries` для CLI, які канон вимагає викликати через `npx`/`bunx` і яких заборонено додавати в `devDependencies` (`actionlint`, `cspell`, `eslint`, `git-ai`, `jscpd`, `markdownlint-cli2`, `oxfmt`, `oxlint`, `shellcheck`, `uvx`, `v8r`, `zizmor`).
|
|
26
|
-
|
|
27
|
-
Якщо `knip.json` відсутній — `npx @nitra/cursor fix js-lint` копіює канон у корінь проєкту (side effect). Після створення модифікуй файл під свій проєкт як завгодно: перевіряємо лише наявність, зміст подальших змін не валідується.
|
|
28
|
-
|
|
29
|
-
Пакет `knip` окремо в `devDependencies` не додавай — `bunx knip` тягне його ad-hoc, як oxlint/eslint/jscpd.
|
|
30
|
-
|
|
31
|
-
## Заборона `@nitra/as-integrations-fastify`
|
|
32
|
-
|
|
33
|
-
Пакет **`@nitra/as-integrations-fastify`** заборонений у **`dependencies`**, **`peerDependencies`** та в import-specifier-ах. Це чистий републіш upstream, застряглий на peer `@apollo/server: "^4.0.0"`, тож на Apollo 5 `bun install` дає `warn: incorrect peer dependency`. Заміна — upstream **`@as-integrations/fastify`** (**`^3.1.0`**): peer `@apollo/server: "^4.0.0 || ^5.0.0"` + `fastify: "^5.3.0"`.
|
|
34
|
-
|
|
35
|
-
Як і knip, це крос-файлова dependency-політика ci-етапу, а не per-file перевірка — інваріант «per-file режиму нема» зберігається.
|
|
36
|
-
|
|
37
|
-
Міграція — лише specifier у трьох місцях: залежність у `package.json`, `import`, та `vi.mock(...)` / `await import(...)` у тестах. **Код не міняється**, експорти ті самі: `default` → `fastifyApollo`, named → `fastifyApolloDrainPlugin`.
|
|
38
|
-
|
|
39
|
-
```javascript title="❌ до"
|
|
40
|
-
import fastifyApollo, { fastifyApolloDrainPlugin } from '@nitra/as-integrations-fastify'
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
```javascript title="✅ після"
|
|
44
|
-
import fastifyApollo, { fastifyApolloDrainPlugin } from '@as-integrations/fastify'
|
|
45
|
-
```
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process'
|
|
2
|
-
|
|
3
|
-
import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
|
|
4
|
-
import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня (applies → JS-concerns
|
|
8
|
-
* → policy → mdc-refs); `lint()` — lint-поверхня (jscpd + knip, крос-файловий аналіз).
|
|
9
|
-
* @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону
|
|
10
|
-
* @returns {Promise<number>} 0 — OK, 1 — порушення
|
|
11
|
-
*/
|
|
12
|
-
export function run(ctx) {
|
|
13
|
-
return runStandardRule(import.meta.dirname, ctx)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* lint-поверхня: jscpd (дублікати) + knip (мертвий код) по всьому репо.
|
|
18
|
-
* @param {string[] | undefined} _files ігнорується (крос-файловий аналіз)
|
|
19
|
-
* @param {string} [cwd] корінь репо
|
|
20
|
-
* @returns {Promise<number>} 0 — OK, ≠0 — порушення
|
|
21
|
-
*/
|
|
22
|
-
export function lint(_files, cwd = process.cwd()) {
|
|
23
|
-
const jscpd = spawnSync('bunx', ['jscpd', '.'], { cwd, stdio: 'inherit' })
|
|
24
|
-
const jc = typeof jscpd.status === 'number' ? jscpd.status : 1
|
|
25
|
-
if (jc !== 0) return Promise.resolve(jc)
|
|
26
|
-
const knip = spawnSync('bunx', ['knip', '--no-config-hints'], { cwd, stdio: 'inherit' })
|
|
27
|
-
return Promise.resolve(typeof knip.status === 'number' ? knip.status : 1)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (isRunAsCli(import.meta.url)) {
|
|
31
|
-
// Standalone: bun rules/<id>/main.mjs — повний еквівалент `npx @nitra/cursor check <id>`.
|
|
32
|
-
process.exitCode = await runRuleCli(import.meta.dirname)
|
|
33
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{ "auto": { "glob": ["**/*.mjs", "**/*.cjs", "**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] }, "lint": "full" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/rules/{js-lint → js}/policy/vscode_extensions/template/extensions.json.snippet.json
RENAMED
|
File without changes
|