From 9da65a3ab009ca2f3b55d7a95d266554fec88d31 Mon Sep 17 00:00:00 2001 From: Owen Pan Date: Fri, 21 Sep 2018 03:46:36 +0000 Subject: [PATCH] [clang-format] Do not merge short case labels if followed by a block. Do not allow short case labels on a single line if the label is followed by a left brace. Fixes PR38926. llvm-svn: 342708 --- clang/lib/Format/UnwrappedLineFormatter.cpp | 2 ++ clang/unittests/Format/FormatTest.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp index 43d7150..76b495f4 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -428,6 +428,8 @@ private: if (Limit == 0 || I + 1 == E || I[1]->First->isOneOf(tok::kw_case, tok::kw_default)) return 0; + if (I[0]->Last->is(tok::l_brace) || I[1]->First->is(tok::l_brace)) + return 0; unsigned NumStmts = 0; unsigned Length = 0; bool EndsWithComment = false; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index db2e226..dac8497 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -1241,6 +1241,30 @@ TEST_F(FormatTest, ShortCaseLabels) { " return false;\n" "}", Style)); + Style.AllowShortCaseLabelsOnASingleLine = true; + Style.BreakBeforeBraces = FormatStyle::BS_Custom; + Style.BraceWrapping.AfterControlStatement = true; + EXPECT_EQ("switch (n)\n" + "{\n" + " case 0:\n" + " {\n" + " return false;\n" + " }\n" + " default:\n" + " {\n" + " return true;\n" + " }\n" + "}", + format("switch (n) {\n" + " case 0: {\n" + " return false;\n" + " }\n" + " default:\n" + " {\n" + " return true;\n" + " }\n" + "}", + Style)); } TEST_F(FormatTest, FormatsLabels) { -- 2.7.4