[clang-tools-extra] [clang-doc] Precommit concept tests (PR #144160)
Erick Velez via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 13 14:17:16 PDT 2025
https://github.com/evelez7 created https://github.com/llvm/llvm-project/pull/144160
None
>From ad20a26907b065ae6977dab7e0f5c2ef5e0c7ef0 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 | 29 ++++++++++++
.../test/clang-doc/json/concept.cpp | 37 +++++++++++++++
.../test/clang-doc/json/function-requires.cpp | 46 +++++++++++++++++++
3 files changed, 112 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..022ce94d8c5af
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/json/class-requires.cpp
@@ -0,0 +1,29 @@
+// 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: "Addable<T>"
+// CHECK-NOT: ],
+// CHECK-NEXT: "Parameters": [
+// CHECK-NEXT: "typename T"
+// CHECK-NEXT: ]
+// CHECK-NEXT: },
+// CHECK-NEXT: "USR": "{{[A-F0-9]*}}"
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..78be607d1f2f1
--- /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..4436ecb879306
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
@@ -0,0 +1,46 @@
+// 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> {
+ ++t;
+ t++;
+}
+
+// CHECK: "Functions": [
+// CHECK-NEXT: {
+// CHECK-NEXT: "IsStatic": false,
+// CHECK-NEXT: "Location": {
+// CHECK-NEXT: "Filename": "{{.*}}function-requires.cpp",
+// CHECK-NEXT: "LineNumber": 11
+// CHECK-NEXT: },
+// 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: "Incrementable<T>"
+// CHECK-NOT: ],
+// CHECK-NEXT: "Parameters": [
+// CHECK-NEXT: "typename T"
+// CHECK-NEXT: ]
+// CHECK-NEXT: },
+// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
+// CHECK-NEXT: }
More information about the cfe-commits
mailing list