diff --git a/src/printer.js b/src/printer.js index fcda02739..1e6ae4dfc 100644 --- a/src/printer.js +++ b/src/printer.js @@ -1488,7 +1488,15 @@ function genericPrintNoParens(path, options, print, args) { const shouldAddLine = i !== n.consequent.length - 1 && util.isNextLineEmpty(options.originalText, p.getValue()); - return concat([print(p), shouldAddLine ? hardline : ""]); + const printed = concat([ + print(p), + shouldAddLine ? hardline : "" + ]); + // in no-semi mode, prepend statement with semicolon if it might break ASI + if (!options.semi && stmtNeedsASIProtection(p)) { + return concat([";", printed]); + } + return printed; }) .filter(e => e !== null) ); diff --git a/tests/no-semi/__snapshots__/jsfmt.spec.js.snap b/tests/no-semi/__snapshots__/jsfmt.spec.js.snap index 8646015b9..ff055a1b8 100644 --- a/tests/no-semi/__snapshots__/jsfmt.spec.js.snap +++ b/tests/no-semi/__snapshots__/jsfmt.spec.js.snap @@ -81,6 +81,69 @@ x `; +exports[`issue2006.js 1`] = ` +switch (n) { + case 11: + var c = a.e; + (i.a += Ga(c.e)), F(i, c.i, 0); +} + +var c = a.e; +(i.a += Ga(c.e)), F(i, c.i, 0); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +switch (n) { + case 11: + var c = a.e; + (i.a += Ga(c.e)), F(i, c.i, 0); +} + +var c = a.e; +(i.a += Ga(c.e)), F(i, c.i, 0); + +`; + +exports[`issue2006.js 2`] = ` +switch (n) { + case 11: + var c = a.e; + (i.a += Ga(c.e)), F(i, c.i, 0); +} + +var c = a.e; +(i.a += Ga(c.e)), F(i, c.i, 0); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +switch (n) { + case 11: + var c = a.e + ;(i.a += Ga(c.e)), F(i, c.i, 0) +} + +var c = a.e +;(i.a += Ga(c.e)), F(i, c.i, 0) + +`; + +exports[`issue2006.js 3`] = ` +switch (n) { + case 11: + var c = a.e; + (i.a += Ga(c.e)), F(i, c.i, 0); +} + +var c = a.e; +(i.a += Ga(c.e)), F(i, c.i, 0); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +switch (n) { + case 11: + var c = a.e + ;(i.a += Ga(c.e)), F(i, c.i, 0) +} + +var c = a.e +;(i.a += Ga(c.e)), F(i, c.i, 0) + +`; + exports[`no-semi.js 1`] = ` // with preexisting semi diff --git a/tests/no-semi/issue2006.js b/tests/no-semi/issue2006.js new file mode 100644 index 000000000..bcbd4fbde --- /dev/null +++ b/tests/no-semi/issue2006.js @@ -0,0 +1,8 @@ +switch (n) { + case 11: + var c = a.e; + (i.a += Ga(c.e)), F(i, c.i, 0); +} + +var c = a.e; +(i.a += Ga(c.e)), F(i, c.i, 0);