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;

llvm-svn: 239893
This commit is contained in:
Daniel Jasper 2015-06-17 09:44:02 +00:00
parent e285b8dd2e
commit 90cf380e92
2 changed files with 21 additions and 5 deletions

View File

@ -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() {

View File

@ -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}");