Add support for documenting concepts. This handles concepts and constraints on function and class templates. Atomic constraints are not considered yet. We don't order constraints based on their conjunctive or disjunctive properties.
80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
// RUN: rm -rf %t && mkdir -p %t
|
|
// RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s
|
|
// RUN: FileCheck %s < %t/GlobalNamespace/index.json
|
|
|
|
template<typename T>
|
|
concept Incrementable = requires(T x) {
|
|
++x;
|
|
x++;
|
|
};
|
|
|
|
template<typename T> void increment(T t) requires Incrementable<T>;
|
|
|
|
template<Incrementable T> Incrementable auto incrementTwo(T t);
|
|
|
|
// CHECK: "Functions": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "IsStatic": false,
|
|
// CHECK-NEXT: "Name": "increment",
|
|
// CHECK-NEXT: "Params": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "Name": "t",
|
|
// CHECK-NEXT: "Type": "T"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "ReturnType": {
|
|
// CHECK-NEXT: "IsBuiltIn": false,
|
|
// CHECK-NEXT: "IsTemplate": false,
|
|
// CHECK-NEXT: "Name": "void",
|
|
// CHECK-NEXT: "QualName": "void",
|
|
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "Template": {
|
|
// CHECK-NEXT: "Constraints": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "Expression": "Incrementable<T>",
|
|
// CHECK-NEXT: "Name": "Incrementable",
|
|
// CHECK-NEXT: "Path": "",
|
|
// CHECK-NEXT: "QualName": "Incrementable",
|
|
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "Parameters": [
|
|
// CHECK-NEXT: "typename T"
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "IsStatic": false,
|
|
// CHECK-NEXT: "Name": "incrementTwo",
|
|
// CHECK-NEXT: "Params": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "Name": "t",
|
|
// CHECK-NEXT: "Type": "T"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "ReturnType": {
|
|
// CHECK-NEXT: "IsBuiltIn": false,
|
|
// CHECK-NEXT: "IsTemplate": false,
|
|
// CHECK-NEXT: "Name": "Incrementable auto",
|
|
// CHECK-NEXT: "QualName": "Incrementable auto",
|
|
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "Template": {
|
|
// CHECK-NEXT: "Constraints": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "Expression": "Incrementable<T>",
|
|
// CHECK-NEXT: "Name": "Incrementable",
|
|
// CHECK-NEXT: "Path": "",
|
|
// CHECK-NEXT: "QualName": "Incrementable",
|
|
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "Parameters": [
|
|
// CHECK-NEXT: "Incrementable T"
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
|
|
// CHECK-NEXT: }
|