osandov created this revision. osandov added reviewers: MyDeveloperDay, krasimir. osandov added projects: clang-format, clang. Herald added a subscriber: cfe-commits.
clang-format currently puts the first enumerator on the same line as the enum keyword and opening brace if it fits (for example, for anonymous enums if IndentWidth is 8): $ echo "enum { A, };" | clang-format -style="{BasedOnStyle: llvm, IndentWidth: 8}" enum { A, }; This doesn't seem to be intentional, as I can't find any style guide that suggests wrapping enums this way. Always force the enumerator to be on a new line, which gets us the desired result: $ echo "enum { A, };" | ./bin/clang-format -style="{BasedOnStyle: llvm, IndentWidth: 8}" enum { A, }; Test Plan: New test added. Confirmed test failed without change and passed with change by running: $ ninja FormatTests && ./tools/clang/unittests/Format/FormatTests Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D77682 Files: clang/lib/Format/ContinuationIndenter.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -1929,6 +1929,14 @@ " TWO\n" "};\n" "int i;"); + + FormatStyle EightIndent = getLLVMStyle(); + EightIndent.IndentWidth = 8; + verifyFormat("enum {\n" + " A,\n" + "};", + EightIndent); + // Not enums. verifyFormat("enum X f() {\n" " a();\n" Index: clang/lib/Format/ContinuationIndenter.cpp =================================================================== --- clang/lib/Format/ContinuationIndenter.cpp +++ clang/lib/Format/ContinuationIndenter.cpp @@ -423,7 +423,7 @@ State.Stack.back().BreakBeforeParameter && Current.CanBreakBefore) return true; - if (State.Column <= NewLineColumn) + if (!State.Line->First->is(tok::kw_enum) && State.Column <= NewLineColumn) return false; if (Style.AlwaysBreakBeforeMultilineStrings &&
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -1929,6 +1929,14 @@ " TWO\n" "};\n" "int i;"); + + FormatStyle EightIndent = getLLVMStyle(); + EightIndent.IndentWidth = 8; + verifyFormat("enum {\n" + " A,\n" + "};", + EightIndent); + // Not enums. verifyFormat("enum X f() {\n" " a();\n" Index: clang/lib/Format/ContinuationIndenter.cpp =================================================================== --- clang/lib/Format/ContinuationIndenter.cpp +++ clang/lib/Format/ContinuationIndenter.cpp @@ -423,7 +423,7 @@ State.Stack.back().BreakBeforeParameter && Current.CanBreakBefore) return true; - if (State.Column <= NewLineColumn) + if (!State.Line->First->is(tok::kw_enum) && State.Column <= NewLineColumn) return false; if (Style.AlwaysBreakBeforeMultilineStrings &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits