================
@@ -0,0 +1,104 @@
+// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s 
readability-redundant-lambda-parentheses %t
+// RUN: %check_clang_tidy -std=c++20 -check-suffixes=,CXX20 %s 
readability-redundant-lambda-parentheses %t
+// RUN: %check_clang_tidy -std=c++23-or-later -check-suffixes=,CXX20,CXX23 %s 
readability-redundant-lambda-parentheses %t
+
+
+int main() {
+  // Basic cases - warn in all standards
+  auto a = []() { return 42; };
+  // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: redundant empty parameter list 
in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES:   auto a = [] { return 42; };
+
+  auto b = [x = 1]() { return x; };
+  // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: redundant empty parameter list 
in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES:   auto b = [x = 1] { return x; };
+
+  auto c = []() {};
+  // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: redundant empty parameter list 
in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES:   auto c = [] {};
+
+  auto v = 1;
+  auto call = [&v]() { return v; };
+  // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: redundant empty parameter list 
in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES:   auto call = [&v] { return v; };
+
+  // Should NOT warn - has parameters
+  auto d = [](int x) { return x; };
+  auto e = [](int x, int y) { return x + y; };
+
+  // Should NOT warn - macro
+#define LAMBDA []() { return 42; }
+  auto k = LAMBDA;
+#undef LAMBDA
+
+  // Generic lambda - warns in C++20 and later
+#if __cplusplus >= 202002L
+  auto f = []<class T>() { return sizeof(T); };
+  // CHECK-MESSAGES-CXX20: :[[@LINE-1]]:23: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX20:   auto f = []<class T> { return sizeof(T); };
+
+  // Should NOT warn - requires clause after parens
+  auto g = []<class T>() requires (sizeof(T) > 0) {};
+
+  // Should NOT warn - has parameters
+  auto h = []<class T>(T x) { return x; };
+#endif
+
+  // Specifier cases - warn only in C++23, valid syntax in all standards
+  auto i = []() mutable {};
+  // CHECK-MESSAGES-CXX23: :[[@LINE-1]]:14: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX23:   auto i = [] mutable {};
+
+  auto j = []() noexcept {};
+  // CHECK-MESSAGES-CXX23: :[[@LINE-1]]:14: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX23:   auto j = [] noexcept {};
+
+  auto l = []() -> int { return 0; };
+  // CHECK-MESSAGES-CXX23: :[[@LINE-1]]:14: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX23:   auto l = [] -> int { return 0; };
+
+  auto m = []() mutable noexcept {};
+  // CHECK-MESSAGES-CXX23: :[[@LINE-1]]:14: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX23:   auto m = [] mutable noexcept {};
+
+  auto n = []() constexpr { return 42; };
+  // CHECK-MESSAGES-CXX23: :[[@LINE-1]]:14: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX23:   auto n = [] constexpr { return 42; };
+
+  // consteval only valid in C++20+
+#if __cplusplus >= 202002L
+  auto o = []() consteval { return 42; };
+  // CHECK-MESSAGES-CXX23: :[[@LINE-1]]:14: warning: redundant empty parameter 
list in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES-CXX23:   auto o = [] consteval { return 42; };
+#endif
+
+  // Should NOT warn - attribute after parens
+  auto p = []() [[]] {};
+
+  // Should warn - attribute before parens
+  auto q = [] [[]] () {};
+  // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant empty parameter list 
in lambda expression [readability-redundant-lambda-parentheses]
+  // CHECK-FIXES:   auto q = [] {{\[\[}}{{\]\]}} {};
+
+  // Should NOT warn - attribute both before and after parens
----------------
unterumarmung wrote:

Please use `// CHECK-MESSAGES-NOT: ` for negative test cases

https://github.com/llvm/llvm-project/pull/190438
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to