Сканер
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> | terminal | terminal | 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