From: Daniel Jasper Date: Tue, 20 Aug 2013 12:42:50 +0000 (+0000) Subject: clang-format: Format enum struct/class like enum. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbeb1c6f337f73fe7d1135b379e45fbda0c4766d;p=clang clang-format: Format enum struct/class like enum. Patch by Joe Hermaszewski. Thank you! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188794 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index 56fe81f3f2..d77f931b71 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -918,6 +918,10 @@ void UnwrappedLineParser::parseAccessSpecifier() { void UnwrappedLineParser::parseEnum() { nextToken(); + // Eat up enum class ... + if (FormatTok->Tok.is(tok::kw_class) || + FormatTok->Tok.is(tok::kw_struct)) + nextToken(); if (FormatTok->Tok.is(tok::identifier) || FormatTok->Tok.is(tok::kw___attribute) || FormatTok->Tok.is(tok::kw___declspec)) { diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 5ebae5f6b2..4342781217 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1518,6 +1518,40 @@ TEST_F(FormatTest, FormatsEnum) { verifyFormat("enum X f() {\n a();\n return 42;\n}"); } +TEST_F(FormatTest, FormatsEnumStruct) { + verifyFormat("enum struct {\n" + " Zero,\n" + " One = 1,\n" + " Two = One + 1,\n" + " Three = (One + Two),\n" + " Four = (Zero && (One ^ Two)) | (One << Two),\n" + " Five = (One, Two, Three, Four, 5)\n" + "};"); + verifyFormat("enum struct Enum {};"); + verifyFormat("enum struct {};"); + verifyFormat("enum struct X E {\n} d;"); + verifyFormat("enum struct __attribute__((...)) E {\n} d;"); + verifyFormat("enum struct __declspec__((...)) E {\n} d;"); + verifyFormat("enum struct X f() {\n a();\n return 42;\n}"); +} + +TEST_F(FormatTest, FormatsEnumClass) { + verifyFormat("enum class {\n" + " Zero,\n" + " One = 1,\n" + " Two = One + 1,\n" + " Three = (One + Two),\n" + " Four = (Zero && (One ^ Two)) | (One << Two),\n" + " Five = (One, Two, Three, Four, 5)\n" + "};"); + verifyFormat("enum class Enum {};"); + verifyFormat("enum class {};"); + verifyFormat("enum class X E {\n} d;"); + verifyFormat("enum class __attribute__((...)) E {\n} d;"); + verifyFormat("enum class __declspec__((...)) E {\n} d;"); + verifyFormat("enum class X f() {\n a();\n return 42;\n}"); +} + TEST_F(FormatTest, FormatsBitfields) { verifyFormat("struct Bitfields {\n" " unsigned sClass : 8;\n"