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 <erickvel...@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: } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits