Skip to content

Обзор детекторов ​

archlint поставляется с более чем 28 встроенными детекторами, разделенными по типам архитектурных проблем или проблем качества кода, которые они выявляют.

TIP

Ложноположительные срабатывания: Архитектурный анализ может иногда приводить к ложноположительным результатам, особенно в проектах с интенсивной динамической загрузкой, рефлексией или сложными DI-контейнерами.

Проблемы зависимостей ​

ДетекторIDОписаниеПо умолчанию
Циклические зависимостиcyclic_dependencyЦиклические зависимости между файлами✅
Кластеры цикловcycle_clustersСложные сплетения циклических зависимостей✅
Циклы типовcircular_type_depsЦиклы зависимостей только на уровне типов❌
Циклы пакетовpackage_cyclesЦиклы зависимостей между пакетами❌
Нарушение слоевlayer_violationНарушения определенных архитектурных слоев❌
Нарушение SDPsdp_violationНарушения принципа устойчивых зависимостей❌

Дизайн модулей и классов ​

ДетекторIDОписаниеПо умолчанию
God Modulegod_moduleМодули с слишком большим количеством обязанностей✅
Hub Modulehub_moduleСильно связанные «узловые» модули (Hub)❌
Низкая связностьlcomКлассы с низкой внутренней связностью (LCOM4)❌
Высокая зацепленностьhigh_couplingМодули с слишком большим количеством зависимостей❌
Рассредоточенный модульmodule_cohesionФункциональность, разбросанная по слишком многим файлам❌
Feature Envyfeature_envyМетоды, использующие другой класс больше, чем свой собственный❌

Качество кода и организация ​

ДетекторIDОписаниеПо умолчанию
Мертвый кодdead_codeНеиспользуемые экспорты✅
Мертвые символыdead_symbolsНеиспользуемые локальные функции и переменные✅
Осиротевшие типыorphan_typesТипы, не связанные с остальной кодовой базой✅
Злоупотребление Barrelbarrel_fileБольшие barrel-файлы, вызывающие зацепление✅
Одержимость примитивамиprimitive_obsessionЗлоупотребление примитивами вместо доменных типов❌

Сложность и размер ​

ДетекторIDОписаниеПо умолчанию
Цикломатическая сложностьcyclomatic_complexityФункции с высокой цикломатической сложностью✅
Когнитивная сложностьcognitive_complexityФункции с высокой когнитивной сложностью✅
Глубокая вложенностьdeep_nestingГлубоко вложенные блоки кода✅
Много параметровlong_paramsФункции со слишком большим количеством параметров✅
Большой файлlarge_fileСлишком большие исходные файлы✅

Паттерны изменений ​

ДетекторIDОписаниеПо умолчанию
Shotgun Surgeryshotgun_surgeryИзменения, требующие модификации многих файлов❌
Нестабильный интерфейсunstable_interfaceЧасто меняющиеся публичные интерфейсы❌

Runtime и безопасность ​

ДетекторIDОписаниеПо умолчанию
Утечка тестовtest_leakageТестовый код, попадающий в продакшн❌
Связанность с вендоромvendor_couplingЖесткая привязка к внешним библиотекам❌
Импорт с побочными эффектамиside_effect_importИмпорты, вызывающие побочные эффекты✅
Общее мутабельное состояниеshared_mutable_stateЭкспортируемые мутабельные переменные❌

Архитектурные метрики ​

ДетекторIDОписаниеПо умолчанию
Нарушение абстрактностиabstractnessЗоны боли/бесполезности (метрика I+A)❌
Рассредоточенная конфигурацияscattered_configКонфигурация, разбросанная по многим файлам❌
Дублирование кодаcode_cloneДублирование кода в проекте✅

Released under the MIT License.