En
Написать
‹ Назад

ds-coverage

Сканерopen source

ds-coverage считает по импортам, какая доля каталога дизайн-системы задействована в коде, какие экспорты не используются и где рядом появились локальные компоненты с теми же именами.

Зачем

В репозитории может лежать дизайн-система на сорок компонентов, а продуктовые экраны рядом всё равно собирают из своих Button и Modal. На ревью это всплывает поздно.

ds-coverage проходит по импортам и показывает три вещи: какие компоненты системы реально используются, какие лежат мёртвым грузом и где в продукте написали локальный дубль с тем же именем.

Установка

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

# Or install globally
npm i -g @andrewaitken/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 из 39 экспортируемых компонентов = 87%) и карта совпадений имён, а не оценка визуального качества экранов.

Системой пользуются

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

ЗначениеЧто значит
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 @andrewaitken/ds-coverage src/ --ds @acme/ui --inventory components.json --min 60

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

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

Код на GitHub

Есть задача?

Напишите мне. Вместе разберёмся, с чего начать.