11 октября 2023

Delphi 12. Генерация графа зависимостей между модулями проекта в Graphviz-файл

    В компилятор Delphi 12 добавлена возможность генерации графа зависимостей между модулями проекта в файл формата Graphviz (Graph Visualization Software). Она реализована непосредственно на уровне компилятора без дополнительного инструмента синтаксического анализа. Подобный граф может помочь разработчикам понять структуру проекта и избежать ненужных циклических ссылок на модули, которые могут замедлить компиляцию или вызвать негативные побочные эффекты для самого компилятора.
    Для генерации графа зависимостей между модулями в компилятор Delphi 12 добавлен новый параметр "–graphviz". Результатом работы компилятора с этим параметром является текстовый файл с расширением ".gv", который содержит описание графа на языке DOT. Формат этого языка простой и его может читать даже человек, но главное с помощью специальных программ его можно представить в графическом виде. Примером таких программ может служить пакет утилит для автоматической визуализации графов Graphviz исходный код которого доступен на GitLab).
    Дополнительным параметром при генерации графа является параметр "--graphviz-exclude", который позволяет исключить из графа определенные модули. Список модулей для исключения может использовать маску (символ *), а сами модули в нем разделяются точкой с запятой. Например: --graphviz-exclude:System.*;VCL.*;FMX.* исключает все модули System, VCL и FireMonkey. Модули System, SysInit и System.Variants исключаются компилятором всегда.
    Рассмотрим простое приложение с основной формой, дополнительным диалоговым окном и модулем данных. Они ссылаются друг на друга из секций интерфейса или реализации. Запустим компиляцию проекта этого приложения с помощью командной строки:
dcc32 --graphviz --graphviz-exclude:System.*;Vcl.*;WinApi.* GraphTest.dpr
и онлайн построим граф по содержимому полученного gv-файла в Graphviz Visual Editor:
Пример графа зависимостей между модулями проекта на Delphi 12 в Graphviz-формате
Примечание. Пунктирная линия использована для модулей указанных в uses раздела реализации.

Комментариев нет:

Отправить комментарий