skip following empty statements in toSequenceExpression (#11724)
* fix: statementlist behavior * fixed prettier and babel-types/converter errors * added check for first node * remove node length check, only check if node is first * add reset eLU if proceeding is non-empty * fix failure for ci tests * remove .expressions since sequence expression isn't produced * changed test title
This commit is contained in:
parent
65911144e9
commit
cfaa70dcf4
15
packages/babel-plugin-proposal-do-expressions/test/fixtures/do-expressions/semicolons.js
vendored
Normal file
15
packages/babel-plugin-proposal-do-expressions/test/fixtures/do-expressions/semicolons.js
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
expect(do {
|
||||||
|
x = do { 1; };
|
||||||
|
}).toBe(1);
|
||||||
|
|
||||||
|
expect(do {
|
||||||
|
z = do { 1;;;; };
|
||||||
|
}).toBe(1)
|
||||||
|
|
||||||
|
expect(do {
|
||||||
|
w = (do { 1;;;; });
|
||||||
|
}).toBe(1);
|
||||||
|
|
||||||
|
expect(do {
|
||||||
|
k = do { ; };
|
||||||
|
}).toBe(undefined);
|
||||||
@ -25,7 +25,11 @@ export default function gatherSequenceExpressions(
|
|||||||
let ensureLastUndefined = true;
|
let ensureLastUndefined = true;
|
||||||
|
|
||||||
for (const node of nodes) {
|
for (const node of nodes) {
|
||||||
ensureLastUndefined = false;
|
// if we encounter emptyStatement before a non-emptyStatement
|
||||||
|
// we want to disregard that
|
||||||
|
if (!isEmptyStatement(node)) {
|
||||||
|
ensureLastUndefined = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (isExpression(node)) {
|
if (isExpression(node)) {
|
||||||
exprs.push(node);
|
exprs.push(node);
|
||||||
@ -66,7 +70,10 @@ export default function gatherSequenceExpressions(
|
|||||||
exprs.push(body);
|
exprs.push(body);
|
||||||
} else if (isEmptyStatement(node)) {
|
} else if (isEmptyStatement(node)) {
|
||||||
// empty statement so ensure the last item is undefined if we're last
|
// empty statement so ensure the last item is undefined if we're last
|
||||||
ensureLastUndefined = true;
|
// checks if emptyStatement is first
|
||||||
|
if (nodes.indexOf(node) === 0) {
|
||||||
|
ensureLastUndefined = true;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// bailed, we can't turn this statement into an expression
|
// bailed, we can't turn this statement into an expression
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -317,10 +317,10 @@ describe("converters", function () {
|
|||||||
const sequence = t.toSequenceExpression([undefinedNode, node], scope);
|
const sequence = t.toSequenceExpression([undefinedNode, node], scope);
|
||||||
expect(sequence).toBeUndefined();
|
expect(sequence).toBeUndefined();
|
||||||
});
|
});
|
||||||
it("gathers empty statements", function () {
|
it("gathers empty statements if first element", function () {
|
||||||
const node = parseCode(";");
|
const node = parseCode(";");
|
||||||
const sequence = t.toSequenceExpression([undefinedNode, node], scope);
|
const sequence = t.toSequenceExpression([undefinedNode, node], scope);
|
||||||
expect(generateCode(sequence.expressions[1])).toBe("undefined");
|
expect(generateCode(sequence)).toBe("undefined");
|
||||||
});
|
});
|
||||||
it("skips empty statement if expression afterwards", function () {
|
it("skips empty statement if expression afterwards", function () {
|
||||||
const node = parseCode("{ ; true }");
|
const node = parseCode("{ ; true }");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user