Author: 闫立栋 Date: 2025-08-29T18:51:33-07:00 New Revision: 81035c31cd7d0f65ef650474c0d585131f958bda
URL: https://github.com/llvm/llvm-project/commit/81035c31cd7d0f65ef650474c0d585131f958bda DIFF: https://github.com/llvm/llvm-project/commit/81035c31cd7d0f65ef650474c0d585131f958bda.diff LOG: [clang-format] Allow short function body on a single line (#151428) Fix #145161 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 c938ff3965f9e..2a7bfd1a7dc5b 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -251,10 +251,13 @@ class LineJoiner { : Limit - TheLine->Last->TotalLength; if (TheLine->Last->is(TT_FunctionLBrace) && - TheLine->First == TheLine->Last && - !Style.BraceWrapping.SplitEmptyFunction && - NextLine.First->is(tok::r_brace)) { - return tryMergeSimpleBlock(I, E, Limit); + TheLine->First == TheLine->Last) { + const bool EmptyFunctionBody = NextLine.First->is(tok::r_brace); + if ((EmptyFunctionBody && !Style.BraceWrapping.SplitEmptyFunction) || + (!EmptyFunctionBody && + Style.AllowShortBlocksOnASingleLine == FormatStyle::SBS_Always)) { + return tryMergeSimpleBlock(I, E, Limit); + } } const auto *PreviousLine = I != AnnotatedLines.begin() ? I[-1] : nullptr; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 46080c3369d36..4e9d31895998f 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -14996,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; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
