Skip to content

Конфигурация

archlint можно настроить с помощью файла .archlint.yaml в корне вашего проекта. Если конфигурационный файл не найден, инструмент использует разумные значения по умолчанию для всех детекторов.

Структура конфигурационного файла

yaml
# Файлы и директории для игнорирования (глобально)
ignore:
  - '**/dist/**'
  - '**/node_modules/**'

# Алиасы путей (аналогично tsconfig.json или webpack)
# По умолчанию archlint автоматически загружает алиасы из tsconfig.json.
# Явные алиасы, определенные здесь, имеют приоритет над значениями из tsconfig.json.
aliases:
  '@/*': 'src/*'

# Настройка интеграции с TypeScript (true, false или путь к файлу)
tsconfig: true

# Расширение из встроенных или кастомных пресетов
extends:
  - nestjs
  - ./my-company-preset.yaml

# Точки входа для анализа (используются для поиска мертвого кода)
entry_points:
  - 'src/main.ts'

# Настройка правил для каждого детектора
rules:
  # Короткая форма: только уровень серьезности или "off"
  cycles: high
  dead_code: medium

  # Полная форма: с дополнительными параметрами
  god_module:
    severity: high
    enabled: true
    exclude: ['**/generated/**']
    # Специфичные для детектора параметры
    fan_in: 15
    fan_out: 15
    churn: 20

# Переопределения правил для конкретных путей
overrides:
  - files: ['**/legacy/**']
    rules:
      complexity: medium
      god_module: off

# Настройка оценки и грейдинга
scoring:
  # Минимальный уровень серьезности для отображения (low, medium, high, critical)
  minimum: low
  # Веса для расчета общего балла
  weights:
    critical: 100
    high: 50
    medium: 20
    low: 5
  # Пороги для получения оценки (Density = Total Score / Files)
  grade_rules:
    excellent: 1.0
    good: 3.0
    fair: 7.0
    moderate: 15.0
    poor: 30.0

# Автоматическое определение фреймворка (по умолчанию true)
auto_detect_framework: true

# Настройки архитектурного диффа
diff:
  # Порог ухудшения метрик (например, рост сложности) для сообщения о регрессии
  metric_threshold_percent: 20
  # Максимальное смещение строк для сопоставления запахов между версиями
  line_tolerance: 50

# Настройки Git
git:
  enabled: true # включить анализ (по умолчанию true)
  history_period: '1y'

Уровни серьезности (Severity)

В секции rules вы можете использовать следующие уровни:

  • critical: Критическая проблема, требующая немедленного исправления.
  • high: Высокий уровень серьезности, архитектурная ошибка.
  • medium: Средний уровень серьезности или предупреждение.
  • low: Низкий уровень серьезности или информационное сообщение.
  • off: Полностью отключает детектор.

Конфигурация через CLI

Вы можете указать путь к конфигурационному файлу явно:

bash
archlint scan --config custom-config.yaml

Интеграция с TypeScript

archlint может автоматически синхронизироваться с вашим tsconfig.json. Используйте поле tsconfig для управления этой функцией:

  • tsconfig: true (по умолчанию): Автоматически ищет tsconfig.json в корне проекта.
  • tsconfig: false или tsconfig: null: Отключает интеграцию с TypeScript.
  • tsconfig: "./path/to/tsconfig.json": Использует конкретный файл конфигурации.

Когда интеграция включена, инструмент:

  1. Загружает алиасы: Извлекает compilerOptions.paths и compilerOptions.baseUrl для автоматической настройки aliases.
  2. Автоматическое игнорирование: Добавляет compilerOptions.outDir в глобальный список ignore.
  3. Исключения: Добавляет паттерны из поля exclude в список ignore.

Конфигурация Diff

Секция diff управляет тем, как обнаруживаются архитектурные регрессии при сравнении двух снимков:

  • metric_threshold_percent (по умолчанию: 20): Определяет, насколько должна увеличиться метрика (например, цикломатическая сложность или связанность), чтобы она была отмечена как «ухудшившаяся». Например, при пороге 20% сложность функции должна увеличиться с 10 до как минимум 12, чтобы попасть в отчет.
  • line_tolerance (по умолчанию: 50): Определяет максимальное количество строк, на которое может сместиться символ кода (из-за добавлений или удалений в других частях файла), прежде чем archlint перестанет распознавать его как тот же самый «запах». Это «нечеткое сопоставление» предотвращает ложные сообщения о новых регрессиях при обычном редактировании кода.

Расширение (Extends)

Поле extends позволяет загружать пресеты из различных источников:

  • Встроенные пресеты: nestjs, nextjs, react, oclif.
  • Локальные файлы: Относительный путь к YAML-файлу (например, ./archlint-shared.yaml).
  • URL: Прямая ссылка на YAML-файл (например, https://example.com/preset.yaml).

Пресеты объединяются в том порядке, в котором они указаны. Конфигурация пользователя всегда имеет наивысший приоритет.

Для удаленных пресетов (по URL) действуют следующие ограничения:

  • Безопасность: Запросы к локальным и приватным сетям (localhost, 127.0.0.1, 10.x.x.x, 192.168.x.x, 172.16-31.x.x) блокируются для защиты от SSRF.
  • Таймаут: На загрузку пресета отводится 30 секунд. Если сервер не ответит вовремя или URL недоступен, будет выведена ошибка.
  • Валидация: Поддерживаются только протоколы http и https. Некорректные URL вызовут ошибку конфигурации.

Released under the MIT License.