Форматы вывода¶
Qualimetrix поддерживает 10 форматов вывода. Выбирайте тот, который подходит для вашего рабочего процесса.
summary (по умолчанию)¶
Обзор здоровья проекта с оценками, худшими нарушителями и сводкой нарушений. Это вывод CLI по умолчанию, предназначенный для быстрой оценки состояния проекта.
Когда использовать: Локальная разработка, быстрый обзор здоровья проекта.
Основные возможности:
- 6 измерений здоровья с прогресс-барами (сложность, связность, связанность, типизация, сопровождаемость, общее)
- Топ-3 худших пространств имён и классов с оценками здоровья
- Количество нарушений с оценкой технического долга (включая плотность долга на 1K LOC)
- Контекстные подсказки для следующих шагов
Пример вывода:
Qualimetrix — 45 files analyzed, 1.23s
Complexity ████████████████░░░░ 78 Excellent
Cohesion ██████████████░░░░░░ 68 Fair
Coupling ████████████░░░░░░░░ 59 Fair
Typing ██████████████████░░ 88 Excellent
Maintainability████████████████░░░░ 80 Good
Overall ██████████████░░░░░░ 72 Fair
Worst namespaces:
App\Service 52 Poor | App\Repository 61 Fair
App\Controller 55 Fair
Worst classes:
App\Service\OrderService 38 Critical | App\Service\UserService 45 Poor
App\Repository\OrderRepository 51 Poor
Violations: 12 errors, 8 warnings | Tech debt: 4h 30m (2.1/1K LOC)
Hint: Run with --namespace=App\\Service to drill down into the worst namespace
Детализация с --namespace и --class:
# Показать нарушения для конкретного поддерева пространства имён
bin/qmx check src/ --namespace=App\\Service
# Показать нарушения для конкретного класса
bin/qmx check src/ --class=App\\Service\\UserService
Режим детализации с --detail:
# Добавить группированный список нарушений (лимит по умолчанию: 200)
bin/qmx check src/ --detail
# Показать все нарушения (без лимита)
bin/qmx check src/ --detail=all
# Пользовательский лимит
bin/qmx check src/ --detail=50
Note
--detail включается автоматически при использовании --namespace или --class. Флаг также работает с --format=text: добавляет группированный список нарушений после компактного построчного вывода.
text¶
Компактный вывод, одна строка на нарушение. Совместим с форматом ошибок GCC/Clang, поэтому нарушения кликабельны в большинстве терминалов и IDE.
Когда использовать: Локальная разработка, быстрые проверки, передача в grep или wc.
Пример вывода:
src/Service/UserService.php:42: error[complexity.cyclomatic.method]: Cyclomatic complexity is 15, max allowed is 10 (calculate)
src/Service/UserService.php:87: warning[size.method-count.class]: Class has 22 methods, max recommended is 20 (UserService)
src/Repository/OrderRepository.php:15: error[coupling.cbo.class]: CBO is 18, max allowed is 15 (OrderRepository)
3 error(s), 0 warning(s) in 45 file(s)
Формат строки: файл:строка: уровень[кодНарушения]: сообщение (символ)
text-verbose¶
Устарело
text-verbose устарел. Используйте вместо него --format=text --detail, который обеспечивает аналогичный группированный многострочный вывод нарушений.
json¶
Машиночитаемый JSON-вывод. Формат, ориентированный на сводную информацию: оценки здоровья, худшие нарушители и все нарушения.
Когда использовать: Пользовательские скрипты, дашборды, программная обработка.
Пример вывода:
{
"meta": {
"version": "1.0.0",
"package": "qmx",
"timestamp": "2025-01-15T10:30:00+00:00"
},
"summary": {
"filesAnalyzed": 45,
"filesSkipped": 0,
"duration": 1.234,
"violationCount": 3,
"errorCount": 2,
"warningCount": 1,
"techDebtMinutes": 270,
"debtPer1kLoc": 2.1
},
"health": {
"complexity": {
"score": 78.0,
"label": "Excellent",
"threshold": {"warning": 50, "error": 25},
"decomposition": []
},
"overall": {
"score": 72.0,
"label": "Fair",
"threshold": {"warning": 50, "error": 25},
"decomposition": []
}
},
"worstNamespaces": [
{
"symbolPath": "App\\Service",
"healthOverall": 52.0,
"label": "Poor",
"reason": "high coupling",
"violationCount": 15,
"classCount": 8,
"healthScores": {}
}
],
"worstClasses": [
{
"symbolPath": "App\\Service\\UserService",
"healthOverall": 45.0,
"label": "Poor",
"reason": "low cohesion",
"violationCount": 8,
"file": "src/Service/UserService.php",
"metrics": {},
"healthScores": {}
}
],
"violations": [
{
"file": "src/Service/UserService.php",
"line": 42,
"symbol": "App\\Service\\UserService::calculate",
"namespace": "App\\Service",
"rule": "complexity.cyclomatic",
"code": "complexity.cyclomatic.method",
"severity": "error",
"message": "Cyclomatic complexity: 15 (threshold: 10) — too many code paths",
"recommendation": null,
"metricValue": 15,
"threshold": 10,
"techDebtMinutes": 30
}
],
"violationsMeta": {
"total": 3,
"limit": null,
"truncated": false,
"byRule": {
"complexity.cyclomatic": 2,
"coupling.cbo": 1
}
},
"violationGroups": {}
}
Записи worstNamespaces и worstClasses включают поле violationDensity -- количество нарушений на 100 строк кода -- для нормализованной по размеру оценки качества кода.
При использовании --group-by=class или --group-by=namespace нарушения организуются в объект violationGroups, где ключами являются FQCN класса или пространство имён. Каждая группа содержит массив нарушений и сводные счётчики:
{
"violationGroups": {
"App\\Service\\UserService": {
"violations": [...],
"errorCount": 2,
"warningCount": 1,
"violationDensity": 3.5
}
}
}
Опции:
# Ограничить количество нарушений в выводе (по умолчанию: все)
bin/qmx check src/ --format=json --format-opt=violations=50
# Управление количеством худших нарушителей (по умолчанию: 10)
bin/qmx check src/ --format=json --format-opt=top=20
# Группировка нарушений по классу или пространству имён
bin/qmx check src/ --format=json --group-by=class
bin/qmx check src/ --format=json --group-by=namespace
Использование в CI:
metrics¶
Необработанные значения метрик для каждого символа (файл, класс, метод, пространство имён). В отличие от json, который выводит нарушения, metrics экспортирует исходные данные метрик, которые оценивают правила.
Когда использовать: Пользовательские дашборды, анализ трендов, пайплайны data science или создание собственных критериев качества на основе сырых метрик.
Пример вывода (сокращённо):
{
"version": "1.0.0",
"package": "qmx",
"timestamp": "2025-01-15T10:30:00+00:00",
"symbols": [
{
"type": "file",
"name": "src/Service/UserService.php",
"file": "src/Service/UserService.php",
"line": 1,
"metrics": {
"loc": 150,
"lloc": 120,
"classCount": 1
}
},
{
"type": "class",
"name": "App\\Service\\UserService",
"file": "src/Service/UserService.php",
"line": 10,
"metrics": {
"methodCount": 8,
"propertyCount": 3,
"lcom4": 2,
"wmc": 35,
"ca": 5,
"ce": 12,
"cbo": 17,
"instability": 0.71
}
},
{
"type": "method",
"name": "App\\Service\\UserService::calculate",
"file": "src/Service/UserService.php",
"line": 42,
"metrics": {
"ccn": 15,
"cognitive": 22,
"halstead.volume": 384.5,
"loc": 35
}
}
],
"summary": {
"filesAnalyzed": 45,
"filesSkipped": 0,
"duration": 1.234
}
}
Использование:
Note
Формат metrics экспортирует все собранные метрики, а не только те, которые вызвали нарушения. Это делает его полезным для отслеживания трендов метрик со временем, даже для кода, который проходит все правила.
checkstyle¶
Формат Checkstyle XML. Широко поддерживается CI-инструментами.
Когда использовать: Jenkins, SonarQube или любой инструмент, принимающий Checkstyle XML.
Пример вывода:
<?xml version="1.0" encoding="UTF-8"?>
<checkstyle version="3.0">
<file name="src/Service/UserService.php">
<error line="42"
severity="error"
message="Cyclomatic complexity is 15, max allowed is 10"
source="qmx.complexity.cyclomatic.method"/>
<error line="87"
severity="warning"
message="Class has 22 methods, max recommended is 20"
source="qmx.size.method-count.class"/>
</file>
</checkstyle>
Использование в CI (Jenkins):
sarif¶
SARIF (Static Analysis Results Interchange Format) 2.1.0. Стандартный формат для инструментов статического анализа, принятый GitHub, Microsoft и многими производителями IDE.
Когда использовать: Вкладка Security на GitHub, VS Code (с расширением SARIF Viewer), JetBrains IDE, Azure DevOps.
Пример вывода (сокращённо):
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "Qualimetrix",
"version": "0.1.0",
"rules": [...]
}
},
"results": [
{
"ruleId": "complexity.cyclomatic.method",
"level": "error",
"message": {
"text": "Cyclomatic complexity is 15, max allowed is 10"
},
"locations": [
{
"physicalLocation": {
"artifactLocation": {
"uri": "src/Service/UserService.php"
},
"region": {
"startLine": 42
}
}
}
]
}
]
}
]
}
Использование в CI (GitHub Actions):
- name: Run Qualimetrix
run: bin/qmx check src/ --format=sarif --no-progress > results.sarif
- name: Upload SARIF to GitHub Security
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Результаты появятся во вкладке Security вашего репозитория и как инлайн-аннотации в пулл-реквестах.
gitlab¶
Формат GitLab Code Quality JSON. Показывает нарушения прямо в диффах Merge Request.
Когда использовать: GitLab CI/CD с отчётами Code Quality.
Пример вывода (сокращённо):
[
{
"description": "Cyclomatic complexity is 15, max allowed is 10",
"check_name": "complexity.cyclomatic.method",
"fingerprint": "a1b2c3d4e5f6...",
"severity": "critical",
"location": {
"path": "src/Service/UserService.php",
"lines": {
"begin": 42
}
}
}
]
Маппинг уровней:
| Уровень Qualimetrix | Уровень GitLab |
|---|---|
| error | critical |
| warning | major |
Использование в CI (GitLab CI):
code_quality:
stage: test
script:
- bin/qmx check src/ --format=gitlab --no-progress > gl-code-quality-report.json
artifacts:
reports:
codequality: gl-code-quality-report.json
Нарушения появятся инлайн во вкладке Changes вашего Merge Request.
github¶
Формат workflow-команд GitHub Actions. Создаёт инлайн-аннотации, которые отображаются прямо в диффах пулл-реквестов при запуске в GitHub Actions.
Когда использовать: GitHub Actions CI. Проще в настройке, чем SARIF — не нужен шаг загрузки.
Пример вывода:
::warning file=src/Service/UserService.php,line=87,title=size.method-count.class::Class has 22 methods, max recommended is 20
::error file=src/Service/UserService.php,line=42,title=complexity.cyclomatic.method::Cyclomatic complexity is 15, max allowed is 10
Маппинг уровней:
| Уровень Qualimetrix | Команда GitHub |
|---|---|
| warning | ::warning |
| error | ::error |
Использование в CI (GitHub Actions):
Аннотации появляются прямо на изменённых строках вашего пулл-реквеста — загрузка SARIF не требуется. По умолчанию --fail-on=error — предупреждения не блокируют сборку.
Совет
Используйте --format=github для быстрых инлайн-аннотаций. Используйте --format=sarif, если также хотите видеть результаты во вкладке Security на GitHub.
health¶
Текстовая таблица оценок здоровья для терминального вывода. Показывает каждое измерение с оценкой, статусом, порогами и деталями декомпозиции.
Когда использовать: Быстрая проверка здоровья из CLI, рабочие процессы AI-агентов, диагностика пайплайнов.
Основные возможности:
- Табличное отображение всех измерений здоровья (сложность, связность, связанность, типизация, сопровождаемость)
- Цветовая индикация статуса (зелёный/жёлтый/красный)
- Видимость порогов (предупреждение и ошибка)
- Декомпозиция по каждому измерению
- Поддержка drill-down через
--namespaceи--class
Худшие участники по измерениям:
Вывод health включает худших участников для каждого измерения -- классы или пространства имён, которые больше всего снижают каждую оценку здоровья. Управляйте количеством отображаемых участников через --format-opt=contributors=N (по умолчанию: 3):
Использование:
html¶
Интерактивный отчёт в виде treemap с визуализацией D3.js. Генерирует самодостаточный HTML-файл с иерархией пространств имён и классов.
Когда использовать: Визуализация всего проекта, отчёты для заинтересованных сторон, командные ревью.
Основные возможности:
- Иерархия пространств имён и классов с размерами, пропорциональными LOC
- Цветовая кодировка оценок здоровья для каждого узла
- Переход вглубь пространств имён по клику
- Панель деталей с метриками, нарушениями и декомпозицией
- Самодостаточный HTML-файл (без внешних зависимостей)
Использование:
Пример рабочего процесса:
# Сгенерировать и открыть отчёт
bin/qmx check src/ --format=html -o report.html
open report.html # macOS
xdg-open report.html # Linux
Note
Флаг -o (output) рекомендуется при использовании формата html. Без него HTML-содержимое выводится в stdout.
Сравнительная таблица¶
| Формат | Читаемость | Машинный | Группировка | Интеграция с CI |
|---|---|---|---|---|
summary |
Лучшая | Нет | Оценки здоровья, drill-down | Любой (код выхода) |
text |
Хорошая | Парсируемый | --group-by |
Любой (код выхода) |
text-verbose |
Хорошая | Нет | --group-by (по умолч.: file) |
Любой (код выхода) |
json |
Нет | Да | Встроенная (по файлам) | Скрипты |
metrics |
Нет | Да | Встроенная (по символам) | Скрипты, дашборды |
checkstyle |
Нет | Да | Встроенная (по файлам) | Jenkins, SonarQube |
sarif |
Нет | Да | Встроенная | GitHub, VS Code, JetBrains |
gitlab |
Нет | Да | Плоский список | GitLab MR виджет |
github |
Нет | Нет | Плоский список | GitHub Actions аннотации |
health |
Хорошая | Нет | Измерения здоровья | Быстрые проверки, CI |
html |
Интерактивная | Нет | Иерархия treemap | Отчёты, ревью |
Коды выхода¶
Все форматы используют одинаковые коды выхода:
| Код выхода | Значение |
|---|---|
| 0 | Нет нарушений (или только предупреждения при --fail-on=error) |
| 1 | Есть предупреждения (при --fail-on=warning) |
| 2 | Есть хотя бы одно нарушение уровня error |
| 3 | Ошибка конфигурации или входных данных |
По умолчанию --fail-on=error: предупреждения отображаются, но не приводят к ненулевому коду выхода. Используйте --fail-on=warning, чтобы предупреждения тоже вызывали код выхода 1.
Примечание
Все диагностические предупреждения (уведомления о конфигурации, сообщения об устаревших функциях) выводятся в stderr, а не в stdout. Это позволяет безопасно перенаправлять вывод анализа в файл или другой инструмент: bin/qmx check src/ --format=json > results.json.