[clang] 07fe451 - [clang-format] Fix SplitEmptyRecord affecting SplitEmptyFunction.
Marek Kurdej via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 21 07:54:25 PST 2021
Author: Marek Kurdej
Date: 2021-12-21T16:54:19+01:00
New Revision: 07fe45130546001632e1a6005922c58154e72fe9
URL: https://github.com/llvm/llvm-project/commit/07fe45130546001632e1a6005922c58154e72fe9
DIFF: https://github.com/llvm/llvm-project/commit/07fe45130546001632e1a6005922c58154e72fe9.diff
LOG: [clang-format] Fix SplitEmptyRecord affecting SplitEmptyFunction.
Fixes https://github.com/llvm/llvm-project/issues/50051.
Given the style:
```
BraceWrapping
AfterFunction: true
SplitEmptyFunction: true
SplitEmptyRecord: false
...
```
The code that should be like:
```
void f(int aaaaaaaaaaaaaaaaaaaaaaaaaaaa,
int bbbbbbbbbbbbbbbbbbbbbbbb)
{
}
```
gets the braces merged together:
```
void f(int aaaaaaaaaaaaaaaaaaaaaaaaaaaa,
int bbbbbbbbbbbbbbbbbbbbbbbb)
{}
```
Reviewed By: MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D116049
Added:
Modified:
clang/lib/Format/UnwrappedLineFormatter.cpp
clang/unittests/Format/FormatTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp
index 8a86b85aca34..3d4c1a4f903b 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -393,11 +393,17 @@ class LineJoiner {
// Try to merge a block with left brace wrapped that wasn't yet covered
if (TheLine->Last->is(tok::l_brace)) {
- return !Style.BraceWrapping.AfterFunction ||
- (I[1]->First->is(tok::r_brace) &&
- !Style.BraceWrapping.SplitEmptyRecord)
- ? tryMergeSimpleBlock(I, E, Limit)
- : 0;
+ bool ShouldMerge = false;
+ if (TheLine->First->isOneOf(tok::kw_class, tok::kw_struct)) {
+ ShouldMerge = !Style.BraceWrapping.AfterClass ||
+ (I[1]->First->is(tok::r_brace) &&
+ !Style.BraceWrapping.SplitEmptyRecord);
+ } else {
+ ShouldMerge = !Style.BraceWrapping.AfterFunction ||
+ (I[1]->First->is(tok::r_brace) &&
+ !Style.BraceWrapping.SplitEmptyFunction);
+ }
+ return ShouldMerge ? tryMergeSimpleBlock(I, E, Limit) : 0;
}
// Try to merge a function block with left brace wrapped
if (I[1]->First->is(TT_FunctionLBrace) &&
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 8287188a9971..11b74580c317 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -12200,6 +12200,38 @@ TEST_F(FormatTest, SplitEmptyFunction) {
"}",
Style);
}
+
+TEST_F(FormatTest, SplitEmptyFunctionButNotRecord) {
+ FormatStyle Style = getLLVMStyle();
+ Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_None;
+ Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+ Style.BraceWrapping.AfterFunction = true;
+ Style.BraceWrapping.SplitEmptyFunction = true;
+ Style.BraceWrapping.SplitEmptyRecord = false;
+ Style.ColumnLimit = 40;
+
+ verifyFormat("class C {};", Style);
+ verifyFormat("struct C {};", Style);
+ verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int bbbbbbbbbbbbbbbbbbbbbbbb)\n"
+ "{\n"
+ "}",
+ Style);
+ verifyFormat("class C {\n"
+ " C()\n"
+ " : aaaaaaaaaaaaaaaaaaaaaaaaaaaa(),\n"
+ " bbbbbbbbbbbbbbbbbbb()\n"
+ " {\n"
+ " }\n"
+ " void\n"
+ " m(int aaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+ " int bbbbbbbbbbbbbbbbbbbbbbbb)\n"
+ " {\n"
+ " }\n"
+ "};",
+ Style);
+}
+
TEST_F(FormatTest, KeepShortFunctionAfterPPElse) {
FormatStyle Style = getLLVMStyle();
Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_All;
More information about the cfe-commits
mailing list