Clang LibTooling позволяет автоматически вносить исправления в исходные файлы C++ на основе диагностики FixIt. Инструмент предлагает замену найденных синтаксических конструкций, позволяя не только выводить сообщения в консоль, но и изменять исходный код. Это достигается за счет использования AST-matchers, которые позволяют находить нужные паттерны в синтаксическом дереве.

В основе работы лежит класс
Пример демонстрирует замену оператора
Инструмент поддерживает как изменение файлов «на месте», так и создание новых файлов с заданным суффиксом. Для управления процессом используются опции командной строки. Это позволяет гибко настраивать поведение инструмента под нужды проекта. Для интеграции всего функционала используется

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