[clang-tools-extra] [clang-doc] Precommit concept tests (PR #144160)

Erick Velez via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 20 14:20:44 PDT 2025


https://github.com/evelez7 updated https://github.com/llvm/llvm-project/pull/144160

>From 9c18fd3f486b48fd883fc6ba0c6a23255d0659f6 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvelez7 at gmail.com>
Date: Fri, 13 Jun 2025 14:16:17 -0700
Subject: [PATCH] [clang-doc] Precommit concept tests

---
 .../test/clang-doc/json/class-requires.cpp    | 34 ++++++++
 .../test/clang-doc/json/concept.cpp           | 37 +++++++++
 .../test/clang-doc/json/function-requires.cpp | 79 +++++++++++++++++++
 3 files changed, 150 insertions(+)
 create mode 100644 clang-tools-extra/test/clang-doc/json/class-requires.cpp
 create mode 100644 clang-tools-extra/test/clang-doc/json/concept.cpp
 create mode 100644 clang-tools-extra/test/clang-doc/json/function-requires.cpp

diff --git a/clang-tools-extra/test/clang-doc/json/class-requires.cpp b/clang-tools-extra/test/clang-doc/json/class-requires.cpp
new file mode 100644
index 0000000000000..af108a402b403
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/json/class-requires.cpp
@@ -0,0 +1,34 @@
+// 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/MyClass.json
+
+template<typename T>
+concept Addable = requires(T a, T b) {
+  { a + b };
+};
+
+template<typename T>
+requires Addable<T>
+struct MyClass;
+
+// CHECK:       "Name": "MyClass",
+// CHECK-NEXT:  "Namespace": [
+// CHECK-NEXT:    "GlobalNamespace"
+// CHECK-NEXT:  ],
+// CHECK-NEXT:  "Path": "GlobalNamespace",
+// CHECK-NEXT:  "TagType": "struct",
+// CHECK-NEXT:  "Template": {
+// CHECK-NOT:     "Constraints": [
+// CHECK-NOT:       {
+// CHECK-NOT:         "Expression": "Addable<T>",
+// CHECK-NOT:         "Name": "Addable",
+// CHECK-NOT:         "Path": "",
+// CHECK-NOT:         "QualName": "Addable",
+// CHECK-NOT:         "USR": "{{[0-9A-F]*}}"
+// CHECK-NOT:       }
+// CHECK-NOT:     ],
+// CHECK-NEXT:    "Parameters": [
+// CHECK-NEXT:      "typename T"
+// CHECK-NEXT:    ]
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "USR": "{{[0-9A-F]*}}"
diff --git a/clang-tools-extra/test/clang-doc/json/concept.cpp b/clang-tools-extra/test/clang-doc/json/concept.cpp
new file mode 100644
index 0000000000000..624f71c6bf9b3
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/json/concept.cpp
@@ -0,0 +1,37 @@
+// RUN: rm -rf %t && mkdir -p %t
+// RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s
+
+// Requires that T suports post and pre-incrementing.
+template<typename T>
+concept Incrementable = requires(T x) {
+  ++x;
+  x++;
+};
+
+// CHECK:      {
+// CHECK-NOT:    "Concepts": [
+// CHECK-NOT:      {
+// CHECK-NOT:        "ConstraintExpression": "requires (T x) { ++x; x++; }",
+// CHECK-NOT:        "Description": [
+// CHECK-NOT:          {
+// CHECK-NOT:            "FullComment": {
+// CHECK-NOT:              "Children": [
+// CHECK-NOT:                {
+// CHECK-NOT:                  "ParagraphComment": {
+// CHECK-NOT:                    "Children": [
+// CHECK-NOT:                      {
+// CHECK-NOT:                        "TextComment": " Requires that T suports post and pre-incrementing."
+// CHECK-NOT:        ],
+// CHECK-NOT:        "IsType": true,
+// CHECK-NOT:        "Name": "Incrementable",
+// CHECK-NOT:        "Template": {
+// CHECK-NOT:          "Parameters": [
+// CHECK-NOT:            "typename T"
+// CHECK-NOT:          ]
+// CHECK-NOT:        },
+// CHECK-NOT:        "USR": "{{[0-9A-F]*}}"
+// CHECK-NOT:      }
+// CHECK-NOT:    ],
+// CHECK:        "Name": "",
+// CHECK:        "USR": "0000000000000000000000000000000000000000"
+// CHECK:      }
diff --git a/clang-tools-extra/test/clang-doc/json/function-requires.cpp b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
new file mode 100644
index 0000000000000..aa62464d07b4b
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
@@ -0,0 +1,79 @@
+// 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-NOT:         "Constraints": [
+// CHECK-NOT:           {
+// CHECK-NOT:             "Expression": "Incrementable<T>",
+// CHECK-NOT:             "Name": "Incrementable",
+// CHECK-NOT:             "Path": "",
+// CHECK-NOT:             "QualName": "Incrementable",
+// CHECK-NOT:             "USR": "{{[0-9A-F]*}}"
+// CHECK-NOT:           }
+// CHECK-NOT:         ],
+// 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-NOT:         "Constraints": [
+// CHECK-NOT:           {
+// CHECK-NOT:             "Expression": "Incrementable<T>",
+// CHECK-NOT:             "Name": "Incrementable",
+// CHECK-NOT:             "Path": "",
+// CHECK-NOT:             "QualName": "Incrementable",
+// CHECK-NOT:             "USR": "{{[0-9A-F]*}}"
+// CHECK-NOT:           }
+// CHECK-NOT:         ],
+// CHECK-NEXT:        "Parameters": [
+// CHECK-NEXT:          "Incrementable T"
+// CHECK-NEXT:        ]
+// CHECK-NEXT:      },
+// CHECK-NEXT:      "USR": "{{[0-9A-F]*}}"
+// CHECK-NEXT:    }



More information about the cfe-commits mailing list