[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