clang llvm

ClassRepresents
TagDeclAbstract base for C/C++ tag declarations (struct, union, class, enum)
RecordDeclC struct or union definition
CXXRecordDeclC++ class or struct definition (with methods, bases)
EnumDeclC/C++ enum definition
EnumConstantDeclSingle enumerator inside an EnumDecl
TypedefNameDeclC typedef declaration
TypeAliasDeclC++11 using Name = ...; type alias
VarDeclVariable declaration (global, local, static, extern)
FieldDeclNon-static data member in a record/class
FunctionDeclFree or static member function
CXXMethodDeclC++ non-static member function
CXXConstructorDeclC++ constructor
CXXDestructorDeclC++ destructor
CXXConversionDeclC++ conversion operator
ParmVarDeclFunction parameter
LinkageSpecDeclextern "C" or extern "C++" linkage region
NamespaceDeclC++ namespace { ... }
NamespaceAliasDeclC++ namespace A = B; alias
UsingDirectiveDeclC++ using namespace N; directive
UsingDeclC++ using N::X; declaration
FunctionTemplateDeclC++ function template declaration
ClassTemplateDeclC++ class template declaration
AccessSpecDeclC++ public:, protected:, private: label in class
ObjCInterfaceDeclObjective-C @interface definition
ObjCCategoryDeclObjective-C @interface MyClass(Category) { ... }
ObjCProtocolDeclObjective-C @protocol definition
ObjCImplementationDeclObjective-C @implementation definition
ImportDecl#import or @import of a module/header
StaticAssertDeclC++17 static_assert(...) declaration
FriendDeclC++ friend declaration inside a class
LabelDeclLabel for goto
CapturedDeclLambda/coroutine captured variables
BlockDeclObjective-C block literal function declaration