Protect SwitchCase statements from ASI (#2008)

* Add no-semi test with SequenceExpression

Adapted from https://github.com/prettier/prettier/issues/2006

* Protect SequenceExpressions from ASI

Fixes https://github.com/prettier/prettier/issues/2006

* Add test for ASI protection of SequenceExpression outside SwitchCase

See https://github.com/prettier/prettier/pull/2008#issuecomment-306614217

* Revert "Protect SequenceExpressions from ASI"

This reverts commit ca644fad8072c90a977ad8a2f29674bc72f679e8.

* Protect SwitchCase statements from ASI

See https://github.com/prettier/prettier/pull/2008#issuecomment-306614217

Fixes https://github.com/prettier/prettier/issues/2006
master
Joseph Frazier 2017-06-06 17:28:51 -04:00 committed by Christopher Chedeau
parent 7c051804a8
commit 0cfd772fd2
3 changed files with 80 additions and 1 deletions

View File

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

View File

@ -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

View File

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