Как преобразовать инициализацию копии в инициализацию прямого списка при проверке clang-tidy?C++

Программы на C++. Форум разработчиков
Anonymous
 Как преобразовать инициализацию копии в инициализацию прямого списка при проверке clang-tidy?

Сообщение Anonymous »

Я хотел бы написать проверку clang-tidy, которая находит объявления полей с инициализацией копирования (

Код: Выделить всё

ICIS_CopyInit
) и может изменить их на прямую инициализацию списка (

Код: Выделить всё

ICIS_ListInit
).
Существует способ найти именно объявления полей с инициализацией копирования:
  • match FieldDecl
  • пропустить, если !hasInClassInitializer()
    пропустить, если ICIS_CopyInit != getInClassInitStyle()< /li>
Тогда я могу получить объявление в виде строки в соответствии с этим ответом: https://stackoverflow.com/a/61510968/2492801 и заменить =< /code> подпишите открывающей фигурной скобкой и добавьте закрывающую фигурную скобку в конце.
Но это выглядит неуклюже. Было бы нормально, если бы int test = 3;. Но такой подход, например, превратил бы инициализацию копии MyStruct m_data = MyStruct(1, 3); в MyStruct m_data{MyStruct(1, 3)};, что не лучше, поскольку по-прежнему позволяет сузить преобразование аргументов конструктора MyStruct.
Вместо этого я хотел бы иметь MyStruct m_data{1, 3};. Является ли создание строки замены кода для FixItHint::CreateReplacement(...) путем поиска и замены в строке объявления единственным, что я могу сделать? Или я могу использовать методы clang AST для создания такой замены кода?

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-in-clang

Вернуться в «C++»