Я использую clang::ast_matchers::dynamic::DynTypedMatcher, созданный с помощью вызова clang::ast_matchers::dynamic::Parser::parseMatcherExpression() для запроса cxxMethodDecl() в единице перевода.
Я хотел бы иметь возможность проверять комментарии к документации как часть моего инструмента и из моего clang::ast_matchers::MatchFinder::MatchCallback. Я могу получать необработанные комментарии для определенных совпадающих записей clang::CXXMethodDecl, но не для других, вызывая что-то нравится:
Код: Выделить всё
auto& ast_ctx = ast_unit_ptr->getASTContext();
auto& src_mgr = ast_ctx.getSourceManager();
if (const auto comment = ast_ctx.getRawCommentForDeclNoCache(decl);
comment != nullptr)
{
auto text = comment->getRawText(src_mgr);
...
}
Я могу перебирать комментарии во включениях для единицы перевода, используя что-то вроде:
Код: Выделить всё
for (auto it = src_mgr.fileinfo_begin(); it != src_mgr.fileinfo_end(); ++it)
{
auto info = it->getFirst();
auto file_path = std::filesystem::path{ std::string_view{ info.getName() } };
auto file_id = src_mgr.translateFile(info);
if (file_path.has_extension() && file_path.extension().string().ends_with("h"))
{
const auto comment_map = ast_ctx.Comments.getCommentsInFile(file_id);
if (comment_map)
{
for (auto [offset, comment_ptr] : comment_map)
{
// TODO: Match the offset to the CXXMethodDecl
}
}
}
}
Я пробовал пройтись по цепочке decl->getPreviousDecl(), чтобы увидеть, есть ли какие-либо связанные объявления, которые могли бы иметь комментарии, но я не нашел там ничего для методов, которые, как я знаю, конкретно имеют комментарии в заголовок.
Это использование clang+llvm-21.1.0
Подробнее здесь: https://stackoverflow.com/questions/797 ... s-that-are
Мобильная версия