@7n/rules-lang-js 0.4.0 → 0.4.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1] - 2026-07-19
4
+
5
+ ### Fixed
6
+
7
+ - js/knip: вбудований ігнор unused-dependency на пакети екосистеми n-rules (@7n/rules і @7n/rules-* плагіни — їх ставить сам npx @7n/rules, код споживача не імпортує) + канон knip ignoreDependencies з тим самим патерном
8
+
3
9
  ## [0.4.0] - 2026-07-19
4
10
 
5
11
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7n/rules-lang-js",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Плагін @7n/rules: JS/npm/bun-екосистема — lint-правила (js/bun/vue/js-run/npm-module/db), taze-провайдер (package.json, bunx taze) і doc-files-екстрактори (oxc AST)",
5
5
  "keywords": [
6
6
  "javascript",
@@ -3,7 +3,7 @@ type: JS Module
3
3
  title: main.mjs
4
4
  resource: plugins/lang-js/rules/js/knip/main.mjs
5
5
  docgen:
6
- crc: 7506fcd8
6
+ crc: e46cd90b
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  issues: judge:inaccurate:0.98
@@ -12,21 +12,20 @@ docgen:
12
12
 
13
13
  ## Огляд
14
14
 
15
- Аналізує проєкт на предмет невикористаних залежностей та експортів. Виконує операцію лише для читання, не змінюючи файлову систему чи базу даних. Публічна функція `lint` надає звіт про виявлені проблеми, який визначається за кодом виходу.
15
+ Lint-поверхня `js/knip`: read-only detector невикористаних залежностей, експортів і файлів через programmatic API knip. Кожен knip-issue стає одним порушенням (`reason` = тип issue, `file`/`line` де доступні); звіт рендерить runner, сам детектор нічого не друкує і не мутує (без `--fix`).
16
16
 
17
17
  ## Поведінка
18
18
 
19
- 1. Викликається функція `lint`.
20
- 2. Система аналізує проект на предмет невикористаних залежностей та експортів.
21
- 3. На основі збору виявлених проблем, система генерує звіт.
22
- 4. Якщо знайдено хоча б одну проблему, функція повертає значення 1; інакше — 0.
19
+ - `lint(ctx)` будує опції knip (`createOptions` з dist-каталогу пакета — внутрішній util не експортується через `exports`), глушить TTY-прогрес поза `ctx.verbose` і жене `knipMain`.
20
+ - Кожен issue з `results.issues` нормалізується у violation: `message` = `knip: <тип> \`<символ>\` — <файл:рядок>`, `severity` warn/error за knip.
21
+ - Вбудований ігнор пакетів екосистеми n-rules: unused dependency/devDependency-issue на `@7n/rules` та `@7n/rules-*` (lang-/ci-плагіни) відкидається — їх ставить і веде сам `npx @7n/rules`, код споживача їх не імпортує, тож у кожному consumer-репо це було б хибне спрацювання. Інші типи issue (files, exports) на ці пакети НЕ ігноруються.
23
22
 
24
23
  ## Публічний API
25
24
 
26
- Я розумію завдання. Мені потрібно перетворити технічний опис на лаконічну, поведінкову документацію українською мовою у форматі маркерів, дотримуючись усіх зазначених обмежень.
27
-
28
- Будь ласка, надайте список, який потрібно переписати.
25
+ - lint детектор js/knip: повертає `{ violations }` з нормалізованими knip-issue.
26
+ - isNRulesPackageIssue — чи є issue хибним спрацюванням на пакет екосистеми n-rules (експортовано для тестів).
29
27
 
30
28
  ## Гарантії поведінки
31
29
 
32
- - Read-only: не виконує операцій запису (ФС/БД).
30
+ - Read-only: knip запускається без `--fix`, жодних мутацій ФС/БД.
31
+ - Не друкує звіт — рендеринг на боці runner-а.
@@ -9,6 +9,25 @@ import { pathToFileURL } from 'node:url'
9
9
 
10
10
  import { main as knipMain } from 'knip'
11
11
 
12
+ // Пакети екосистеми n-rules (ядро і lang-/ci-плагіни): їх ставить і веде сам
13
+ // `npx @7n/rules` як devDependency, код споживача їх не імпортує — knip завжди
14
+ // вважав би їх unused. Вбудований ігнор знімає хибне спрацювання у ВСІХ consumer-репо без
15
+ // правки їхніх knip.json (канон ignoreDependencies покриває лише свіжі копії).
16
+ const N_RULES_PKG_RE = /^@7n\/rules(-.+)?$/u
17
+
18
+ /**
19
+ * Чи є issue хибним спрацюванням на пакет екосистеми n-rules (unused dependency/devDependency).
20
+ * @param {{ type: string, symbol?: string }} issue knip-issue
21
+ * @returns {boolean} true — ігноруємо
22
+ */
23
+ export function isNRulesPackageIssue(issue) {
24
+ return (
25
+ (issue.type === 'dependencies' || issue.type === 'devDependencies') &&
26
+ typeof issue.symbol === 'string' &&
27
+ N_RULES_PKG_RE.test(issue.symbol)
28
+ )
29
+ }
30
+
12
31
  /**
13
32
  * Один knip-issue → LintViolation.
14
33
  * @param {{ type: string, filePath?: string, symbol?: string, symbolType?: string, line?: number, col?: number, severity?: string }} issue knip-issue
@@ -60,7 +79,9 @@ export async function lint(ctx) {
60
79
  for (const byFile of Object.values(results.issues)) {
61
80
  for (const byKey of Object.values(byFile)) {
62
81
  for (const issue of Object.values(byKey)) {
63
- violations.push(issueToViolation(/** @type {Parameters<typeof issueToViolation>[0]} */ (issue), cwd))
82
+ const typed = /** @type {Parameters<typeof issueToViolation>[0]} */ (issue)
83
+ if (isNRulesPackageIssue(typed)) continue
84
+ violations.push(issueToViolation(typed, cwd))
64
85
  }
65
86
  }
66
87
  }
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "project": ["**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}"],
14
14
  "ignore": ["**/__fixtures__/**"],
15
- "ignoreDependencies": ["@nitra/cspell-dict", "/@cspell\\/dict-.+/", "graphql"],
15
+ "ignoreDependencies": ["@nitra/cspell-dict", "/@cspell\\/dict-.+/", "/@7n\\/rules(-.+)?/", "graphql"],
16
16
  "ignoreBinaries": [
17
17
  "actionlint",
18
18
  "cspell",