Ответ 1
С еще одним выкапыванием я нашел это:
Для любого релевантного посещения Decl (VisitXXXDecl
) я могу сделать это:
virtual bool VisitDecl(Decl* d)
{
ASTContext& ctx = d->getASTContext();
SourceManager& sm = ctx.getSourceManager();
const RawComment* rc = d->getASTContext().getRawCommentForDeclNoCache(d);
if (rc)
{
//Found comment!
SourceRange range = rc->getSourceRange();
PresumedLoc startPos = sm.getPresumedLoc(range.getBegin());
PresumedLoc endPos = sm.getPresumedLoc(range.getEnd());
std::string raw = rc->getRawText(sm);
std::string brief = rc->getBriefText(ctx);
// ... Do something with positions or comments
}
// ...
}
Обратите внимание, что это указывает (насколько я мог видеть...) комментарии, которые находятся в строке (-ах) выше (и рядом!), в текущую декларацию в коде и которые находятся в одном из следующих форматов
-
/// Comment
-
/** Comment */
-
//! Comment
Например, в следующем случае:
/// A field with a long long comment
/// A two-liner
long long LongLongData;
raw
будет:
/// A field with a long long comment
/// A two-liner
И brief
будет:
A field with a long long comment A two-liner
В любом случае, это достаточно хорошо для моих нужд.