ds-coverage

Считает, какая часть кодовой базы реально использует дизайн-систему. Показывает неиспользуемые компоненты, дубли и дыры во внедрении.

Зачем это есть

Внедрение — главная боль дизайн-систем. Библиотеку собирают, а доказать, что ей пользуются, не могут. Удовлетворённость за год может упасть с 68% до 31%, пока метрики «внедрения» выглядят здоровыми.

ds-coverage даёт числа: какие компоненты импортируют, как часто и что рядом написано заново.

Установка

# Run directly (no install)
npx ds-coverage src/ --ds @acme/ui

# Or install globally
npm i -g ds-coverage

Запуск

# Basic scan
ds-coverage src/ --ds @acme/ui

# Multiple packages
ds-coverage . --ds @acme/ui,@acme/icons

# With component inventory (finds unused)
ds-coverage src/ --ds @acme/ui --inventory components.json

# Markdown report
ds-coverage src/ --ds @acme/ui --format markdown --out coverage.md

# CI threshold (fail below 70%)
ds-coverage src/ --ds @acme/ui --inventory components.json --min 70

Параметры

ФлагПо умолчаниюОписание
[path].Папка для проверки
--ds <packages>—Имена пакетов системы через запятую (обязательно)
--inventory <file>—JSON со всеми компонентами системы
--format <type>terminalterminal | markdown | json
--out <file>—Записать отчёт в файл
--min <percent>—Ошибка, если покрытие ниже порога
--versionПоказать версию
--helpПоказать справку

Что измеряет

  • Используемые компонентыСколько компонентов системы встречается в импортах по кодовой базе
  • Всего импортовСколько раз систему импортировали — глубина внедрения
  • Местные компонентыКомпоненты из относительных путей — кандидаты в систему
  • ДублиМестные компоненты с тем же именем, что у системных — скорее всего написаны заново
  • НеиспользуемыеКомпоненты системы, которые нигде не импортированы — кандидаты на удаление (нужен --inventory)

Здоровый код

Команда, которая системой реально пользуется:

ЗначениеЧто значит
34Компоненты системы
87%Покрытие
0Дубли
Design System Coverage Report
──────────────────────────────

Package: @acme/ui
Components used: 34 of 39 (87%)
Total imports: 412
Unused components: Alert, Breadcrumb, Stepper, Timeline, Tree

─────────────────────────────
Files scanned: 186
DS component uses: 412
Custom components: 12

Top used:
Button (142)
Text (98)
Card (67)
Input (45)
Badge (38)

Слабое внедрение

Кодовая база, где систему обходят:

ЗначениеЧто значит
12Компоненты системы
31%Покрытие
5Дубли
Package: @acme/ui
Components used: 12 of 39 (31%)
Total imports: 54
Unused components: 27 components never imported

─────────────────────────────
Files scanned: 340
DS component uses: 54
Custom components: 89
⚠ Possible dupes: Button, Modal, Badge, Card, Input

Least used (1-2 imports):
Tooltip (2)
Accordion (1)
Tabs (1)

Инвентарь

Чтобы найти неиспользуемые компоненты, передай JSON со всеми экспортами пакета системы:

Формат массива

["Button", "Card", "Modal", "Tooltip", "Badge", "Input", "Select"]

Формат объекта

{
  "components": ["Button", "Card", "Modal", "Tooltip", "Badge"]
}

Можно указать index-файл пакета: ds-coverage сам разберёт экспорты.

CI

# GitHub Actions
- name: Check DS adoption
  run: npx ds-coverage src/ --ds @acme/ui --inventory components.json --min 60

# Generate PR report
- name: DS Coverage Report
  run: npx ds-coverage src/ --ds @acme/ui --format markdown --out coverage.md

--min завершается с кодом 1, если покрытие ниже порога.

Цепочка

ds-coverage считает, импортирует ли код ту систему, которую показали модели:

ds-lint blocks raw values
ds-context packs the system
ds-coverage counts real imports ← you are here
ds-health reads the live page

Код