AST で一般化された属性を見つけることができませんでしたが (AST の作成後ではなく、AST の作成時または作成前に削除されたようです)、回避策を見つけました。
annotate
次の形式の clang 属性があります。
__attribute__((annotate("something")))
マクロを使用すると、合理的な構文と AST で表示される注釈を取得できます。
#define INTERESTING __attribute__((annotate("interesting")))
class Foo
{
public:
INTERESTING void foo();
void bar();
};
属性はメソッド ノードの子になり、その display_name は注釈文字列になります。考えられる AST ダンプ:
<CursorKind.TRANSLATION_UNIT>
"test.h"
{
__builtin_va_list <CursorKind.TYPEDEF_DECL>
"__builtin_va_list"
type_info <CursorKind.CLASS_DECL>
"type_info"
Foo <CursorKind.CLASS_DECL>
"Foo"
{
<CursorKind.CXX_ACCESS_SPEC_DECL>
""
foo <CursorKind.CXX_METHOD>
"foo()"
{
<CursorKind.ANNOTATE_ATTR>
"interesting"
}
bar <CursorKind.CXX_METHOD>
"bar()"
}
}
tooと同じ出力を生成しvoid foo INTERESTING ();
ます。