Clang как средство статического анализа: обработка только указанных файлов?

Ведется разработка средства статического анализа кода C++. Основная работа выполняется средствами Clang. Возникла следующая проблема: не удается понять, как заставить Clang (и наш пользовательский код) выдавать предупреждения и прочую информацию только относительно кода, написанного конечным пользователем, а не библиотечного. При этом ясно, что просто игнорировать include'ы нельзя — тогда не распарсить код, использующий имена, объявленные в соостветсвующих заголовочниках.
  • Вопрос задан
  • 4270 просмотров
Пригласить эксперта
Ответы на вопрос 3
Ramires
@Ramires
Думаю, Вы уже смотрели эти ссылки, но вдруг…
Статья по Clang API
Плагин для SublimeText2, парсящий с помощью Clang'а. Написан на питоне.
Больше ничего вспомнить не смог.
Ответ написан
@FlexFerrum
Всё зависит от того, какой именно механизм используется для получения диагностики от clang'а и выдачи этой диагностики пользователю. Если это делается на базе собственного DiagnosticRenderer'а, то там с каждым сообщением ассоциируется место в исходном тексте, для которого оно было выдано. Сравниваете имя файла, для которого было выдано сообщение, с имением обрабатываемого файла — и вуаля, если файл не текущий, ничего не выводите.
Если используется clang-c API, то можно воспользоваться методом clang_getDiagnosticSetFromTU, а потом фильтровать всё так же — по имени файла, для которого было выдано то или иное сообщение.
Ответ написан
@FlexFerrum
И ещё одна ссылка, которая может оказаться полезной. Это парсер C++-кода на базе clang для Qt Creator'а:
https://qt.gitorious.org/qt-creator/qt-creator/trees/wip/clang/src/plugins/clangcodemodel
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы