// RUN: rm -rf %t && mkdir -p %t // RUN: clang-doc --output=%t --format=json --executor=standalone %s // RUN: FileCheck %s < %t/_ZTV7MyClass.json struct Foo; // This is a nice class. // It has some nice methods and fields. // @brief This is a brief description. struct MyClass { int PublicField; int myMethod(int MyParam); static void staticMethod(); const int& getConst(); enum Color { RED, GREEN, BLUE = 5 }; typedef int MyTypedef; class NestedClass; friend struct Foo; template friend void friendFunction(int); protected: int protectedMethod(); int ProtectedField; }; // CHECK: { // CHECK-NEXT: "Description": { // CHECK-NEXT: "BriefComments": [ // CHECK-NEXT: [ // CHECK-NEXT: { // CHECK-NEXT: "TextComment": " This is a brief description." // CHECK: "HasBriefComments": true, // CHECK-NEXT: "HasParagraphComments": true, // CHECK-NEXT: "ParagraphComments": [ // CHECK-NEXT: [ // CHECK-NEXT: { // CHECK-NEXT: "TextComment": " This is a nice class." // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "TextComment": " It has some nice methods and fields." // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "TextComment": "" // CHECK-NEXT: } // CHECK: "DocumentationFileName": "_ZTV7MyClass", // CHECK: "Enums": [ // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "InfoType": "enum", // CHECK-NEXT: "Location": { // CHECK-NEXT: "Filename": "{{.*}}class.cpp", // CHECK-NEXT: "LineNumber": 17 // CHECK-NEXT: }, // CHECK-NEXT: "Members": [ // CHECK-NEXT: { // CHECK-NEXT: "Name": "RED", // CHECK-NEXT: "Value": "0" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Name": "GREEN", // CHECK-NEXT: "Value": "1" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Name": "BLUE", // CHECK-NEXT: "ValueExpr": "5" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "Name": "Color", // CHECK-NEXT: "Namespace": [ // CHECK-NEXT: "MyClass", // CHECK-NEXT: "GlobalNamespace" // CHECK-NEXT: ], // CHECK-NEXT: "Scoped": false, // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "Friends": [ // CHECK-NEXT: { // CHECK-NEXT: "IsClass": false, // CHECK-NEXT: "Params": [ // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Name": "", // CHECK-NEXT: "Type": "int" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "Reference": { // CHECK-NEXT: "Name": "friendFunction", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "friendFunction", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: "ReturnType": { // CHECK-NEXT: "IsBuiltIn": true, // CHECK-NEXT: "IsTemplate": false, // CHECK-NEXT: "Name": "void", // CHECK-NEXT: "QualName": "void", // CHECK-NEXT: "USR": "0000000000000000000000000000000000000000" // CHECK-NEXT: }, // CHECK-NEXT: "Template": { // CHECK-NEXT: "Parameters": [ // CHECK-NEXT: "typename T" // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "IsClass": true, // CHECK-NEXT: "Reference": { // CHECK-NEXT: "Name": "Foo", // CHECK-NEXT: "Path": "GlobalNamespace", // CHECK-NEXT: "QualName": "Foo", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: } // CHECK-NEXT: ], // COM: FIXME: FullName is not emitted correctly. // CHECK-NEXT: "FullName": "", // CHECK-NEXT: "HasEnums": true, // CHECK-NEXT: "HasPublicFunctions": true, // CHECK-NEXT: "HasPublicMembers": true, // CHECK-NEXT: "HasRecords": true, // CHECK-NEXT: "InfoType": "record", // CHECK-NEXT: "IsTypedef": false, // CHECK-NEXT: "Location": { // CHECK-NEXT: "Filename": "{{.*}}class.cpp", // CHECK-NEXT: "LineNumber": 10 // CHECK-NEXT: }, // CHECK-NEXT: "MangledName": "_ZTV7MyClass", // CHECK-NEXT: "Name": "MyClass", // CHECK-NEXT: "Namespace": [ // CHECK-NEXT: "GlobalNamespace" // CHECK-NEXT: ], // CHECK-NEXT: "Path": "GlobalNamespace", // CHECK-NEXT: "ProtectedFunctions": [ // CHECK-NEXT: { // CHECK-NEXT: "InfoType": "function", // CHECK-NEXT: "IsStatic": false, // CHECK-NEXT: "Name": "protectedMethod", // CHECK-NEXT: "Namespace": [ // CHECK-NEXT: "MyClass", // CHECK-NEXT: "GlobalNamespace" // CHECK-NEXT: ], // CHECK-NEXT: "ReturnType": { // CHECK-NEXT: "IsBuiltIn": true, // CHECK-NEXT: "IsTemplate": false, // CHECK-NEXT: "Name": "int", // CHECK-NEXT: "QualName": "int", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "ProtectedMembers": [ // CHECK-NEXT: { // CHECK-NEXT: "Name": "ProtectedField", // CHECK-NEXT: "Type": "int" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "PublicFunctions": [ // CHECK-NEXT: { // CHECK-NEXT: "InfoType": "function", // CHECK-NEXT: "IsStatic": false, // CHECK-NEXT: "Name": "myMethod", // CHECK-NEXT: "Namespace": [ // CHECK-NEXT: "MyClass", // CHECK-NEXT: "GlobalNamespace" // CHECK-NEXT: ], // CHECK-NEXT: "Params": [ // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Name": "MyParam", // CHECK-NEXT: "Type": "int" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "ReturnType": { // CHECK-NEXT: "IsBuiltIn": true, // CHECK-NEXT: "IsTemplate": false, // CHECK-NEXT: "Name": "int", // CHECK-NEXT: "QualName": "int", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK: "IsStatic": true, // CHECK: "Name": "getConst", // CHECK: "ReturnType": { // CHECK-NEXT: "IsBuiltIn": false, // CHECK-NEXT: "IsTemplate": false, // CHECK-NEXT: "Name": "const int &", // CHECK-NEXT: "QualName": "const int &", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK: "PublicMembers": [ // CHECK-NEXT: { // CHECK-NEXT: "Name": "PublicField", // CHECK-NEXT: "Type": "int" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "Records": [ // CHECK-NEXT: { // CHECK-NEXT: "DocumentationFileName": "_ZTVN7MyClass11NestedClassE", // CHECK-NEXT: "End": true, // CHECK-NEXT: "Name": "NestedClass", // CHECK-NEXT: "Path": "GlobalNamespace{{[\/]+}}MyClass", // CHECK-NEXT: "QualName": "NestedClass", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: "TagType": "struct", // CHECK-NEXT: "Typedefs": [ // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "InfoType": "typedef", // CHECK-NEXT: "IsUsing": false, // CHECK-NEXT: "Location": { // CHECK-NEXT: "Filename": "{{.*}}class.cpp", // CHECK-NEXT: "LineNumber": 23 // CHECK-NEXT: }, // CHECK-NEXT: "Name": "MyTypedef", // CHECK-NEXT: "Namespace": [ // CHECK-NEXT: "MyClass", // CHECK-NEXT: "GlobalNamespace" // CHECK-NEXT: ], // CHECK-NEXT: "TypeDeclaration": "", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}", // CHECK-NEXT: "Underlying": { // CHECK-NEXT: "IsBuiltIn": true, // CHECK-NEXT: "IsTemplate": false, // CHECK-NEXT: "Name": "int", // CHECK-NEXT: "QualName": "int", // CHECK-NEXT: "USR": "0000000000000000000000000000000000000000" // CHECK: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }