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;
|
||||
|
||||
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)) {
|
||||
exprs.push(node);
|
||||
@ -66,7 +70,10 @@ export default function gatherSequenceExpressions(
|
||||
exprs.push(body);
|
||||
} else if (isEmptyStatement(node)) {
|
||||
// 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 {
|
||||
// bailed, we can't turn this statement into an expression
|
||||
return;
|
||||
|
||||
@ -317,10 +317,10 @@ describe("converters", function () {
|
||||
const sequence = t.toSequenceExpression([undefinedNode, node], scope);
|
||||
expect(sequence).toBeUndefined();
|
||||
});
|
||||
it("gathers empty statements", function () {
|
||||
it("gathers empty statements if first element", function () {
|
||||
const node = parseCode(";");
|
||||
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 () {
|
||||
const node = parseCode("{ ; true }");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user