Author: Mitchell Balan Date: 2020-03-06T11:13:23-05:00 New Revision: 2eff1c3ce48ef529064e2dc006d57c37da0b4d84
URL: https://github.com/llvm/llvm-project/commit/2eff1c3ce48ef529064e2dc006d57c37da0b4d84 DIFF: https://github.com/llvm/llvm-project/commit/2eff1c3ce48ef529064e2dc006d57c37da0b4d84.diff LOG: [clang-format] Extend AllowShortLoopsOnASingleLine to do ... while loops. Summary: If AllowShortLoopsOnASingleLine is enabled, do a++; while (true); becomes do a++; while (true); Reviewers: MyDeveloperDay, mitchell-stellar Reviewed by: mitchell-stellar Contributed by: DaanDeMeyer Subscribers: cfe-commits Tags: #clang, #clang-format Differential Revision: https://reviews.llvm.org/D75022 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 da9ee41da71b..84ccbec2150d 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -411,7 +411,7 @@ class LineJoiner { ? tryMergeSimpleControlStatement(I, E, Limit) : 0; } - if (TheLine->First->isOneOf(tok::kw_for, tok::kw_while)) { + if (TheLine->First->isOneOf(tok::kw_for, tok::kw_while, tok::kw_do)) { return Style.AllowShortLoopsOnASingleLine ? tryMergeSimpleControlStatement(I, E, Limit) : 0; @@ -514,7 +514,10 @@ class LineJoiner { return 0; Limit = limitConsideringMacros(I + 1, E, Limit); AnnotatedLine &Line = **I; - if (Line.Last->isNot(tok::r_paren)) + if (!Line.First->is(tok::kw_do) && Line.Last->isNot(tok::r_paren)) + return 0; + // Only merge do while if do is the only statement on the line. + if (Line.First->is(tok::kw_do) && !Line.Last->is(tok::kw_do)) return 0; if (1 + I[1]->Last->TotalLength > Limit) return 0; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index cb052ecaf111..a6f35ba27069 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -556,6 +556,30 @@ TEST_F(FormatTest, FormatLoopsWithoutCompoundStatement) { verifyFormat("for (;;) /* still don't merge */\n" " continue;", AllowsMergedLoops); + verifyFormat("do a++;\n" + "while (true);", + AllowsMergedLoops); + verifyFormat("do /* Don't merge */\n" + " a++;\n" + "while (true);", + AllowsMergedLoops); + verifyFormat("do // Don't merge\n" + " a++;\n" + "while (true);", + AllowsMergedLoops); + verifyFormat("do\n" + " // Don't merge\n" + " a++;\n" + "while (true);", + AllowsMergedLoops); + // Without braces labels are interpreted diff erently. + verifyFormat("{\n" + " do\n" + " label:\n" + " a++;\n" + " while (true);\n" + "}", + AllowsMergedLoops); } TEST_F(FormatTest, FormatShortBracedStatements) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits