From 58a97ab597f2914ac8c8568afc1d858035229a57 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Sun, 22 Jan 2017 12:34:14 -0800 Subject: [PATCH] Fix missing semi-colon in for loop and var body (#388) We avoid adding a `;` for a variable declaration in for loop but this is only meant if the var declaration is inside of the `()` part of the for loop. Not if the body part. Fixes #385 --- src/printer.js | 18 +++++++++--------- tests/for/__snapshots__/jsfmt.spec.js.snap | 9 +++++++++ tests/for/var.js | 1 + 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 tests/for/var.js diff --git a/src/printer.js b/src/printer.js index bae5374f1..43aa47b3c 100644 --- a/src/printer.js +++ b/src/printer.js @@ -746,17 +746,17 @@ function genericPrintNoParens(path, options, print) { ]; // We generally want to terminate all variable declarations with a - // semicolon, except when they are children of for loops. + // semicolon, except when they in the () part of for loops. var parentNode = path.getParentNode(); - if ( - !namedTypes.ForStatement.check(parentNode) && - !namedTypes.ForInStatement.check(parentNode) && - !(namedTypes.ForOfStatement && - namedTypes.ForOfStatement.check(parentNode)) && - !(namedTypes.ForAwaitStatement && - namedTypes.ForAwaitStatement.check(parentNode)) - ) { + var isParentForLoop = namedTypes.ForStatement.check(parentNode) || + namedTypes.ForInStatement.check(parentNode) | + (namedTypes.ForOfStatement && + namedTypes.ForOfStatement.check(parentNode)) || + (namedTypes.ForAwaitStatement && + namedTypes.ForAwaitStatement.check(parentNode)); + + if (!(isParentForLoop && parentNode.body !== n)) { parts.push(";"); } diff --git a/tests/for/__snapshots__/jsfmt.spec.js.snap b/tests/for/__snapshots__/jsfmt.spec.js.snap index e9bcb4c28..274a6614a 100644 --- a/tests/for/__snapshots__/jsfmt.spec.js.snap +++ b/tests/for/__snapshots__/jsfmt.spec.js.snap @@ -291,3 +291,12 @@ for (var i = 0; i < 10; ++i) { } " `; + +exports[`test var.js 1`] = ` +"for (a in b) var c = {}; []; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +for (a in b) + var c = {}; +[]; +" +`; diff --git a/tests/for/var.js b/tests/for/var.js new file mode 100644 index 000000000..09f1808b9 --- /dev/null +++ b/tests/for/var.js @@ -0,0 +1 @@ +for (a in b) var c = {}; [];