summaryrefslogtreecommitdiff
path: root/clang/unittests/Format
diff options
context:
space:
mode:
authorMingming Liu <mingmingl@google.com>2025-09-10 15:25:31 -0700
committerGitHub <noreply@github.com>2025-09-10 15:25:31 -0700
commit1417dafa1db9cb1b2b09438aa9f53ea5ab6e36e2 (patch)
tree57f4b1f313c8cf74eed8819870f39c36ea263c68 /clang/unittests/Format
parent898b813bc8a6d0276bf0f4769f5f2f64b34e632d (diff)
parentb8cefcb601ddaa18482555c4ff363c01a270c2fe (diff)
Merge branch 'main' into users/mingmingl-llvm/samplefdo-profile-formatusers/mingmingl-llvm/samplefdo-profile-format
Diffstat (limited to 'clang/unittests/Format')
-rw-r--r--clang/unittests/Format/AlignBracketsTest.cpp784
-rw-r--r--clang/unittests/Format/CMakeLists.txt1
-rw-r--r--clang/unittests/Format/FormatTest.cpp774
-rw-r--r--clang/unittests/Format/FormatTestTableGen.cpp7
-rw-r--r--clang/unittests/Format/TokenAnnotatorTest.cpp8
5 files changed, 813 insertions, 761 deletions
diff --git a/clang/unittests/Format/AlignBracketsTest.cpp b/clang/unittests/Format/AlignBracketsTest.cpp
new file mode 100644
index 000000000000..c4380ae41575
--- /dev/null
+++ b/clang/unittests/Format/AlignBracketsTest.cpp
@@ -0,0 +1,784 @@
+//===- unittest/Format/AlignBracketsTest.cpp ------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "FormatTestBase.h"
+
+#define DEBUG_TYPE "align-brackets-test"
+
+namespace clang {
+namespace format {
+namespace test {
+namespace {
+
+class AlignBracketsTest : public FormatTestBase {};
+
+TEST_F(AlignBracketsTest, AlignsAfterOpenBracket) {
+ verifyFormat(
+ "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"
+ " aaaaaaaaa aaaaaaa) {}");
+ verifyFormat(
+ "SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"
+ " aaaaaaaaaaa aaaaaaaaa);");
+ verifyFormat(
+ "SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaa));");
+ FormatStyle Style = getLLVMStyle();
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
+ verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaa aaaaaaaa, aaaaaaaaa aaaaaaa) {}",
+ Style);
+ verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
+ " aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaa aaaaaaaaa);",
+ Style);
+ verifyFormat("SomeLongVariableName->someFunction(\n"
+ " foooooooo(aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaa));",
+ Style);
+ verifyFormat(
+ "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"
+ " aaaaaaaaa aaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
+ Style);
+ verifyFormat(
+ "SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"
+ " aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
+ Style);
+ verifyFormat(
+ "SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",
+ Style);
+
+ verifyFormat("bbbbbbbbbbbb(aaaaaaaaaaaaaaaaaaaaaaaa, //\n"
+ " ccccccc(aaaaaaaaaaaaaaaaa, //\n"
+ " b));",
+ Style);
+
+ Style.ColumnLimit = 30;
+ verifyFormat("for (int foo = 0; foo < FOO;\n"
+ " ++foo) {\n"
+ " bar(foo);\n"
+ "}",
+ Style);
+ Style.ColumnLimit = 80;
+
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
+ Style.BinPackArguments = false;
+ Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
+ verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaa aaaaaaaa,\n"
+ " aaaaaaaaa aaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
+ Style);
+ verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
+ " aaaaaaaaaaa aaaaaaaaa,\n"
+ " aaaaaaaaaaa aaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
+ Style);
+ verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"
+ " aaaaaaaaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",
+ Style);
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",
+ Style);
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",
+ Style);
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)),\n"
+ " aaaaaaaaaaaaaaaa);",
+ Style);
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)) &&\n"
+ " aaaaaaaaaaaaaaaa);",
+ Style);
+ verifyFormat(
+ "fooooooooooo(new BARRRRRRRRR(\n"
+ " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
+ Style);
+ verifyFormat(
+ "fooooooooooo(::new BARRRRRRRRR(\n"
+ " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
+ Style);
+ verifyFormat(
+ "fooooooooooo(new FOO::BARRRR(\n"
+ " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
+ Style);
+
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+ Style.BinPackArguments = false;
+ Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
+ verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaa aaaaaaaa,\n"
+ " aaaaaaaaa aaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ ") {}",
+ Style);
+ verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
+ " aaaaaaaaaaa aaaaaaaaa,\n"
+ " aaaaaaaaaaa aaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ ");",
+ Style);
+ verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"
+ " aaaaaaaaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaa,\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "));",
+ Style);
+ verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
+ "));",
+ Style);
+ verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
+ "));",
+ Style);
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
+ " ),\n"
+ " aaaaaaaaaaaaaaaa\n"
+ ");",
+ Style);
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
+ " ) &&\n"
+ " aaaaaaaaaaaaaaaa\n"
+ ");",
+ Style);
+ verifyFormat("void foo(\n"
+ " void (*foobarpntr)(\n"
+ " aaaaaaaaaaaaaaaaaa *,\n"
+ " bbbbbbbbbbbbbb *,\n"
+ " cccccccccccccccccccc *,\n"
+ " dddddddddddddddddd *\n"
+ " )\n"
+ ");",
+ Style);
+ verifyFormat("aaaaaaa<bbbbbbbb> const aaaaaaaaaa{\n"
+ " aaaaaaaaaaaaa(aaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
+ "};",
+ Style);
+
+ verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " const bool &aaaaaaaaa, const void *aaaaaaaaaa\n"
+ ") const {\n"
+ " return true;\n"
+ "}",
+ Style);
+ verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " const bool &aaaaaaaaaa, const void *aaaaaaaaaa\n"
+ ") const;",
+ Style);
+ verifyFormat("void aaaaaaaaa(\n"
+ " int aaaaaa, int bbbbbb, int cccccc, int dddddddddd\n"
+ ") const noexcept -> std::vector<of_very_long_type>;",
+ Style);
+ verifyFormat(
+ "x = aaaaaaaaaaaaaaa(\n"
+ " \"a aaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaa\"\n"
+ ");",
+ Style);
+ Style.ColumnLimit = 60;
+ verifyFormat("auto lambda =\n"
+ " [&b](\n"
+ " auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ " ) {};",
+ Style);
+ verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
+ ");",
+ Style);
+}
+
+TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndent) {
+ auto Style = getLLVMStyle();
+
+ StringRef Short = "functionCall(paramA, paramB, paramC);\n"
+ "void functionDecl(int a, int b, int c);";
+
+ StringRef Medium = "functionCall(paramA, paramB, paramC, paramD, paramE, "
+ "paramF, paramG, paramH, paramI);\n"
+ "void functionDecl(int argumentA, int argumentB, int "
+ "argumentC, int argumentD, int argumentE);";
+
+ verifyFormat(Short, Style);
+
+ StringRef NoBreak = "functionCall(paramA, paramB, paramC, paramD, paramE, "
+ "paramF, paramG, paramH,\n"
+ " paramI);\n"
+ "void functionDecl(int argumentA, int argumentB, int "
+ "argumentC, int argumentD,\n"
+ " int argumentE);";
+
+ verifyFormat(NoBreak, Medium, Style);
+ verifyFormat(NoBreak,
+ "functionCall(\n"
+ " paramA,\n"
+ " paramB,\n"
+ " paramC,\n"
+ " paramD,\n"
+ " paramE,\n"
+ " paramF,\n"
+ " paramG,\n"
+ " paramH,\n"
+ " paramI\n"
+ ");\n"
+ "void functionDecl(\n"
+ " int argumentA,\n"
+ " int argumentB,\n"
+ " int argumentC,\n"
+ " int argumentD,\n"
+ " int argumentE\n"
+ ");",
+ Style);
+
+ verifyFormat("outerFunctionCall(nestedFunctionCall(argument1),\n"
+ " nestedLongFunctionCall(argument1, "
+ "argument2, argument3,\n"
+ " argument4, "
+ "argument5));",
+ Style);
+
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+
+ verifyFormat(Short, Style);
+ verifyFormat(
+ "functionCall(\n"
+ " paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "
+ "paramI\n"
+ ");\n"
+ "void functionDecl(\n"
+ " int argumentA, int argumentB, int argumentC, int argumentD, int "
+ "argumentE\n"
+ ");",
+ Medium, Style);
+
+ Style.AllowAllArgumentsOnNextLine = false;
+ Style.AllowAllParametersOfDeclarationOnNextLine = false;
+
+ verifyFormat(Short, Style);
+ verifyFormat(
+ "functionCall(\n"
+ " paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "
+ "paramI\n"
+ ");\n"
+ "void functionDecl(\n"
+ " int argumentA, int argumentB, int argumentC, int argumentD, int "
+ "argumentE\n"
+ ");",
+ Medium, Style);
+
+ Style.BinPackArguments = false;
+ Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
+
+ verifyFormat(Short, Style);
+
+ verifyFormat("functionCall(\n"
+ " paramA,\n"
+ " paramB,\n"
+ " paramC,\n"
+ " paramD,\n"
+ " paramE,\n"
+ " paramF,\n"
+ " paramG,\n"
+ " paramH,\n"
+ " paramI\n"
+ ");\n"
+ "void functionDecl(\n"
+ " int argumentA,\n"
+ " int argumentB,\n"
+ " int argumentC,\n"
+ " int argumentD,\n"
+ " int argumentE\n"
+ ");",
+ Medium, Style);
+
+ verifyFormat("outerFunctionCall(\n"
+ " nestedFunctionCall(argument1),\n"
+ " nestedLongFunctionCall(\n"
+ " argument1,\n"
+ " argument2,\n"
+ " argument3,\n"
+ " argument4,\n"
+ " argument5\n"
+ " )\n"
+ ");",
+ Style);
+
+ verifyFormat("int a = (int)b;", Style);
+ verifyFormat("int a = (int)b;",
+ "int a = (\n"
+ " int\n"
+ ") b;",
+ Style);
+
+ verifyFormat("return (true);", Style);
+ verifyFormat("return (true);",
+ "return (\n"
+ " true\n"
+ ");",
+ Style);
+
+ verifyFormat("void foo();", Style);
+ verifyFormat("void foo();",
+ "void foo(\n"
+ ");",
+ Style);
+
+ verifyFormat("void foo() {}", Style);
+ verifyFormat("void foo() {}",
+ "void foo(\n"
+ ") {\n"
+ "}",
+ Style);
+
+ verifyFormat("auto string = std::string();", Style);
+ verifyFormat("auto string = std::string();",
+ "auto string = std::string(\n"
+ ");",
+ Style);
+
+ verifyFormat("void (*functionPointer)() = nullptr;", Style);
+ verifyFormat("void (*functionPointer)() = nullptr;",
+ "void (\n"
+ " *functionPointer\n"
+ ")\n"
+ "(\n"
+ ") = nullptr;",
+ Style);
+}
+
+TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentIfStatement) {
+ auto Style = getLLVMStyle();
+
+ verifyFormat("if (foo()) {\n"
+ " return;\n"
+ "}",
+ Style);
+
+ verifyFormat("if (quiteLongArg !=\n"
+ " (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "
+ "comment\n"
+ " return;\n"
+ "}",
+ Style);
+
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+
+ verifyFormat("if (foo()) {\n"
+ " return;\n"
+ "}",
+ Style);
+
+ verifyFormat("if (quiteLongArg !=\n"
+ " (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "
+ "comment\n"
+ " return;\n"
+ "}",
+ Style);
+
+ verifyFormat("void foo() {\n"
+ " if (camelCaseName < alsoLongName ||\n"
+ " anotherEvenLongerName <=\n"
+ " thisReallyReallyReallyReallyReallyReallyLongerName ||"
+ "\n"
+ " otherName < thisLastName) {\n"
+ " return;\n"
+ " } else if (quiteLongName < alsoLongName ||\n"
+ " anotherEvenLongerName <=\n"
+ " thisReallyReallyReallyReallyReallyReallyLonger"
+ "Name ||\n"
+ " otherName < thisLastName) {\n"
+ " return;\n"
+ " }\n"
+ "}",
+ Style);
+
+ Style.ContinuationIndentWidth = 2;
+ verifyFormat("void foo() {\n"
+ " if (ThisIsRatherALongIfClause && thatIExpectToBeBroken ||\n"
+ " ontoMultipleLines && whenFormattedCorrectly) {\n"
+ " if (false) {\n"
+ " return;\n"
+ " } else if (thisIsRatherALongIfClause && "
+ "thatIExpectToBeBroken ||\n"
+ " ontoMultipleLines && whenFormattedCorrectly) {\n"
+ " return;\n"
+ " }\n"
+ " }\n"
+ "}",
+ Style);
+}
+
+TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentForStatement) {
+ auto Style = getLLVMStyle();
+
+ verifyFormat("for (int i = 0; i < 5; ++i) {\n"
+ " doSomething();\n"
+ "}",
+ Style);
+
+ verifyFormat("for (int myReallyLongCountVariable = 0; "
+ "myReallyLongCountVariable < count;\n"
+ " myReallyLongCountVariable++) {\n"
+ " doSomething();\n"
+ "}",
+ Style);
+
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+
+ verifyFormat("for (int i = 0; i < 5; ++i) {\n"
+ " doSomething();\n"
+ "}",
+ Style);
+
+ verifyFormat("for (int myReallyLongCountVariable = 0; "
+ "myReallyLongCountVariable < count;\n"
+ " myReallyLongCountVariable++) {\n"
+ " doSomething();\n"
+ "}",
+ Style);
+}
+
+TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentInitializers) {
+ auto Style = getLLVMStyleWithColumns(60);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+ // Aggregate initialization.
+ verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"
+ " 10000000, 20000000\n"
+ "};",
+ Style);
+ verifyFormat("SomeStruct s{\n"
+ " \"xxxxxxxxxxxxxxxx\", \"yyyyyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzzzzz\"\n"
+ "};",
+ Style);
+ // Designated initializers.
+ verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"
+ " [0] = 10000000, [1] = 20000000\n"
+ "};",
+ Style);
+ verifyFormat("SomeStruct s{\n"
+ " .foo = \"xxxxxxxxxxxxx\",\n"
+ " .bar = \"yyyyyyyyyyyyy\",\n"
+ " .baz = \"zzzzzzzzzzzzz\"\n"
+ "};",
+ Style);
+ // List initialization.
+ verifyFormat("SomeStruct s{\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ verifyFormat("SomeStruct{\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ verifyFormat("new SomeStruct{\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ // Member initializer.
+ verifyFormat("class SomeClass {\n"
+ " SomeStruct s{\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ " };\n"
+ "};",
+ Style);
+ // Constructor member initializer.
+ verifyFormat("SomeClass::SomeClass : strct{\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ " } {}",
+ Style);
+ // Copy initialization.
+ verifyFormat("SomeStruct s = SomeStruct{\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ // Copy list initialization.
+ verifyFormat("SomeStruct s = {\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ // Assignment operand initialization.
+ verifyFormat("s = {\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ // Returned object initialization.
+ verifyFormat("return {\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ // Initializer list.
+ verifyFormat("auto initializerList = {\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "};",
+ Style);
+ // Function parameter initialization.
+ verifyFormat("func({\n"
+ " \"xxxxxxxxxxxxx\",\n"
+ " \"yyyyyyyyyyyyy\",\n"
+ " \"zzzzzzzzzzzzz\",\n"
+ "});",
+ Style);
+ // Nested init lists.
+ verifyFormat("SomeStruct s = {\n"
+ " {{init1, init2, init3, init4, init5},\n"
+ " {init1, init2, init3, init4, init5}}\n"
+ "};",
+ Style);
+ verifyFormat("SomeStruct s = {\n"
+ " {{\n"
+ " .init1 = 1,\n"
+ " .init2 = 2,\n"
+ " .init3 = 3,\n"
+ " .init4 = 4,\n"
+ " .init5 = 5,\n"
+ " },\n"
+ " {init1, init2, init3, init4, init5}}\n"
+ "};",
+ Style);
+ verifyFormat("SomeArrayT a[3] = {\n"
+ " {\n"
+ " foo,\n"
+ " bar,\n"
+ " },\n"
+ " {\n"
+ " foo,\n"
+ " bar,\n"
+ " },\n"
+ " SomeArrayT{},\n"
+ "};",
+ Style);
+ verifyFormat("SomeArrayT a[3] = {\n"
+ " {foo},\n"
+ " {\n"
+ " {\n"
+ " init1,\n"
+ " init2,\n"
+ " init3,\n"
+ " },\n"
+ " {\n"
+ " init1,\n"
+ " init2,\n"
+ " init3,\n"
+ " },\n"
+ " },\n"
+ " {baz},\n"
+ "};",
+ Style);
+}
+
+TEST_F(AlignBracketsTest, AllowAllArgumentsOnNextLineDontAlign) {
+ // Check that AllowAllArgumentsOnNextLine is respected for both BAS_DontAlign
+ // and BAS_Align.
+ FormatStyle Style = getLLVMStyleWithColumns(35);
+ StringRef Input = "functionCall(paramA, paramB, paramC);\n"
+ "void functionDecl(int A, int B, int C);";
+ Style.AllowAllArgumentsOnNextLine = false;
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
+ verifyFormat(StringRef("functionCall(paramA, paramB,\n"
+ " paramC);\n"
+ "void functionDecl(int A, int B,\n"
+ " int C);"),
+ Input, Style);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
+ verifyFormat(StringRef("functionCall(paramA, paramB,\n"
+ " paramC);\n"
+ "void functionDecl(int A, int B,\n"
+ " int C);"),
+ Input, Style);
+ // However, BAS_AlwaysBreak and BAS_BlockIndent should take precedence over
+ // AllowAllArgumentsOnNextLine.
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
+ verifyFormat(StringRef("functionCall(\n"
+ " paramA, paramB, paramC);\n"
+ "void functionDecl(\n"
+ " int A, int B, int C);"),
+ Input, Style);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+ verifyFormat("functionCall(\n"
+ " paramA, paramB, paramC\n"
+ ");\n"
+ "void functionDecl(\n"
+ " int A, int B, int C\n"
+ ");",
+ Input, Style);
+
+ // When AllowAllArgumentsOnNextLine is set, we prefer breaking before the
+ // first argument.
+ Style.AllowAllArgumentsOnNextLine = true;
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
+ verifyFormat(StringRef("functionCall(\n"
+ " paramA, paramB, paramC);\n"
+ "void functionDecl(\n"
+ " int A, int B, int C);"),
+ Input, Style);
+ // It wouldn't fit on one line with aligned parameters so this setting
+ // doesn't change anything for BAS_Align.
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
+ verifyFormat(StringRef("functionCall(paramA, paramB,\n"
+ " paramC);\n"
+ "void functionDecl(int A, int B,\n"
+ " int C);"),
+ Input, Style);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
+ verifyFormat(StringRef("functionCall(\n"
+ " paramA, paramB, paramC);\n"
+ "void functionDecl(\n"
+ " int A, int B, int C);"),
+ Input, Style);
+}
+
+TEST_F(AlignBracketsTest, FormatsDeclarationBreakAlways) {
+ FormatStyle BreakAlways = getGoogleStyle();
+ BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
+ verifyFormat("void f(int a,\n"
+ " int b);",
+ BreakAlways);
+ verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
+ " int cccccccccccccccccccccccc);",
+ BreakAlways);
+
+ // Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set
+ // to BPPS_AlwaysOnePerLine.
+ BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
+ verifyFormat(
+ "void someLongFunctionName(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int b);",
+ BreakAlways);
+ BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+ verifyFormat(
+ "void someLongFunctionName(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int b\n"
+ ");",
+ BreakAlways);
+}
+
+TEST_F(AlignBracketsTest, FormatsDefinitionBreakAlways) {
+ FormatStyle BreakAlways = getGoogleStyle();
+ BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
+ verifyFormat("void f(int a,\n"
+ " int b) {\n"
+ " f(a, b);\n"
+ "}",
+ BreakAlways);
+
+ // Ensure BinPackArguments interact correctly when BinPackParameters is set to
+ // BPPS_AlwaysOnePerLine.
+ verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
+ " int cccccccccccccccccccccccc) {\n"
+ " f(aaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
+ " cccccccccccccccccccccccc);\n"
+ "}",
+ BreakAlways);
+ BreakAlways.BinPackArguments = false;
+ verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
+ " int cccccccccccccccccccccccc) {\n"
+ " f(aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
+ " cccccccccccccccccccccccc);\n"
+ "}",
+ BreakAlways);
+
+ // Ensure BreakFunctionDefinitionParameters interacts correctly when
+ // BinPackParameters is set to BPPS_AlwaysOnePerLine.
+ BreakAlways.BreakFunctionDefinitionParameters = true;
+ verifyFormat("void f(\n"
+ " int a,\n"
+ " int b) {\n"
+ " f(a, b);\n"
+ "}",
+ BreakAlways);
+ BreakAlways.BreakFunctionDefinitionParameters = false;
+
+ // Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set
+ // to BPPS_AlwaysOnePerLine.
+ BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
+ verifyFormat(
+ "void someLongFunctionName(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int b) {\n"
+ " someLongFunctionName(\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b);\n"
+ "}",
+ BreakAlways);
+ BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
+ verifyFormat(
+ "void someLongFunctionName(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int b\n"
+ ") {\n"
+ " someLongFunctionName(\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b\n"
+ " );\n"
+ "}",
+ BreakAlways);
+}
+
+TEST_F(AlignBracketsTest, ParenthesesAndOperandAlignment) {
+ FormatStyle Style = getLLVMStyleWithColumns(40);
+ verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
+ " bbbbbbbbbbbbbbbbbbbbbb);",
+ Style);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
+ Style.AlignOperands = FormatStyle::OAS_DontAlign;
+ verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
+ " bbbbbbbbbbbbbbbbbbbbbb);",
+ Style);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
+ Style.AlignOperands = FormatStyle::OAS_Align;
+ verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
+ " bbbbbbbbbbbbbbbbbbbbbb);",
+ Style);
+ Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
+ Style.AlignOperands = FormatStyle::OAS_DontAlign;
+ verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
+ " bbbbbbbbbbbbbbbbbbbbbb);",
+ Style);
+}
+
+} // namespace
+} // namespace test
+} // namespace format
+} // namespace clang
diff --git a/clang/unittests/Format/CMakeLists.txt b/clang/unittests/Format/CMakeLists.txt
index c4c7b483ba68..5e5a7a055299 100644
--- a/clang/unittests/Format/CMakeLists.txt
+++ b/clang/unittests/Format/CMakeLists.txt
@@ -1,6 +1,7 @@
# Format tests have few LLVM and Clang dependencies, so linking it as a
# distinct target enables faster iteration times at low cost.
add_distinct_clang_unittest(FormatTests
+ AlignBracketsTest.cpp
BracesInserterTest.cpp
BracesRemoverTest.cpp
CleanupTest.cpp
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 136039d25539..4e9d31895998 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -8051,67 +8051,6 @@ TEST_F(FormatTest, AllowAllArgumentsOnNextLine) {
Style);
}
-TEST_F(FormatTest, AllowAllArgumentsOnNextLineDontAlign) {
- // Check that AllowAllArgumentsOnNextLine is respected for both BAS_DontAlign
- // and BAS_Align.
- FormatStyle Style = getLLVMStyleWithColumns(35);
- StringRef Input = "functionCall(paramA, paramB, paramC);\n"
- "void functionDecl(int A, int B, int C);";
- Style.AllowAllArgumentsOnNextLine = false;
- Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
- verifyFormat(StringRef("functionCall(paramA, paramB,\n"
- " paramC);\n"
- "void functionDecl(int A, int B,\n"
- " int C);"),
- Input, Style);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
- verifyFormat(StringRef("functionCall(paramA, paramB,\n"
- " paramC);\n"
- "void functionDecl(int A, int B,\n"
- " int C);"),
- Input, Style);
- // However, BAS_AlwaysBreak and BAS_BlockIndent should take precedence over
- // AllowAllArgumentsOnNextLine.
- Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
- verifyFormat(StringRef("functionCall(\n"
- " paramA, paramB, paramC);\n"
- "void functionDecl(\n"
- " int A, int B, int C);"),
- Input, Style);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
- verifyFormat("functionCall(\n"
- " paramA, paramB, paramC\n"
- ");\n"
- "void functionDecl(\n"
- " int A, int B, int C\n"
- ");",
- Input, Style);
-
- // When AllowAllArgumentsOnNextLine is set, we prefer breaking before the
- // first argument.
- Style.AllowAllArgumentsOnNextLine = true;
- Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
- verifyFormat(StringRef("functionCall(\n"
- " paramA, paramB, paramC);\n"
- "void functionDecl(\n"
- " int A, int B, int C);"),
- Input, Style);
- // It wouldn't fit on one line with aligned parameters so this setting
- // doesn't change anything for BAS_Align.
- Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
- verifyFormat(StringRef("functionCall(paramA, paramB,\n"
- " paramC);\n"
- "void functionDecl(int A, int B,\n"
- " int C);"),
- Input, Style);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
- verifyFormat(StringRef("functionCall(\n"
- " paramA, paramB, paramC);\n"
- "void functionDecl(\n"
- " int A, int B, int C);"),
- Input, Style);
-}
-
TEST_F(FormatTest, BreakFunctionDefinitionParameters) {
StringRef Input = "void functionDecl(paramA, paramB, paramC);\n"
"void emptyFunctionDefinition() {}\n"
@@ -9030,97 +8969,6 @@ TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) {
NoBinPacking);
}
-TEST_F(FormatTest, FormatsDeclarationBreakAlways) {
- FormatStyle BreakAlways = getGoogleStyle();
- BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
- verifyFormat("void f(int a,\n"
- " int b);",
- BreakAlways);
- verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
- " int cccccccccccccccccccccccc);",
- BreakAlways);
-
- // Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set
- // to BPPS_AlwaysOnePerLine.
- BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
- verifyFormat(
- "void someLongFunctionName(\n"
- " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int b);",
- BreakAlways);
- BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
- verifyFormat(
- "void someLongFunctionName(\n"
- " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int b\n"
- ");",
- BreakAlways);
-}
-
-TEST_F(FormatTest, FormatsDefinitionBreakAlways) {
- FormatStyle BreakAlways = getGoogleStyle();
- BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
- verifyFormat("void f(int a,\n"
- " int b) {\n"
- " f(a, b);\n"
- "}",
- BreakAlways);
-
- // Ensure BinPackArguments interact correctly when BinPackParameters is set to
- // BPPS_AlwaysOnePerLine.
- verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
- " int cccccccccccccccccccccccc) {\n"
- " f(aaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
- " cccccccccccccccccccccccc);\n"
- "}",
- BreakAlways);
- BreakAlways.BinPackArguments = false;
- verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
- " int cccccccccccccccccccccccc) {\n"
- " f(aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
- " cccccccccccccccccccccccc);\n"
- "}",
- BreakAlways);
-
- // Ensure BreakFunctionDefinitionParameters interacts correctly when
- // BinPackParameters is set to BPPS_AlwaysOnePerLine.
- BreakAlways.BreakFunctionDefinitionParameters = true;
- verifyFormat("void f(\n"
- " int a,\n"
- " int b) {\n"
- " f(a, b);\n"
- "}",
- BreakAlways);
- BreakAlways.BreakFunctionDefinitionParameters = false;
-
- // Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set
- // to BPPS_AlwaysOnePerLine.
- BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
- verifyFormat(
- "void someLongFunctionName(\n"
- " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int b) {\n"
- " someLongFunctionName(\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b);\n"
- "}",
- BreakAlways);
- BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
- verifyFormat(
- "void someLongFunctionName(\n"
- " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
- " int b\n"
- ") {\n"
- " someLongFunctionName(\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b\n"
- " );\n"
- "}",
- BreakAlways);
-}
-
TEST_F(FormatTest, AdaptiveOnePerLineFormatting) {
FormatStyle Style = getLLVMStyleWithColumns(15);
Style.ExperimentalAutoDetectBinPacking = true;
@@ -9518,216 +9366,6 @@ TEST_F(FormatTest, AlignsAfterReturn) {
" code == a || code == b;");
}
-TEST_F(FormatTest, AlignsAfterOpenBracket) {
- verifyFormat(
- "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"
- " aaaaaaaaa aaaaaaa) {}");
- verifyFormat(
- "SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"
- " aaaaaaaaaaa aaaaaaaaa);");
- verifyFormat(
- "SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaa));");
- FormatStyle Style = getLLVMStyle();
- Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
- verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaa aaaaaaaa, aaaaaaaaa aaaaaaa) {}",
- Style);
- verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
- " aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaa aaaaaaaaa);",
- Style);
- verifyFormat("SomeLongVariableName->someFunction(\n"
- " foooooooo(aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaa));",
- Style);
- verifyFormat(
- "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"
- " aaaaaaaaa aaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
- Style);
- verifyFormat(
- "SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"
- " aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
- Style);
- verifyFormat(
- "SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",
- Style);
-
- verifyFormat("bbbbbbbbbbbb(aaaaaaaaaaaaaaaaaaaaaaaa, //\n"
- " ccccccc(aaaaaaaaaaaaaaaaa, //\n"
- " b));",
- Style);
-
- Style.ColumnLimit = 30;
- verifyFormat("for (int foo = 0; foo < FOO;\n"
- " ++foo) {\n"
- " bar(foo);\n"
- "}",
- Style);
- Style.ColumnLimit = 80;
-
- Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
- Style.BinPackArguments = false;
- Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
- verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaa aaaaaaaa,\n"
- " aaaaaaaaa aaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
- Style);
- verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
- " aaaaaaaaaaa aaaaaaaaa,\n"
- " aaaaaaaaaaa aaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
- Style);
- verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"
- " aaaaaaaaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",
- Style);
- verifyFormat(
- "aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",
- Style);
- verifyFormat(
- "aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",
- Style);
- verifyFormat(
- "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)),\n"
- " aaaaaaaaaaaaaaaa);",
- Style);
- verifyFormat(
- "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)) &&\n"
- " aaaaaaaaaaaaaaaa);",
- Style);
- verifyFormat(
- "fooooooooooo(new BARRRRRRRRR(\n"
- " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
- Style);
- verifyFormat(
- "fooooooooooo(::new BARRRRRRRRR(\n"
- " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
- Style);
- verifyFormat(
- "fooooooooooo(new FOO::BARRRR(\n"
- " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
- Style);
-
- Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
- Style.BinPackArguments = false;
- Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
- verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaa aaaaaaaa,\n"
- " aaaaaaaaa aaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
- ") {}",
- Style);
- verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
- " aaaaaaaaaaa aaaaaaaaa,\n"
- " aaaaaaaaaaa aaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
- ");",
- Style);
- verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"
- " aaaaaaaaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaa,\n"
- " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
- "));",
- Style);
- verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
- "));",
- Style);
- verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
- "));",
- Style);
- verifyFormat(
- "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
- " ),\n"
- " aaaaaaaaaaaaaaaa\n"
- ");",
- Style);
- verifyFormat(
- "aaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaaa(\n"
- " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
- " ) &&\n"
- " aaaaaaaaaaaaaaaa\n"
- ");",
- Style);
- verifyFormat("void foo(\n"
- " void (*foobarpntr)(\n"
- " aaaaaaaaaaaaaaaaaa *,\n"
- " bbbbbbbbbbbbbb *,\n"
- " cccccccccccccccccccc *,\n"
- " dddddddddddddddddd *\n"
- " )\n"
- ");",
- Style);
- verifyFormat("aaaaaaa<bbbbbbbb> const aaaaaaaaaa{\n"
- " aaaaaaaaaaaaa(aaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
- "};",
- Style);
-
- verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " const bool &aaaaaaaaa, const void *aaaaaaaaaa\n"
- ") const {\n"
- " return true;\n"
- "}",
- Style);
- verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " const bool &aaaaaaaaaa, const void *aaaaaaaaaa\n"
- ") const;",
- Style);
- verifyFormat("void aaaaaaaaa(\n"
- " int aaaaaa, int bbbbbb, int cccccc, int dddddddddd\n"
- ") const noexcept -> std::vector<of_very_long_type>;",
- Style);
- verifyFormat(
- "x = aaaaaaaaaaaaaaa(\n"
- " \"a aaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaa\"\n"
- ");",
- Style);
- Style.ColumnLimit = 60;
- verifyFormat("auto lambda =\n"
- " [&b](\n"
- " auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
- " ) {};",
- Style);
- verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(\n"
- " &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
- ");",
- Style);
-}
-
-TEST_F(FormatTest, ParenthesesAndOperandAlignment) {
- FormatStyle Style = getLLVMStyleWithColumns(40);
- verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
- " bbbbbbbbbbbbbbbbbbbbbb);",
- Style);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
- Style.AlignOperands = FormatStyle::OAS_DontAlign;
- verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
- " bbbbbbbbbbbbbbbbbbbbbb);",
- Style);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
- Style.AlignOperands = FormatStyle::OAS_Align;
- verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
- " bbbbbbbbbbbbbbbbbbbbbb);",
- Style);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
- Style.AlignOperands = FormatStyle::OAS_DontAlign;
- verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
- " bbbbbbbbbbbbbbbbbbbbbb);",
- Style);
-}
-
TEST_F(FormatTest, BreaksConditionalExpressions) {
verifyFormat(
"aaaa(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaa\n"
@@ -15358,6 +14996,18 @@ TEST_F(FormatTest, SplitEmptyFunctionButNotRecord) {
Style);
}
+TEST_F(FormatTest, MergeShortFunctionBody) {
+ auto Style = getLLVMStyle();
+ Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_None;
+ Style.AllowShortBlocksOnASingleLine = FormatStyle::SBS_Always;
+ Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+ Style.BraceWrapping.AfterFunction = true;
+
+ verifyFormat("int foo()\n"
+ "{ return 1; }",
+ Style);
+}
+
TEST_F(FormatTest, KeepShortFunctionAfterPPElse) {
FormatStyle Style = getLLVMStyle();
Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_All;
@@ -26023,6 +25673,7 @@ TEST_F(FormatTest, SkipMacroDefinitionBody) {
" A a",
Style);
verifyNoChange("#define MY_MACRO \\\n"
+ " /*foo*//*bar*/ \\\n"
" /* comment */ \\\n"
" 1",
Style);
@@ -27576,405 +27227,6 @@ TEST_F(FormatTest, MultilineLambdaInConditional) {
Style);
}
-TEST_F(FormatTest, AlignAfterOpenBracketBlockIndent) {
- auto Style = getLLVMStyle();
-
- StringRef Short = "functionCall(paramA, paramB, paramC);\n"
- "void functionDecl(int a, int b, int c);";
-
- StringRef Medium = "functionCall(paramA, paramB, paramC, paramD, paramE, "
- "paramF, paramG, paramH, paramI);\n"
- "void functionDecl(int argumentA, int argumentB, int "
- "argumentC, int argumentD, int argumentE);";
-
- verifyFormat(Short, Style);
-
- StringRef NoBreak = "functionCall(paramA, paramB, paramC, paramD, paramE, "
- "paramF, paramG, paramH,\n"
- " paramI);\n"
- "void functionDecl(int argumentA, int argumentB, int "
- "argumentC, int argumentD,\n"
- " int argumentE);";
-
- verifyFormat(NoBreak, Medium, Style);
- verifyFormat(NoBreak,
- "functionCall(\n"
- " paramA,\n"
- " paramB,\n"
- " paramC,\n"
- " paramD,\n"
- " paramE,\n"
- " paramF,\n"
- " paramG,\n"
- " paramH,\n"
- " paramI\n"
- ");\n"
- "void functionDecl(\n"
- " int argumentA,\n"
- " int argumentB,\n"
- " int argumentC,\n"
- " int argumentD,\n"
- " int argumentE\n"
- ");",
- Style);
-
- verifyFormat("outerFunctionCall(nestedFunctionCall(argument1),\n"
- " nestedLongFunctionCall(argument1, "
- "argument2, argument3,\n"
- " argument4, "
- "argument5));",
- Style);
-
- Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
-
- verifyFormat(Short, Style);
- verifyFormat(
- "functionCall(\n"
- " paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "
- "paramI\n"
- ");\n"
- "void functionDecl(\n"
- " int argumentA, int argumentB, int argumentC, int argumentD, int "
- "argumentE\n"
- ");",
- Medium, Style);
-
- Style.AllowAllArgumentsOnNextLine = false;
- Style.AllowAllParametersOfDeclarationOnNextLine = false;
-
- verifyFormat(Short, Style);
- verifyFormat(
- "functionCall(\n"
- " paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "
- "paramI\n"
- ");\n"
- "void functionDecl(\n"
- " int argumentA, int argumentB, int argumentC, int argumentD, int "
- "argumentE\n"
- ");",
- Medium, Style);
-
- Style.BinPackArguments = false;
- Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
-
- verifyFormat(Short, Style);
-
- verifyFormat("functionCall(\n"
- " paramA,\n"
- " paramB,\n"
- " paramC,\n"
- " paramD,\n"
- " paramE,\n"
- " paramF,\n"
- " paramG,\n"
- " paramH,\n"
- " paramI\n"
- ");\n"
- "void functionDecl(\n"
- " int argumentA,\n"
- " int argumentB,\n"
- " int argumentC,\n"
- " int argumentD,\n"
- " int argumentE\n"
- ");",
- Medium, Style);
-
- verifyFormat("outerFunctionCall(\n"
- " nestedFunctionCall(argument1),\n"
- " nestedLongFunctionCall(\n"
- " argument1,\n"
- " argument2,\n"
- " argument3,\n"
- " argument4,\n"
- " argument5\n"
- " )\n"
- ");",
- Style);
-
- verifyFormat("int a = (int)b;", Style);
- verifyFormat("int a = (int)b;",
- "int a = (\n"
- " int\n"
- ") b;",
- Style);
-
- verifyFormat("return (true);", Style);
- verifyFormat("return (true);",
- "return (\n"
- " true\n"
- ");",
- Style);
-
- verifyFormat("void foo();", Style);
- verifyFormat("void foo();",
- "void foo(\n"
- ");",
- Style);
-
- verifyFormat("void foo() {}", Style);
- verifyFormat("void foo() {}",
- "void foo(\n"
- ") {\n"
- "}",
- Style);
-
- verifyFormat("auto string = std::string();", Style);
- verifyFormat("auto string = std::string();",
- "auto string = std::string(\n"
- ");",
- Style);
-
- verifyFormat("void (*functionPointer)() = nullptr;", Style);
- verifyFormat("void (*functionPointer)() = nullptr;",
- "void (\n"
- " *functionPointer\n"
- ")\n"
- "(\n"
- ") = nullptr;",
- Style);
-}
-
-TEST_F(FormatTest, AlignAfterOpenBracketBlockIndentIfStatement) {
- auto Style = getLLVMStyle();
-
- verifyFormat("if (foo()) {\n"
- " return;\n"
- "}",
- Style);
-
- verifyFormat("if (quiteLongArg !=\n"
- " (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "
- "comment\n"
- " return;\n"
- "}",
- Style);
-
- Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
-
- verifyFormat("if (foo()) {\n"
- " return;\n"
- "}",
- Style);
-
- verifyFormat("if (quiteLongArg !=\n"
- " (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "
- "comment\n"
- " return;\n"
- "}",
- Style);
-
- verifyFormat("void foo() {\n"
- " if (camelCaseName < alsoLongName ||\n"
- " anotherEvenLongerName <=\n"
- " thisReallyReallyReallyReallyReallyReallyLongerName ||"
- "\n"
- " otherName < thisLastName) {\n"
- " return;\n"
- " } else if (quiteLongName < alsoLongName ||\n"
- " anotherEvenLongerName <=\n"
- " thisReallyReallyReallyReallyReallyReallyLonger"
- "Name ||\n"
- " otherName < thisLastName) {\n"
- " return;\n"
- " }\n"
- "}",
- Style);
-
- Style.ContinuationIndentWidth = 2;
- verifyFormat("void foo() {\n"
- " if (ThisIsRatherALongIfClause && thatIExpectToBeBroken ||\n"
- " ontoMultipleLines && whenFormattedCorrectly) {\n"
- " if (false) {\n"
- " return;\n"
- " } else if (thisIsRatherALongIfClause && "
- "thatIExpectToBeBroken ||\n"
- " ontoMultipleLines && whenFormattedCorrectly) {\n"
- " return;\n"
- " }\n"
- " }\n"
- "}",
- Style);
-}
-
-TEST_F(FormatTest, AlignAfterOpenBracketBlockIndentForStatement) {
- auto Style = getLLVMStyle();
-
- verifyFormat("for (int i = 0; i < 5; ++i) {\n"
- " doSomething();\n"
- "}",
- Style);
-
- verifyFormat("for (int myReallyLongCountVariable = 0; "
- "myReallyLongCountVariable < count;\n"
- " myReallyLongCountVariable++) {\n"
- " doSomething();\n"
- "}",
- Style);
-
- Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
-
- verifyFormat("for (int i = 0; i < 5; ++i) {\n"
- " doSomething();\n"
- "}",
- Style);
-
- verifyFormat("for (int myReallyLongCountVariable = 0; "
- "myReallyLongCountVariable < count;\n"
- " myReallyLongCountVariable++) {\n"
- " doSomething();\n"
- "}",
- Style);
-}
-
-TEST_F(FormatTest, AlignAfterOpenBracketBlockIndentInitializers) {
- auto Style = getLLVMStyleWithColumns(60);
- Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
- // Aggregate initialization.
- verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"
- " 10000000, 20000000\n"
- "};",
- Style);
- verifyFormat("SomeStruct s{\n"
- " \"xxxxxxxxxxxxxxxx\", \"yyyyyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzzzzz\"\n"
- "};",
- Style);
- // Designated initializers.
- verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"
- " [0] = 10000000, [1] = 20000000\n"
- "};",
- Style);
- verifyFormat("SomeStruct s{\n"
- " .foo = \"xxxxxxxxxxxxx\",\n"
- " .bar = \"yyyyyyyyyyyyy\",\n"
- " .baz = \"zzzzzzzzzzzzz\"\n"
- "};",
- Style);
- // List initialization.
- verifyFormat("SomeStruct s{\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- verifyFormat("SomeStruct{\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- verifyFormat("new SomeStruct{\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- // Member initializer.
- verifyFormat("class SomeClass {\n"
- " SomeStruct s{\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- " };\n"
- "};",
- Style);
- // Constructor member initializer.
- verifyFormat("SomeClass::SomeClass : strct{\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- " } {}",
- Style);
- // Copy initialization.
- verifyFormat("SomeStruct s = SomeStruct{\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- // Copy list initialization.
- verifyFormat("SomeStruct s = {\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- // Assignment operand initialization.
- verifyFormat("s = {\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- // Returned object initialization.
- verifyFormat("return {\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- // Initializer list.
- verifyFormat("auto initializerList = {\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "};",
- Style);
- // Function parameter initialization.
- verifyFormat("func({\n"
- " \"xxxxxxxxxxxxx\",\n"
- " \"yyyyyyyyyyyyy\",\n"
- " \"zzzzzzzzzzzzz\",\n"
- "});",
- Style);
- // Nested init lists.
- verifyFormat("SomeStruct s = {\n"
- " {{init1, init2, init3, init4, init5},\n"
- " {init1, init2, init3, init4, init5}}\n"
- "};",
- Style);
- verifyFormat("SomeStruct s = {\n"
- " {{\n"
- " .init1 = 1,\n"
- " .init2 = 2,\n"
- " .init3 = 3,\n"
- " .init4 = 4,\n"
- " .init5 = 5,\n"
- " },\n"
- " {init1, init2, init3, init4, init5}}\n"
- "};",
- Style);
- verifyFormat("SomeArrayT a[3] = {\n"
- " {\n"
- " foo,\n"
- " bar,\n"
- " },\n"
- " {\n"
- " foo,\n"
- " bar,\n"
- " },\n"
- " SomeArrayT{},\n"
- "};",
- Style);
- verifyFormat("SomeArrayT a[3] = {\n"
- " {foo},\n"
- " {\n"
- " {\n"
- " init1,\n"
- " init2,\n"
- " init3,\n"
- " },\n"
- " {\n"
- " init1,\n"
- " init2,\n"
- " init3,\n"
- " },\n"
- " },\n"
- " {baz},\n"
- "};",
- Style);
-}
-
TEST_F(FormatTest, UnderstandsDigraphs) {
verifyFormat("int arr<:5:> = {};");
verifyFormat("int arr[5] = <%%>;");
diff --git a/clang/unittests/Format/FormatTestTableGen.cpp b/clang/unittests/Format/FormatTestTableGen.cpp
index 1c3d187de393..df20cc26e109 100644
--- a/clang/unittests/Format/FormatTestTableGen.cpp
+++ b/clang/unittests/Format/FormatTestTableGen.cpp
@@ -187,9 +187,16 @@ TEST_F(FormatTestTableGen, SimpleValue6) {
" );\n"
" let DAGArgBang = (!cast<SomeType>(\"Some\") i32:$src1,\n"
" i32:$src2);\n"
+ " let NestedDAGArg = ((DAGArg1 (v111 v112, v113), v12) v2,\n"
+ " (DAGArg3 (v31 v32)));\n"
"}");
}
+TEST_F(FormatTestTableGen, SimpleValue6_NestedInPat) {
+ verifyFormat("def : Pat<(vec.vt (avg (vec.vt V128:$l), (vec.vt V128:$r))),\n"
+ " (inst $l, $r)>;");
+}
+
TEST_F(FormatTestTableGen, SimpleValue7) {
verifyFormat("def SimpleValue7 { let Identifier = SimpleValue; }");
}
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index 85ccba38ac8c..141b0001cb52 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -1349,6 +1349,14 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
EXPECT_EQ(Tokens[21]->MatchingParen, Tokens[15]);
EXPECT_TRUE(Tokens[21]->ClosesRequiresClause);
+ Tokens = annotate("template <typename Foo>\n"
+ "void Fun(const Foo &F)\n"
+ " requires requires(Foo F) {\n"
+ " { F.Bar() } -> std::same_as<int>;\n"
+ " };");
+ ASSERT_EQ(Tokens.size(), 38u) << Tokens;
+ EXPECT_TOKEN(Tokens[19], tok::l_brace, TT_RequiresExpressionLBrace);
+
Tokens =
annotate("template <class A, class B> concept C ="
"std::same_as<std::iter_value_t<A>, std::iter_value_t<B>>;");