Index: lib/Format/UnwrappedLineParser.h =================================================================== --- lib/Format/UnwrappedLineParser.h +++ lib/Format/UnwrappedLineParser.h @@ -101,7 +101,7 @@ void parseObjCProtocol(); bool tryToParseLambda(); bool tryToParseLambdaIntroducer(); - void tryToParseJSFunction(); + void tryToParseJSFunction(bool BracedList = false); void addUnwrappedLine(); bool eof() const; void nextToken(); Index: lib/Format/UnwrappedLineParser.cpp =================================================================== --- lib/Format/UnwrappedLineParser.cpp +++ lib/Format/UnwrappedLineParser.cpp @@ -905,11 +905,11 @@ return false; } -void UnwrappedLineParser::tryToParseJSFunction() { +void UnwrappedLineParser::tryToParseJSFunction(bool BracedList) { nextToken(); - // Consume function name. - if (FormatTok->is(tok::identifier)) + // Consume function name if in braced list. + if (BracedList && FormatTok->is(tok::identifier)) nextToken(); if (FormatTok->isNot(tok::l_paren)) @@ -945,7 +945,7 @@ do { if (Style.Language == FormatStyle::LK_JavaScript && FormatTok->TokenText == "function") { - tryToParseJSFunction(); + tryToParseJSFunction(true); continue; } switch (FormatTok->Tok.getKind()) { Index: unittests/Format/FormatTestJS.cpp =================================================================== --- unittests/Format/FormatTestJS.cpp +++ unittests/Format/FormatTestJS.cpp @@ -184,6 +184,14 @@ " return 1;\n" " }\n" "};"); + verifyFormat("function outer1(a, b) {\n" + " function inner1(a, b) { return a; }\n" + " inner1(a, b);\n" + "}\n" + "function outer2(a, b) {\n" + " function inner2(a, b) { return a; }\n" + " inner2(a, b);\n" + "}"); } TEST_F(FormatTestJS, MultipleFunctionLiterals) {