Получить тип VarDecl в Clang Tidy Check - PullRequest
0 голосов
/ 30 апреля 2018

Я хотел бы иметь возможность настроить проверку в clang tidy таким образом, чтобы с учетом некоторой переменной (my_var) я мог проверить, соответствует ли она определенному typedef (например, uint16_t) или базовому типу typedef (если целое или плавать).

Рационально немного глупо, наша команда требует, чтобы код был проверен с использованием системной венгерской нотации (например, uint32_t lMyVar = 0;) Я не думаю, что стоит потратить время на поддержание нотации, но я проиграл эту битву, поэтому Теперь я хочу автоматизировать это обслуживание. Я также считаю, что это хороший способ начать работать с clang и clang-tidy.

Я начал с написания простого средства сравнения для получения VarDecls: Finder->addMatcher(varDecl().bind("var"),this);

Оттуда я действительно не знаю, что делать с Matched Decl. Запуск MatchedDecl->dump(), но такие вещи, как MatchedDecl->getType(), не кажутся такими полезными, как я надеюсь. Какие-нибудь предложения от людей, более опытных с Clang AST?

1 Ответ

0 голосов
/ 02 мая 2018

С учетом этого соответствия:

Finder->addMatcher(varDecl().bind("var"),this);

Может использовать это, чтобы получить имя первого определения типа в функции проверки:

const auto* MatchedDecl       = Result.Nodes.getNodeAs<VarDecl>("var");
auto        MatchedType       = MatchedDecl -> getType();
auto        MatchedIdentifier = MatchedType.getBaseTypeIdentifier();
auto        VarType           = MatchedIdentifier -> getName();
...