GPery created this revision.
GPery requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Resorted and added tests, thanks for the comments <3
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D116374
Files:
clang/docs/ClangFormatStyleOptions.rst
clang/include/clang/Format/Format.h
clang/lib/Format/Format.cpp
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -18512,6 +18512,75 @@
format("int a = /* long block comment */ 42;", Style));
}
+TEST_F(FormatTest, BreakPenaltyAfterLParen) {
+ FormatStyle Style = getLLVMStyle();
+ Style.ColumnLimit = 8;
+ Style.PenaltyExcessCharacter = 15;
+ EXPECT_EQ("int foo(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaa);",
+ format("int foo(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaa);",
+ Style));
+ Style.PenaltyBreakOpenParenthesis = 200;
+ EXPECT_EQ("int foo(int aaaaaaaaaaaaaaaaaaaaaaaa);",
+ format("int foo(\n"
+ " int aaaaaaaaaaaaaaaaaaaaaaaa);",
+ Style));
+}
+
+TEST_F(FormatTest, BreakPenaltyAfterCastLParen) {
+ FormatStyle Style = getLLVMStyle();
+ Style.ColumnLimit = 5;
+ Style.PenaltyExcessCharacter = 150;
+ EXPECT_EQ("foo((\n"
+ " int)aaaaaaaaaaaaaaaaaaaaaaaa);",
+ format("foo((\n"
+ "int)aaaaaaaaaaaaaaaaaaaaaaaa);",
+ Style));
+ Style.PenaltyBreakOpenParenthesis = 100000;
+ EXPECT_EQ("foo((int)\n"
+ " aaaaaaaaaaaaaaaaaaaaaaaa);",
+ format("foo((\n"
+ "int)aaaaaaaaaaaaaaaaaaaaaaaa);",
+ Style));
+}
+
+TEST_F(FormatTest, BreakPenaltyAfterForLoopLParen) {
+ FormatStyle Style = getLLVMStyle();
+ Style.ColumnLimit = 4;
+ Style.PenaltyExcessCharacter = 100;
+ EXPECT_EQ("for (\n"
+ " int iiiiiiiiiiiiiiiii =\n"
+ " 0;\n"
+ " iiiiiiiiiiiiiiiii <\n"
+ " 2;\n"
+ " iiiiiiiiiiiiiiiii++) {\n"
+ "}",
+ format("for (\n"
+ " int iiiiiiiiiiiiiiiii =\n"
+ " 0;\n"
+ " iiiiiiiiiiiiiiiii <\n"
+ " 2;\n"
+ " iiiiiiiiiiiiiiiii++) {\n"
+ "}",
+ Style));
+ Style.PenaltyBreakOpenParenthesis = 1250;
+ EXPECT_EQ("for (int iiiiiiiiiiiiiiiii =\n"
+ " 0;\n"
+ " iiiiiiiiiiiiiiiii <\n"
+ " 2;\n"
+ " iiiiiiiiiiiiiiiii++) {\n"
+ "}",
+ format("for (\n"
+ " int iiiiiiiiiiiiiiiii =\n"
+ " 0;\n"
+ " iiiiiiiiiiiiiiiii <\n"
+ " 2;\n"
+ " iiiiiiiiiiiiiiiii++) {\n"
+ "}",
+ Style));
+}
+
#define EXPECT_ALL_STYLES_EQUAL(Styles) \
for (size_t i = 1; i < Styles.size(); ++i) \
EXPECT_EQ(Styles[0], Styles[i]) \
@@ -18717,6 +18786,8 @@
PenaltyBreakBeforeFirstCallParameter, 1234u);
CHECK_PARSE("PenaltyBreakTemplateDeclaration: 1234",
PenaltyBreakTemplateDeclaration, 1234u);
+ CHECK_PARSE("PenaltyBreakOpenParenthesis: 1234", PenaltyBreakOpenParenthesis,
+ 1234u);
CHECK_PARSE("PenaltyExcessCharacter: 1234", PenaltyExcessCharacter, 1234u);
CHECK_PARSE("PenaltyReturnTypeOnItsOwnLine: 1234",
PenaltyReturnTypeOnItsOwnLine, 1234u);
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -2857,6 +2857,8 @@
Left.Previous->isOneOf(tok::identifier, tok::greater))
return 500;
+ if (Left.is(tok::l_paren) && Style.PenaltyBreakOpenParenthesis != 0)
+ return Style.PenaltyBreakOpenParenthesis;
if (Left.is(tok::l_paren) && InFunctionDecl &&
Style.AlignAfterOpenBracket != FormatStyle::BAS_DontAlign)
return 100;
Index: clang/lib/Format/Format.cpp
===================================================================
--- clang/lib/Format/Format.cpp
+++ clang/lib/Format/Format.cpp
@@ -756,6 +756,8 @@
IO.mapOptional("PenaltyBreakComment", Style.PenaltyBreakComment);
IO.mapOptional("PenaltyBreakFirstLessLess",
Style.PenaltyBreakFirstLessLess);
+ IO.mapOptional("PenaltyBreakOpenParenthesis",
+ Style.PenaltyBreakOpenParenthesis);
IO.mapOptional("PenaltyBreakString", Style.PenaltyBreakString);
IO.mapOptional("PenaltyBreakTemplateDeclaration",
Style.PenaltyBreakTemplateDeclaration);
@@ -1232,6 +1234,7 @@
LLVMStyle.PenaltyExcessCharacter = 1000000;
LLVMStyle.PenaltyReturnTypeOnItsOwnLine = 60;
LLVMStyle.PenaltyBreakBeforeFirstCallParameter = 19;
+ LLVMStyle.PenaltyBreakOpenParenthesis = 0;
LLVMStyle.PenaltyBreakTemplateDeclaration = prec::Relational;
LLVMStyle.PenaltyIndentedWhitespace = 0;
Index: clang/include/clang/Format/Format.h
===================================================================
--- clang/include/clang/Format/Format.h
+++ clang/include/clang/Format/Format.h
@@ -2887,6 +2887,10 @@
/// \version 3.7
unsigned PenaltyBreakFirstLessLess;
+ /// The penalty for breaking after ``(``.
+ /// \version 14
+ unsigned PenaltyBreakOpenParenthesis;
+
/// The penalty for each line break introduced inside a string literal.
/// \version 3.7
unsigned PenaltyBreakString;
@@ -3781,6 +3785,7 @@
R.PenaltyBreakBeforeFirstCallParameter &&
PenaltyBreakComment == R.PenaltyBreakComment &&
PenaltyBreakFirstLessLess == R.PenaltyBreakFirstLessLess &&
+ PenaltyBreakOpenParenthesis == R.PenaltyBreakOpenParenthesis &&
PenaltyBreakString == R.PenaltyBreakString &&
PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
Index: clang/docs/ClangFormatStyleOptions.rst
===================================================================
--- clang/docs/ClangFormatStyleOptions.rst
+++ clang/docs/ClangFormatStyleOptions.rst
@@ -3194,6 +3194,9 @@
**PenaltyBreakTemplateDeclaration** (``Unsigned``) :versionbadge:`clang-format 7`
The penalty for breaking after template declaration.
+**PenaltyBreakOpenParenthesis** (``Unsigned``) :versionbadge:`clang-format 14`
+ The penalty for breaking after ``(``.
+
**PenaltyExcessCharacter** (``Unsigned``) :versionbadge:`clang-format 3.7`
The penalty for each character outside of the column limit.
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits