Clang LibTooling позволяет автоматически вносить исправления в исходные файлы C++ на основе диагностики FixIt. Инструмент предлагает замену найденных синтаксических конструкций, позволяя не только выводить сообщения в консоль, но и изменять исходный код. Это достигается за счет использования AST-matchers, которые позволяют находить нужные паттерны в синтаксическом дереве.
В основе работы лежит класс
Пример демонстрирует замену оператора
Инструмент поддерживает как изменение файлов «на месте», так и создание новых файлов с заданным суффиксом. Для управления процессом используются опции командной строки. Это позволяет гибко настраивать поведение инструмента под нужды проекта. Для интеграции всего функционала используется
Изображение носит иллюстративный характер
В основе работы лежит класс
MatchHandler
, который обрабатывает найденные совпадения и формирует исправления. FixItRewriter
отвечает за непосредственное внесение изменений в файлы, используя возможности диагностической подсистемы Clang. Важным моментом является корректное управление жизненным циклом FixItRewriter
, так как он становится клиентом диагностического движка, что требует аккуратности во избежание проблем. Пример демонстрирует замену оператора
+
на -
в выражениях вида int x = 4 + 2;
. Код использует AST Matcher для поиска таких выражений. После нахождения соответствия, создается FixItHint
, который указывает, что необходимо заменить символ +
на -
. Инструмент поддерживает как изменение файлов «на месте», так и создание новых файлов с заданным суффиксом. Для управления процессом используются опции командной строки. Это позволяет гибко настраивать поведение инструмента под нужды проекта. Для интеграции всего функционала используется
FrontendAction
, который обрабатывает файлы.