Skip to content

Commit

Permalink
Do expressions transform for switch statements (#10070)
Browse files Browse the repository at this point in the history
* lint fix

* switch inside do expression

* review comments

* review comments

* make min diff

* adding more test

* review changes

* review changes

* handle block statement and added more test cases

* fix implementation and add more test cases

* fix last swtich case

* disable block fallthrough case

* fix nitpick reviews
  • Loading branch information
tanhauhau authored and nicolo-ribaudo committed Aug 1, 2019
1 parent be2cbde commit 3e4a9d5
Show file tree
Hide file tree
Showing 37 changed files with 776 additions and 0 deletions.
@@ -0,0 +1,36 @@
// `blockExpressions` before `break` is hard to deal with
// https://github.com/babel/babel/pull/10070#discussion_r296048106
const x = (n) => do {
switch (n) {
case 0:
{ "a"; }
{ "b"; };
case 1:
{ "c"; }
break;
{ "d"; };
case 2:
"a";
"b";
case 3:
{}
{ break; }
case 4:
{ "d"; }
{ "e"; }
case 5:
"f";
case 6:
{}
case 7:
}
}

expect(x(0)).toBe('c')
expect(x(1)).toBe('c')
expect(x(2)).toBeUndefined()
expect(x(3)).toBeUndefined()
expect(x(4)).toBe('f')
expect(x(5)).toBe('f')
expect(x(6)).toBeUndefined()
expect(x(7)).toBeUndefined()
@@ -0,0 +1,25 @@
const x = (n) => do {
switch (n) {
case 0:
{ "a"; }
{ "b"; };
case 1:
{ "c"; }
break;
{ "d"; };
case 2:
"a";
"b";
case 3:
{}
{ break; }
case 4:
{ "a"; }
{ "b"; }
case 5:
"c";
case 6:
{}
case 7:
}
}
@@ -0,0 +1,9 @@
const x = (n) => do {
switch (n) {
case 0:
case 6:
const b = 1;
break;
default: 'bar';
}
}
@@ -0,0 +1,11 @@
const x = n => function () {
switch (n) {
case 0:
case 6:
const b = 1;
return void 0;

default:
return 'bar';
}
}();
@@ -0,0 +1,7 @@
const x = () => do {
switch (new Date().getDay()) {
case 0:
break;
default: "weekday 馃毚"
}
}
@@ -0,0 +1,9 @@
const x = () => function () {
switch (new Date().getDay()) {
case 0:
return void 0;

default:
return "weekday 馃毚";
}
}();
@@ -0,0 +1,26 @@
const x = (n) => do {
switch (n) {
case 0: {
'a';
}
case 1: {
'b';
break;
}
default: {
'd';
}
case 2: {
'c';
}
case 3:
case 4:
}
}

expect(x(0)).toBe('b');
expect(x(1)).toBe('b');
expect(x(2)).toBe('c');
expect(x(3)).toBeUndefined();
expect(x(4)).toBeUndefined();
expect(x(5)).toBe('c');
@@ -0,0 +1,19 @@
const x = (n) => do {
switch (n) {
case 0: {
'a';
}
case 1: {
'b';
break;
}
default: {
'd';
}
case 2: {
'c';
}
case 3:
case 4:
}
}
@@ -0,0 +1,26 @@
const x = n => function () {
switch (n) {
case 0:
{
'a';
}

case 1:
{
return 'b';
}

default:
{
'd';
}

case 2:
{
return 'c';
}

case 3:
case 4:
}
}();
@@ -0,0 +1,30 @@
const x = (n) => do {
switch (n) {
case 0: {
'a';
}
case 1: {
'b';
break;
}
case 2: {
'c';
break;
}
case 3: {
break;
}
case 4: {
'd';
'e';
}
default: 'f';
}
}

expect(x(0)).toBe('b');
expect(x(1)).toBe('b');
expect(x(2)).toBe('c');
expect(x(3)).toBeUndefined();
expect(x(4)).toBe('f');
expect(x(5)).toBe('f');
@@ -0,0 +1,23 @@
const x = (n) => do {
switch (n) {
case 0: {
'a';
}
case 1: {
'b';
break;
}
case 2: {
'c';
break;
}
case 3: {
break;
}
case 4: {
'd';
'e';
}
default: 'f';
}
}
@@ -0,0 +1,30 @@
const x = n => function () {
switch (n) {
case 0:
{
'a';
}

case 1:
{
return 'b';
}

case 2:
{
return 'c';
}

case 3:
return void 0;

case 4:
{
'd';
'e';
}

default:
return 'f';
}
}();
@@ -0,0 +1,21 @@
const x = (n) => do {
switch (n) {
case 0:
'a';
case 1:
'b';
break;
default: 'd';
case 2:
'c';
case 3:
case 4:
}
}

expect(x(0)).toBe('b');
expect(x(1)).toBe('b');
expect(x(2)).toBe('c');
expect(x(3)).toBeUndefined();
expect(x(4)).toBeUndefined();
expect(x(5)).toBe('c');
@@ -0,0 +1,14 @@
const x = (n) => do {
switch (n) {
case 0:
'a';
case 1:
'b';
break;
default: 'd';
case 2:
'c';
case 3:
case 4:
}
}
@@ -0,0 +1,18 @@
const x = n => function () {
switch (n) {
case 0:
'a';

case 1:
return 'b';

default:
'd';

case 2:
return 'c';

case 3:
case 4:
}
}();
@@ -0,0 +1,25 @@
const x = (n) => do {
switch (n) {
case 0:
'a';
case 1:
'b';
break;
case 2:
'c';
break;
case 3:
break;
case 4:
'd';
'e';
default: 'f';
}
}

expect(x(0)).toBe('b');
expect(x(1)).toBe('b');
expect(x(2)).toBe('c');
expect(x(3)).toBeUndefined();
expect(x(4)).toBe('f');
expect(x(5)).toBe('f');
@@ -0,0 +1,18 @@
const x = (n) => do {
switch (n) {
case 0:
'a';
case 1:
'b';
break;
case 2:
'c';
break;
case 3:
break;
case 4:
'd';
'e';
default: 'f';
}
}
@@ -0,0 +1,22 @@
const x = n => function () {
switch (n) {
case 0:
'a';

case 1:
return 'b';

case 2:
return 'c';

case 3:
return void 0;

case 4:
'd';
'e';

default:
return 'f';
}
}();

0 comments on commit 3e4a9d5

Please sign in to comment.