fixes #56: indent cases inside switch statements
parent
0861f0a49b
commit
fc521c4d03
|
@ -996,8 +996,10 @@ function genericPrintNoParens(path, options, print) {
|
|||
"switch (",
|
||||
path.call(print, "discriminant"),
|
||||
") {",
|
||||
hardline,
|
||||
join(hardline, path.map(print, "cases")),
|
||||
indent(
|
||||
options.tabWidth,
|
||||
concat([ hardline, join(hardline, path.map(print, "cases"))])
|
||||
),
|
||||
hardline,
|
||||
"}"
|
||||
]);
|
||||
|
|
|
@ -575,16 +575,16 @@ function switch_scope(x: string) {
|
|||
let a: number = 0;
|
||||
var b: number = 0;
|
||||
switch (x) {
|
||||
case \"foo\":
|
||||
let a = \"\";
|
||||
// ok: local to switch
|
||||
var b = \"\";
|
||||
// error: string ~> number
|
||||
break;
|
||||
case \"bar\":
|
||||
let a = \"\";
|
||||
// error: a already bound in switch
|
||||
break;
|
||||
case \"foo\":
|
||||
let a = \"\";
|
||||
// ok: local to switch
|
||||
var b = \"\";
|
||||
// error: string ~> number
|
||||
break;
|
||||
case \"bar\":
|
||||
let a = \"\";
|
||||
// error: a already bound in switch
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -593,25 +593,25 @@ function switch_scope(x: string) {
|
|||
// yet perfect.
|
||||
function switch_scope2(x: number) {
|
||||
switch (x) {
|
||||
case 0:
|
||||
a = \"\";
|
||||
// error: assign before declaration
|
||||
break;
|
||||
case 1:
|
||||
var b = a;
|
||||
// error: use before declaration
|
||||
break;
|
||||
case 2:
|
||||
let a = \"\";
|
||||
break;
|
||||
case 3:
|
||||
a = \"\";
|
||||
// error: skipped initializer
|
||||
break;
|
||||
case 4:
|
||||
var c: string = a;
|
||||
// error: skipped initializer
|
||||
break;
|
||||
case 0:
|
||||
a = \"\";
|
||||
// error: assign before declaration
|
||||
break;
|
||||
case 1:
|
||||
var b = a;
|
||||
// error: use before declaration
|
||||
break;
|
||||
case 2:
|
||||
let a = \"\";
|
||||
break;
|
||||
case 3:
|
||||
a = \"\";
|
||||
// error: skipped initializer
|
||||
break;
|
||||
case 4:
|
||||
var c: string = a;
|
||||
// error: skipped initializer
|
||||
break;
|
||||
}
|
||||
a = \"\"; // error: a no longer in scope
|
||||
}
|
||||
|
|
|
@ -86,15 +86,15 @@ function bar(b) {
|
|||
if (x == null)
|
||||
return;
|
||||
switch (\"\") {
|
||||
case 0:
|
||||
var y: number = x;
|
||||
// error: boolean !~> number
|
||||
x = \"\";
|
||||
case 1:
|
||||
var z: number = x;
|
||||
// 2 errors: (boolean | string) !~> number
|
||||
break;
|
||||
case 2:
|
||||
case 0:
|
||||
var y: number = x;
|
||||
// error: boolean !~> number
|
||||
x = \"\";
|
||||
case 1:
|
||||
var z: number = x;
|
||||
// 2 errors: (boolean | string) !~> number
|
||||
break;
|
||||
case 2:
|
||||
}
|
||||
var w: number = x; // 2 errors: (boolean | string) !~> number
|
||||
}
|
||||
|
@ -104,17 +104,17 @@ function bar2(b) {
|
|||
if (x == null)
|
||||
return;
|
||||
switch (\"\") {
|
||||
case 0: {
|
||||
let y: number = x;
|
||||
// error: boolean !~> number
|
||||
x = \"\";
|
||||
}
|
||||
case 1: {
|
||||
let z: number = x;
|
||||
// 2 errors: (boolean | string) !~> number
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
case 0: {
|
||||
let y: number = x;
|
||||
// error: boolean !~> number
|
||||
x = \"\";
|
||||
}
|
||||
case 1: {
|
||||
let z: number = x;
|
||||
// 2 errors: (boolean | string) !~> number
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
}
|
||||
var w: number = x; // 2 errors: (boolean | string) !~> number
|
||||
}
|
||||
|
|
|
@ -238,55 +238,55 @@ function getBinaryOp(
|
|||
op: \"plus\" | \"minus\" | \"divide\" | \"multiply\"
|
||||
): \"+\" | \"-\" | \"*\" | \"/\" {
|
||||
switch (op) {
|
||||
case \"plus\":
|
||||
return \"+\";
|
||||
case \"minus\":
|
||||
return \"-\";
|
||||
case \"divide\":
|
||||
return \"/\";
|
||||
case \"multiply\":
|
||||
return \"*\";
|
||||
default:
|
||||
throw new Error(\"Invalid binary operator: \" + op);
|
||||
case \"plus\":
|
||||
return \"+\";
|
||||
case \"minus\":
|
||||
return \"-\";
|
||||
case \"divide\":
|
||||
return \"/\";
|
||||
case \"multiply\":
|
||||
return \"*\";
|
||||
default:
|
||||
throw new Error(\"Invalid binary operator: \" + op);
|
||||
}
|
||||
}
|
||||
|
||||
export function emitExpression(node: TypedNode): t.Expression {
|
||||
switch (node.exprNodeType) {
|
||||
case \"string_literal\":
|
||||
// FALLTHROUGH
|
||||
case \"number\":
|
||||
return b.literal(node.value);
|
||||
case \"variable\":
|
||||
return b.memberExpression(
|
||||
b.identifier(\"vars\"),
|
||||
b.identifier(node.name),
|
||||
false
|
||||
);
|
||||
case \"binary_op\": {
|
||||
const lhs = emitExpression(node.lhs);
|
||||
const rhs = emitExpression(node.rhs);
|
||||
|
||||
const op = getBinaryOp(node.binaryOp);
|
||||
return b.binaryExpression(op, lhs, rhs);
|
||||
}
|
||||
case \"unary_minus\": {
|
||||
const operand = emitExpression(node.op);
|
||||
return b.unaryExpression(\"-\", operand, true);
|
||||
}
|
||||
case \"function_invocation\": {
|
||||
const callee = b.memberExpression(
|
||||
b.identifier(\"fns\"),
|
||||
case \"string_literal\":
|
||||
// FALLTHROUGH
|
||||
case \"number\":
|
||||
return b.literal(node.value);
|
||||
case \"variable\":
|
||||
return b.memberExpression(
|
||||
b.identifier(\"vars\"),
|
||||
b.identifier(node.name),
|
||||
false
|
||||
);
|
||||
case \"binary_op\": {
|
||||
const lhs = emitExpression(node.lhs);
|
||||
const rhs = emitExpression(node.rhs);
|
||||
|
||||
const args = node.parameters.map(n => emitExpression(n));
|
||||
const op = getBinaryOp(node.binaryOp);
|
||||
return b.binaryExpression(op, lhs, rhs);
|
||||
}
|
||||
case \"unary_minus\": {
|
||||
const operand = emitExpression(node.op);
|
||||
return b.unaryExpression(\"-\", operand, true);
|
||||
}
|
||||
case \"function_invocation\": {
|
||||
const callee = b.memberExpression(
|
||||
b.identifier(\"fns\"),
|
||||
b.identifier(node.name),
|
||||
false
|
||||
);
|
||||
|
||||
return b.callExpression(callee, args);
|
||||
}
|
||||
default:
|
||||
throw new Error(\"Unknown expression type: \" + node.type);
|
||||
const args = node.parameters.map(n => emitExpression(n));
|
||||
|
||||
return b.callExpression(callee, args);
|
||||
}
|
||||
default:
|
||||
throw new Error(\"Unknown expression type: \" + node.type);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
|
|
@ -31,11 +31,11 @@ var id = geolocation.watchPosition(
|
|||
e => {
|
||||
var message: string = e.message;
|
||||
switch (e.code) {
|
||||
case e.PERMISSION_DENIED:
|
||||
case e.POSITION_UNAVAILABLE:
|
||||
case e.TIMEOUT:
|
||||
default:
|
||||
break;
|
||||
case e.PERMISSION_DENIED:
|
||||
case e.POSITION_UNAVAILABLE:
|
||||
case e.TIMEOUT:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
@ -451,12 +451,12 @@ function if_post_init(b) {
|
|||
function switch_partial_post_init(i) {
|
||||
var x: number;
|
||||
switch (i) {
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
}
|
||||
var y: number = x; // error, possibly uninitialized
|
||||
}
|
||||
|
@ -465,14 +465,14 @@ function switch_partial_post_init(i) {
|
|||
function switch_post_init(i) {
|
||||
var x: number;
|
||||
switch (i) {
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
default:
|
||||
x = 2;
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
default:
|
||||
x = 2;
|
||||
}
|
||||
var y: number = x; // no error, all cases covered
|
||||
}
|
||||
|
@ -480,9 +480,9 @@ function switch_post_init(i) {
|
|||
// local use of annotated var in switch is ok
|
||||
function switch_scoped_init_1(i) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
var y: number = x;
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
var y: number = x;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -491,16 +491,16 @@ function switch_scoped_init_2(i) {
|
|||
var y: number = x;
|
||||
// error
|
||||
switch (i) {
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ...and after
|
||||
function switch_scoped_init_3(i) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
}
|
||||
var y: number = x; // error
|
||||
}
|
||||
|
@ -508,11 +508,11 @@ function switch_scoped_init_3(i) {
|
|||
// ...and in a fallthrough case without initialization
|
||||
function switch_scoped_init_4(i) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
// error
|
||||
case 1:
|
||||
var y: number = x;
|
||||
case 0:
|
||||
var x: number = 0;
|
||||
// error
|
||||
case 1:
|
||||
var y: number = x;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -853,12 +853,12 @@ function if_post_init(b) {
|
|||
function switch_partial_post_init(i) {
|
||||
let x: number;
|
||||
switch (i) {
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
}
|
||||
var y: number = x; // error, possibly uninitialized
|
||||
}
|
||||
|
@ -867,14 +867,14 @@ function switch_partial_post_init(i) {
|
|||
function switch_post_init(i) {
|
||||
let x: number;
|
||||
switch (i) {
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
default:
|
||||
x = 2;
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
default:
|
||||
x = 2;
|
||||
}
|
||||
var y: number = x; // no error, all cases covered
|
||||
}
|
||||
|
@ -882,11 +882,11 @@ function switch_post_init(i) {
|
|||
// use in a switch after a skipped decl is an error
|
||||
function switch_scoped_init_2(i) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
let x: number;
|
||||
// error, skipped declaration
|
||||
case 1:
|
||||
let y: number = x;
|
||||
case 0:
|
||||
let x: number;
|
||||
// error, skipped declaration
|
||||
case 1:
|
||||
let y: number = x;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -930,11 +930,11 @@ function for_of_post_init() {
|
|||
function switch_post_init2(i): number {
|
||||
let bar;
|
||||
switch (i) {
|
||||
case 1:
|
||||
bar = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
case 1:
|
||||
bar = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
}
|
||||
return bar; // ok, definitely initialized
|
||||
}
|
||||
|
@ -943,11 +943,11 @@ function switch_post_init2(i): number {
|
|||
function switch_post_init2(i): number {
|
||||
let bar;
|
||||
switch (i) {
|
||||
case 1:
|
||||
bar = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
case 1:
|
||||
bar = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
}
|
||||
return bar; // ok, definitely initialized
|
||||
}
|
||||
|
|
|
@ -64,11 +64,11 @@ function switch_scope(x: mixed) {
|
|||
let a = \"\";
|
||||
let b = \"\";
|
||||
switch (x) {
|
||||
case \"foo\":
|
||||
let a;
|
||||
a = 0;
|
||||
// doesn\'t add lower bound to outer a
|
||||
b = 0;
|
||||
case \"foo\":
|
||||
let a;
|
||||
a = 0;
|
||||
// doesn\'t add lower bound to outer a
|
||||
b = 0;
|
||||
}
|
||||
(a: string);
|
||||
// OK
|
||||
|
|
|
@ -250,10 +250,10 @@ var React = React.createClass({
|
|||
// So this would have been an error in 0.21.0 if we didn\'t make this.props
|
||||
// Object
|
||||
switch (this.props.name) {
|
||||
case \"a\":
|
||||
return \"Bob\";
|
||||
default:
|
||||
return \"Alice\";
|
||||
case \"a\":
|
||||
return \"Bob\";
|
||||
default:
|
||||
return \"Alice\";
|
||||
}
|
||||
},
|
||||
render() {
|
||||
|
|
|
@ -624,10 +624,10 @@ function block_scope(x: string | number) {
|
|||
|
||||
function switch_scope(x: string | number) {
|
||||
switch (x) {
|
||||
// doesn\'t refine outer x
|
||||
default:
|
||||
let x;
|
||||
x = \"\";
|
||||
// doesn\'t refine outer x
|
||||
default:
|
||||
let x;
|
||||
x = \"\";
|
||||
}
|
||||
(x: string); // error: number ~> string
|
||||
}
|
||||
|
@ -1187,13 +1187,13 @@ function exhaustion3(x): number {
|
|||
// @flow
|
||||
function foo(a, b, c) {
|
||||
switch (c) {
|
||||
case a.x.y:
|
||||
// OK
|
||||
case b.x.y:
|
||||
case a.x.y:
|
||||
// OK
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
case b.x.y:
|
||||
// OK
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1201,13 +1201,13 @@ function foo(a, b, c) {
|
|||
function exhaustion1(x): number {
|
||||
var foo;
|
||||
switch (x) {
|
||||
case 0:
|
||||
// falls through
|
||||
case 1:
|
||||
foo = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
case 0:
|
||||
// falls through
|
||||
case 1:
|
||||
foo = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
}
|
||||
return foo; // no error
|
||||
}
|
||||
|
@ -1215,11 +1215,11 @@ function exhaustion1(x): number {
|
|||
function exhaustion2(x, y): number {
|
||||
var foo;
|
||||
switch (x) {
|
||||
case 0:
|
||||
if (y) {
|
||||
break; // leaks uninitialized foo out of switch
|
||||
}
|
||||
/**
|
||||
case 0:
|
||||
if (y) {
|
||||
break; // leaks uninitialized foo out of switch
|
||||
}
|
||||
/**
|
||||
* TODO this shouldn\'t cause an error, because the path that
|
||||
* runs it will always go on to assign a number to foo. But
|
||||
* we\'ll need true isolation in env snapshots to model this.
|
||||
|
@ -1228,11 +1228,11 @@ function exhaustion2(x, y): number {
|
|||
*
|
||||
foo = \"\";
|
||||
*/
|
||||
case 1:
|
||||
foo = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
case 1:
|
||||
foo = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
}
|
||||
return foo; // error, possibly uninitialized
|
||||
}
|
||||
|
@ -1240,13 +1240,13 @@ function exhaustion2(x, y): number {
|
|||
function exhaustion3(x): number {
|
||||
let foo = null;
|
||||
switch (x) {
|
||||
case 0:
|
||||
// falls through
|
||||
case 1:
|
||||
foo = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
case 0:
|
||||
// falls through
|
||||
case 1:
|
||||
foo = 3;
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"Invalid state\");
|
||||
}
|
||||
return foo; // no error
|
||||
}"
|
||||
|
|
|
@ -1399,14 +1399,14 @@ let tests = [
|
|||
},
|
||||
function(mode: Mode) {
|
||||
switch (mode) {
|
||||
case 0:
|
||||
(mode: 0);
|
||||
break;
|
||||
case 0:
|
||||
(mode: 0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 2:
|
||||
(mode: 1 | 2);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
(mode: 1 | 2);
|
||||
break;
|
||||
}
|
||||
},
|
||||
function(x: number): 0 {
|
||||
|
@ -1972,14 +1972,14 @@ let tests = [
|
|||
},
|
||||
function(mode: Mode) {
|
||||
switch (mode) {
|
||||
case \"a\":
|
||||
(mode: \"a\");
|
||||
break;
|
||||
case \"a\":
|
||||
(mode: \"a\");
|
||||
break;
|
||||
|
||||
case \"b\":
|
||||
case \"c\":
|
||||
(mode: \"b\" | \"c\");
|
||||
break;
|
||||
case \"b\":
|
||||
case \"c\":
|
||||
(mode: \"b\" | \"c\");
|
||||
break;
|
||||
}
|
||||
},
|
||||
function(x: string): \"\" {
|
||||
|
@ -2120,55 +2120,55 @@ function corge(text: string | number | Array<string>): string {
|
|||
|
||||
function foo(text: string | number): string {
|
||||
switch (typeof text) {
|
||||
case \"string\":
|
||||
return text;
|
||||
// error, should return string
|
||||
case \"number\":
|
||||
return text;
|
||||
default:
|
||||
return \"wat\";
|
||||
case \"string\":
|
||||
return text;
|
||||
// error, should return string
|
||||
case \"number\":
|
||||
return text;
|
||||
default:
|
||||
return \"wat\";
|
||||
}
|
||||
}
|
||||
function bar(text: string | number): string {
|
||||
switch (typeof text) {
|
||||
case \"string\":
|
||||
return text[0];
|
||||
default:
|
||||
return text++ + \"\";
|
||||
case \"string\":
|
||||
return text[0];
|
||||
default:
|
||||
return text++ + \"\";
|
||||
}
|
||||
}
|
||||
function baz1(text: string | number): string {
|
||||
switch (typeof text) {
|
||||
case \"number\":
|
||||
// error, [0] on number
|
||||
case \"string\":
|
||||
return text[0];
|
||||
default:
|
||||
return \"wat\";
|
||||
case \"number\":
|
||||
// error, [0] on number
|
||||
case \"string\":
|
||||
return text[0];
|
||||
default:
|
||||
return \"wat\";
|
||||
}
|
||||
}
|
||||
function baz2(text: string | number): string {
|
||||
switch (typeof text) {
|
||||
case \"string\":
|
||||
// error, [0] on number
|
||||
case \"number\":
|
||||
return text[0];
|
||||
default:
|
||||
return \"wat\";
|
||||
case \"string\":
|
||||
// error, [0] on number
|
||||
case \"number\":
|
||||
return text[0];
|
||||
default:
|
||||
return \"wat\";
|
||||
}
|
||||
}
|
||||
function corge(text: string | number | Array<string>): string {
|
||||
switch (typeof text) {
|
||||
case \"object\":
|
||||
return text[0];
|
||||
case \"string\":
|
||||
case // using ++ since it isn\'t valid on arrays or strings.
|
||||
// should only error for string since Array was filtered out.
|
||||
\"number\":
|
||||
return text++ + \"\";
|
||||
case \"object\":
|
||||
return text[0];
|
||||
case \"string\":
|
||||
case // using ++ since it isn\'t valid on arrays or strings.
|
||||
// should only error for string since Array was filtered out.
|
||||
\"number\":
|
||||
return text++ + \"\";
|
||||
|
||||
default:
|
||||
return \"wat\";
|
||||
default:
|
||||
return \"wat\";
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
@ -2463,10 +2463,10 @@ function list(n) {
|
|||
}
|
||||
function length(l) {
|
||||
switch (l.kind) {
|
||||
case \"cons\":
|
||||
return 1 + length(l.next);
|
||||
default:
|
||||
return 0;
|
||||
case \"cons\":
|
||||
return 1 + length(l.next);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
function check(n) {
|
||||
|
@ -2482,13 +2482,13 @@ type B = { kind: 2, B: number };
|
|||
type C = { kind: 3, C: number };
|
||||
function kind(x: A | B | C): number {
|
||||
switch (x.kind) {
|
||||
case EnumKind.A:
|
||||
return x.A;
|
||||
case EnumKind.B:
|
||||
return x.B;
|
||||
// error, x: C and property A not found in type C
|
||||
default:
|
||||
return x.A;
|
||||
case EnumKind.A:
|
||||
return x.A;
|
||||
case EnumKind.B:
|
||||
return x.B;
|
||||
// error, x: C and property A not found in type C
|
||||
default:
|
||||
return x.A;
|
||||
}
|
||||
}
|
||||
kind({ kind: EnumKind.A, A: 1 });
|
||||
|
@ -2704,11 +2704,11 @@ type Error = { type: typeof ERROR, error: string };
|
|||
|
||||
function handleStatus(status: Success | Error) {
|
||||
switch (status.type) {
|
||||
case SUCCESS:
|
||||
console.log(\`Successful: \${status.message}\`);
|
||||
break;
|
||||
default:
|
||||
console.log(\`Errored: \${status.error}\`);
|
||||
case SUCCESS:
|
||||
console.log(\`Successful: \${status.message}\`);
|
||||
break;
|
||||
default:
|
||||
console.log(\`Errored: \${status.error}\`);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
|
|
@ -30,32 +30,32 @@ function baz(x): number {
|
|||
|
||||
function foo(x): number {
|
||||
switch (x) {
|
||||
case 0:
|
||||
case 1:
|
||||
return 1;
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
case 0:
|
||||
case 1:
|
||||
return 1;
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
}
|
||||
}
|
||||
|
||||
function bar(x) {
|
||||
switch (x) {
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
1;
|
||||
}
|
||||
|
||||
function baz(x): number {
|
||||
switch (x) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
return 1;
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
return 1;
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
}
|
||||
return 2;
|
||||
}"
|
||||
|
@ -98,28 +98,28 @@ function qux(b) {
|
|||
*/
|
||||
function foo(): number {
|
||||
switch (\"foo\") {
|
||||
case \"foo\":
|
||||
return 1;
|
||||
case \"foo\":
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
function bar() {
|
||||
switch (\"bar\") {
|
||||
case \"bar\":
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case \"bar\":
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function qux(b) {
|
||||
var x = b ? 0 : \"\";
|
||||
switch (\"qux\") {
|
||||
case \"\":
|
||||
x = 0;
|
||||
case \"qux\":
|
||||
x = x * x;
|
||||
case \"\":
|
||||
x = 0;
|
||||
case \"qux\":
|
||||
x = x * x;
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
@ -181,10 +181,10 @@ function foo(x: mixed): string {
|
|||
var b = \"\";
|
||||
|
||||
switch (x) {
|
||||
case \"foo\":
|
||||
a = 0;
|
||||
default:
|
||||
b = 0;
|
||||
case \"foo\":
|
||||
a = 0;
|
||||
default:
|
||||
b = 0;
|
||||
}
|
||||
|
||||
// a is now string | number
|
||||
|
@ -203,13 +203,13 @@ function baz(x: mixed): number {
|
|||
var b = \"\";
|
||||
|
||||
switch (x) {
|
||||
case \"baz\":
|
||||
a = 0;
|
||||
break;
|
||||
case \"bar\":
|
||||
a = \"\";
|
||||
default:
|
||||
b = 0;
|
||||
case \"baz\":
|
||||
a = 0;
|
||||
break;
|
||||
case \"bar\":
|
||||
a = \"\";
|
||||
default:
|
||||
b = 0;
|
||||
}
|
||||
|
||||
// a is now string | number
|
||||
|
@ -316,18 +316,18 @@ function f1(i) {
|
|||
var x;
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
default:
|
||||
x = -1;
|
||||
break;
|
||||
case 2:
|
||||
x = \"2\";
|
||||
break;
|
||||
case 0:
|
||||
x = 0;
|
||||
break;
|
||||
case 1:
|
||||
x = 1;
|
||||
break;
|
||||
default:
|
||||
x = -1;
|
||||
break;
|
||||
case 2:
|
||||
x = \"2\";
|
||||
break;
|
||||
}
|
||||
|
||||
var y: number = x; // error, number | string ~/> number
|
||||
|
@ -337,13 +337,13 @@ function f2(i) {
|
|||
var x;
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
case 1:
|
||||
default:
|
||||
x = 1;
|
||||
break;
|
||||
// does not fall through default
|
||||
case 2:
|
||||
case 0:
|
||||
case 1:
|
||||
default:
|
||||
x = 1;
|
||||
break;
|
||||
// does not fall through default
|
||||
case 2:
|
||||
}
|
||||
|
||||
var y: number = x; // error, number | uninitialized ~/> number
|
||||
|
@ -353,12 +353,12 @@ function f3(i) {
|
|||
var x;
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
case 1:
|
||||
default:
|
||||
// falls through to subsequent cases
|
||||
case 2:
|
||||
x = 1;
|
||||
case 0:
|
||||
case 1:
|
||||
default:
|
||||
// falls through to subsequent cases
|
||||
case 2:
|
||||
x = 1;
|
||||
}
|
||||
|
||||
var y: number = x; // no error
|
||||
|
@ -366,32 +366,32 @@ function f3(i) {
|
|||
|
||||
function foo(x): number {
|
||||
switch (x) {
|
||||
case 0:
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
case 1:
|
||||
return 1;
|
||||
case 0:
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
case 1:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
function bar(x) {
|
||||
switch (x) {
|
||||
default:
|
||||
return;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
1;
|
||||
}
|
||||
|
||||
function baz(x): number {
|
||||
switch (x) {
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
case 1:
|
||||
return 1;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
throw new Error(\"hi\");
|
||||
case 1:
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}"
|
||||
|
|
Loading…
Reference in New Issue