Skip to content

Commit

Permalink
Prevent unintended ASI for nested conditionals (#3732)
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Aug 16, 2020
1 parent 4b432dc commit 57ed7e3
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/ast/nodes/ConditionalExpression.ts
Expand Up @@ -187,6 +187,7 @@ export default class ConditionalExpression extends NodeBase implements Deoptimiz
isCalleeOfRenderedParent: renderedParentType
? isCalleeOfRenderedParent
: (this.parent as CallExpression).callee === this,
preventASI: true,
renderedParentType: renderedParentType || this.parent.type
});
} else {
Expand Down
1 change: 1 addition & 0 deletions src/ast/nodes/LogicalExpression.ts
Expand Up @@ -180,6 +180,7 @@ export default class LogicalExpression extends NodeBase implements Deoptimizable
isCalleeOfRenderedParent: renderedParentType
? isCalleeOfRenderedParent
: (this.parent as CallExpression).callee === this,
preventASI,
renderedParentType: renderedParentType || this.parent.type
});
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/ast/nodes/YieldExpression.ts
Expand Up @@ -26,7 +26,7 @@ export default class YieldExpression extends NodeBase {

render(code: MagicString, options: RenderOptions) {
if (this.argument) {
this.argument.render(code, options);
this.argument.render(code, options, { preventASI: true });
if (this.argument.start === this.start + 5 /* 'yield'.length */) {
code.prependLeft(this.start + 5, ' ');
}
Expand Down
16 changes: 13 additions & 3 deletions test/function/samples/prevent-tree-shaking-asi/main.js
Expand Up @@ -2,7 +2,9 @@ function test1() {
return true ?
/* kept */

'expected' :
true ?
'expected' :
'unexpected' :
'unexpected';
}
assert.strictEqual(test1(), 'expected');
Expand All @@ -12,15 +14,17 @@ function test2() {
'unexpected' :
/* kept */

'expected';
false ?
'unexpected' :
'expected';
}
assert.strictEqual(test2(), 'expected');

function test3() {
return true &&
/* kept */

'expected';
'expected' || false;
}
assert.strictEqual(test3(), 'expected');

Expand All @@ -40,3 +44,9 @@ try {
} catch (err) {
assert.strictEqual(err.message, 'expected');
}

function* test5() {
yield false ||
'expected'
}
assert.strictEqual(test5().next().value, 'expected');

0 comments on commit 57ed7e3

Please sign in to comment.