1.1Kпросмотров
24 марта 2025 г.
Score: 1.3K
tidy fisting Следующая ступень в поиске фистинга — проверка в clang-tidy. Очень неприятно было собирать clang-tools-extra (на ноутбуке неприлично тяжело). Безотлагательно приступаем! Проверку добавляем скриптом:
./clang-tools-extra/clang-tidy/add_new_check.py misc fisting
Здесь в качестве категории проверок была выбрана категория misc, которая соответствует проверкам без категории. Будет создано несколько файлов и изменена пара существующих. Нас интересует только clang-tools-extra/clang-tidy/misc/FistingCheck.cpp, где заменим вставленную проверку-placeholder.
void FistingCheck::registerMatchers(MatchFinder Finder) { Finder->addMatcher(namedDecl(hasName("fisting")).bind("fistingId"), this);
}
Мы видели это в другом посте. И напишем свою проверку и вывод диагностики.
void FistingCheck::check(const MatchFinder::MatchResult &Result) { const auto decl = Result.Nodes.getNodeAs<NamedDecl>("fistingId"); if (decl == nullptr) return; diag(decl->getLocation(), "%0 detected") << decl << FixItHint::CreateInsertion(decl->getLocation(), "fisting"); diag(decl->getLocation(), "use 'fisting' to earn 300$", DiagnosticIDs::Note);
} Осталось дописать документацию, тесты... Тут уже сами справитесь. #compiler #llvm