First step towards correctly formatting lambdas.
Implements parsing of lambdas in the UnwrappedLineParser.
This introduces the correct line breaks; the formatting of
lambda captures are still incorrect, and the braces are also
still formatted as if they were braced init lists instead of
blocks.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189818 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index bdbc155..e9bf2c5 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -3681,7 +3681,7 @@
verifyGoogleFormat("return sizeof(int**);");
verifyIndependentOfContext("Type **A = static_cast<Type **>(P);");
verifyGoogleFormat("Type** A = static_cast<Type**>(P);");
- verifyFormat("auto a = [](int **&, int ***) {};");
+ verifyFormat("auto a = [](int **&, int ***) {\n};");
verifyIndependentOfContext("InvalidRegions[*R] = 0;");
@@ -3865,7 +3865,7 @@
verifyFormat("f(foo).b;");
verifyFormat("f(foo)(b);");
verifyFormat("f(foo)[b];");
- verifyFormat("[](foo) { return 4; }(bar)];");
+ verifyFormat("[](foo) {\n return 4;\n}(bar);");
verifyFormat("(*funptr)(foo)[4];");
verifyFormat("funptrs[4](foo)[4];");
verifyFormat("void f(int *);");
@@ -6257,5 +6257,45 @@
"}");
}
+TEST_F(FormatTest, FormatsLambdas) {
+ // FIXME: The formatting is incorrect; this test currently checks that
+ // parsing of the unwrapped lines doesn't regress.
+ verifyFormat(
+ "int c = [b]() mutable {\n"
+ " return [&b]{\n"
+ " return b++;\n"
+ " }();\n"
+ "}();\n");
+ verifyFormat(
+ "int c = [&]{\n"
+ " [ = ]{\n"
+ " return b++;\n"
+ " }();\n"
+ "}();\n");
+ verifyFormat(
+ "int c = [ &, &a, a]{\n"
+ " [ =, c, &d]{\n"
+ " return b++;\n"
+ " }();\n"
+ "}();\n");
+ verifyFormat(
+ "int c = [&a, &a, a]{\n"
+ " [ =, a, b, &c]{\n"
+ " return b++;\n"
+ " }();\n"
+ "}();\n");
+ verifyFormat(
+ "auto c = {[&a, &a, a]{\n"
+ " [ =, a, b, &c]{\n"
+ " return b++;\n"
+ " }();\n"
+ "} }\n");
+ verifyFormat(
+ "auto c = {[&a, &a, a]{\n"
+ " [ =, a, b, &c]{\n"
+ " }();\n"
+ "} }\n");
+}
+
} // end namespace tooling
} // end namespace clang