diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -584,6 +584,9 @@ Keywords.kw___except)) { if (Style.AllowShortBlocksOnASingleLine == FormatStyle::SBS_Never) return 0; + if (Style.AllowShortBlocksOnASingleLine == FormatStyle::SBS_Empty && + !I[1]->First->is(tok::r_brace)) + return 0; // Don't merge when we can't except the case when // the control statement block is empty if (!Style.AllowShortIfStatementsOnASingleLine && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -22858,6 +22858,23 @@ verifyFormat("co_return co_yield foo();"); } +TEST_F(FormatTest, EmptyShortBlock) { + auto Style = getLLVMStyle(); + Style.AllowShortBlocksOnASingleLine = FormatStyle::SBS_Empty; + + verifyFormat("try {\n" + " doA();\n" + "} catch (Exception &e) {\n" + " e.printStackTrace();\n" + "}\n", + Style); + + verifyFormat("try {\n" + " doA();\n" + "} catch (Exception &e) {}\n", + Style); +} + } // namespace } // namespace format } // namespace clang diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -1379,5 +1379,22 @@ Style); } +TEST_F(FormatTestCSharp, EmptyShortBlock) { + auto Style = getLLVMStyle(); + Style.AllowShortBlocksOnASingleLine = FormatStyle::SBS_Empty; + + verifyFormat("try {\n" + " doA();\n" + "} catch (Exception e) {\n" + " e.printStackTrace();\n" + "}\n", + Style); + + verifyFormat("try {\n" + " doA();\n" + "} catch (Exception e) {}\n", + Style); +} + } // namespace format } // end namespace clang