From: Daniel Jasper Date: Wed, 17 Jun 2015 09:44:02 +0000 (+0000) Subject: clang-format: [JS] Fix typescript enum formatting. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee4c1b5fd65b9118cb0c0368583bef8c5ab3e3e1;p=clang clang-format: [JS] Fix typescript enum formatting. Patch by Martin Probst. Before: enum { A, B } var x = 1; After: enum { A, B } var x = 1; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239893 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index 7d9e5e98cf..20f5d3f078 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -774,7 +774,15 @@ void UnwrappedLineParser::parseStructuralElement() { parseBracedList(); break; case tok::kw_enum: + // parseEnum falls through and does not yet add an unwrapped line as an + // enum definition can start a structural element. parseEnum(); + // This does not apply for Java and JavaScript. + if (Style.Language == FormatStyle::LK_Java || + Style.Language == FormatStyle::LK_JavaScript) { + addUnwrappedLine(); + return; + } break; case tok::kw_typedef: nextToken(); @@ -1512,8 +1520,8 @@ void UnwrappedLineParser::parseEnum() { addUnwrappedLine(); } - // We fall through to parsing a structural element afterwards, so that in - // enum A {} n, m; + // There is no addUnwrappedLine() here so that we fall through to parsing a + // structural element afterwards. Thus, in "enum A {} n, m;", // "} n, m;" will end up in one unwrapped line. } @@ -1630,9 +1638,9 @@ void UnwrappedLineParser::parseRecord() { parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/true, /*MunchSemi=*/false); } - // We fall through to parsing a structural element afterwards, so - // class A {} n, m; - // will end up in one unwrapped line. + // There is no addUnwrappedLine() here so that we fall through to parsing a + // structural element afterwards. Thus, in "class A {} n, m;", + // "} n, m;" will end up in one unwrapped line. } void UnwrappedLineParser::parseObjCProtocolList() { diff --git a/unittests/Format/FormatTestJS.cpp b/unittests/Format/FormatTestJS.cpp index 7c8b3fce42..2911f0eb24 100644 --- a/unittests/Format/FormatTestJS.cpp +++ b/unittests/Format/FormatTestJS.cpp @@ -688,6 +688,14 @@ TEST_F(FormatTestJS, InterfaceDeclarations) { "var y;"); } +TEST_F(FormatTestJS, EnumDeclarations) { + verifyFormat("enum Foo {\n" + " A = 1, // comment\n" + " B\n" + "}\n" + "var x = 1;"); +} + TEST_F(FormatTestJS, MetadataAnnotations) { verifyFormat("@A\nclass C {\n}"); verifyFormat("@A({arg: 'value'})\nclass C {\n}");