Skip to content
Snippets Groups Projects
Commit 96ff76b6 authored by Daniel Jasper's avatar Daniel Jasper
Browse files

clang-format: [JS] support free-standing functions again.

This worked initially but was broken by r210887.

Before:
  function outer1(a, b) {
    function inner1(a, b) { return a; } inner1(a, b);
  } function outer2(a, b) { function inner2(a, b) { return a; } inner2(a, b); }

After:
  function outer1(a, b) {
    function inner1(a, b) { return a; }
    inner1(a, b);
  }
  function outer2(a, b) {
    function inner2(a, b) { return a; }
    inner2(a, b);
  }

Thanks to Adam Strzelecki for working on this.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212038 91177308-0d34-0410-b5e6-96231b3b80d8
parent 92b1476e
No related branches found
No related tags found
No related merge requests found
...@@ -770,7 +770,10 @@ void UnwrappedLineParser::parseStructuralElement() { ...@@ -770,7 +770,10 @@ void UnwrappedLineParser::parseStructuralElement() {
return; return;
case tok::identifier: { case tok::identifier: {
StringRef Text = FormatTok->TokenText; StringRef Text = FormatTok->TokenText;
if (Style.Language == FormatStyle::LK_JavaScript && Text == "function") { // Parse function literal unless 'function' is the first token in a line
// in which case this should be treated as a free-standing function.
if (Style.Language == FormatStyle::LK_JavaScript && Text == "function" &&
Line->Tokens.size() > 0) {
tryToParseJSFunction(); tryToParseJSFunction();
break; break;
} }
......
...@@ -138,6 +138,17 @@ TEST_F(FormatTestJS, GoogScopes) { ...@@ -138,6 +138,17 @@ TEST_F(FormatTestJS, GoogScopes) {
"}); // goog.scope"); "}); // goog.scope");
} }
TEST_F(FormatTestJS, FormatsFreestandingFunctions) {
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, FunctionLiterals) { TEST_F(FormatTestJS, FunctionLiterals) {
verifyFormat("doFoo(function() { return 1; });"); verifyFormat("doFoo(function() { return 1; });");
verifyFormat("var func = function() { return 1; };"); verifyFormat("var func = function() { return 1; };");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment