Update snapshots

master
James Long 2017-01-01 20:20:45 -05:00
parent de4d7ac799
commit 37601b0a86
155 changed files with 1383 additions and 751 deletions

View File

@ -73,6 +73,7 @@ function barfoo(n : number | null | void) : ?number { return n; }
function foo(str: string, i: number): string {
return str;
}
var bar: (str: number, i: number) => string = foo;
var qux = function(str: string, i: number): number {
return foo(str, i);
@ -111,6 +112,7 @@ function param_anno2(
}
);
}
var toz: null = 3;
var zer: null = null;
@ -150,6 +152,7 @@ let myClassInstance: MyClass = null;
function bar(): MyClass {
return null;
}
class MyClass {}
function foo() {
@ -158,6 +161,7 @@ function foo() {
function mk() {
return new MyClass();
}
class MyClass {}
}
"
@ -271,8 +275,10 @@ function insertMany<K, V>(
function f([ k, v ]: [K, V], m: Map<K, V>): Map<K, V> {
return m.insertWith(merge, k, v);
}
return foldr(f, m, vs);
}
class Foo<A> {
bar<B>() {
return function<C>(a: A, b: B, c: C): void {

View File

@ -21,6 +21,7 @@ function bar(x: any): mixed {
function qux(x: mixed): any {
return x;
}
var x: string = foo(0);
var y: string = bar(0);
var z: string = qux(0);
@ -82,6 +83,7 @@ function qux(x: $FlowFixMe<number>): $FlowFixMe<number> {
function baz(x: $FlowFixMe<nnumber>): $FlowFixMe<number> {
return x;
}
var x: string = foo(0);
var y: string = bar(0);
var z: string = qux(0);
@ -134,6 +136,7 @@ function qux(x: $FlowIssue<number>): $FlowIssue<number> {
function baz(x: $FlowIssue<nnumber>): $FlowIssue<number> {
return x;
}
var x: string = foo(0);
var y: string = bar(0);
var z: string = qux(0);
@ -189,6 +192,7 @@ function foo(c: C, x: any): string {
let y = x.y;
return c.bar(0, y);
}
var any_fun1 = require(\"./nonflowfile\");
function bar1(x: mixed) {
@ -196,6 +200,7 @@ function bar1(x: mixed) {
(x: boolean);
}
}
var any_fun2 = require(\"./anyexportflowfile\");
function bar2(x: mixed) {

View File

@ -207,6 +207,7 @@ str(null + \"foo\");
str(\"foo\" + undefined);
str(undefined + \"foo\");
let tests = [
function(x: mixed, y: mixed) {
x + y;
@ -263,6 +264,7 @@ y **= 2; // error
let x: number = 2 ** 3;
x **= 4;
let y: string = \"123\";
y **= 2;
@ -333,9 +335,11 @@ function num(x: number) {}
num(null * 1);
num(1 * null);
let x: number = 2 * 3;
x *= 4;
let y: string = \"123\";
y *= 2;
@ -405,6 +409,7 @@ let tests = [
\"foo\" < { foo: 1 };
({ foo: 1 }) < \"foo\";
var x = (null: ?number);
1 < x;
@ -424,6 +429,7 @@ NaN < 1;
1 < NaN;
NaN < NaN;
let tests = [
function(x: any, y: number, z: string) {
x > y;

View File

@ -49,6 +49,7 @@ function filterItems(items: Array<string | number>): Array<string | number> {
}
).filter(Boolean);
}
const filteredItems = filterItems([ \"foo\", \"b\", 1, 2 ]);
console.log(filteredItems);

View File

@ -15,6 +15,7 @@ var C = [ 1, 2, 3 ];
B.sort((a, b) => a - b);
C.sort((a, b) => a - b);
var x: Array<string> = [ \"1\", \"2\" ];
var y: Array<string> = [ \"3\", ...x ];
"

View File

@ -67,10 +67,12 @@ function from_test() {
// error, string ~> number
// error, string ~> number
function foo(x: string) {}
var a = [ 0 ];
var b = a.map(
function(x) {
foo(x);
return \"\" + x;
}
);
@ -104,6 +106,7 @@ function reduce_test() {
},
10
);
var total = [ 0, 1, 2, 3 ].reduce(
function(a, b) {
return a + b;

View File

@ -43,6 +43,7 @@ module.exports = \"arrays\";
// for literals, composite element type is union of individuals
// note: test both tuple and non-tuple inferred literals
function foo(x: string) {}
var a = [];
a[0] = 1;
@ -50,9 +51,11 @@ a[0] = 1;
a[1] = \"...\";
foo(a[1]);
var y;
a.forEach(x => y = x);
var alittle: Array<?number> = [ 0, 1, 2, 3, null ];
var abig: Array<?number> = [ 0, 1, 2, 3, 4, 5, 6, 8, null ];
var abig2: Array<{ x: number; y: number }> = [

View File

@ -45,6 +45,7 @@ function selectBestEffortImageForWidth(
var maxPixelWidth = maxWidth;
images = images.sort((a, b) => a.width - b.width + \"\");
return images.find(image => image.width >= maxPixelWidth) ||
images[images.length - 1];
}

View File

@ -89,6 +89,7 @@ async function f3(p: Promise<number>): Promise<number> {
async function f4(p: Promise<number>): Promise<boolean> {
return await p;
}
var f5: () => Promise<number> = async () => await 1;
class C {
async m() {
@ -172,6 +173,7 @@ var y = { async };
async function f() {}
async function ft<T>(a: T) {}
class C {
async m() {}
async mt<T>(a: T) {}
@ -187,6 +189,7 @@ var oz = { async async() {} };
var x = { async: 5 };
console.log(x.async);
var async = 3;
var y = { async };
"
@ -230,6 +233,7 @@ async function foo2(): Promise<string> {
async function foo3(): Promise<string> {
function bar() {}
return bar();
}
"
@ -334,6 +338,7 @@ function test2() {
async function voidoid1() {
console.log(\"HEY\");
}
var voidoid2: () => Promise<void> = voidoid1;
var voidoid3: () => void = voidoid1;
}
@ -455,6 +460,7 @@ async function f() {
async function ft<T>(a: T) {
await 1;
}
class C {
async m() {
await 1;
@ -496,6 +502,7 @@ var oz = {
var x = { await: 5 };
console.log(x.await);
var await = 3;
var y = { await };
"

View File

@ -57,6 +57,7 @@ async function* delegate_return() {
async function* inner() {
return 0;
}
var x: void = yield* inner();
}
"
@ -225,6 +226,7 @@ async () => {
async function* yield_return() {
try {
yield 0;
return;
} catch (e) {
yield e;

View File

@ -57,12 +57,14 @@ x |= 0;
x ^= 0;
x &= 0;
const { foo } = { foo: \"foo\" };
const [ bar ] = [ \"bar\" ];
(foo: number);
(bar: number);
declare var bazzes: { baz: string }[];
for (const { baz } of bazzes) {
@ -463,6 +465,7 @@ function function_toplevel() {
function a() {}
function a() {}
}
function function_block() {
@ -470,6 +473,7 @@ function function_block() {
function a() {}
function a() {}
}
}
@ -666,6 +670,7 @@ function switch_scope2(x: number) {
case 0:
a = \"\";
break;
case 1:
var b = a;
@ -676,6 +681,7 @@ function switch_scope2(x: number) {
case 3:
a = \"\";
break;
case 4:
var c: string = a;
@ -915,10 +921,12 @@ function f0() {
function f1(b) {
x = 10;
let x = 0;
if (b) {
y = 10;
let y = 0;
}
}
@ -951,6 +959,7 @@ function f4() {
function g() {
return x + c;
}
let x = 0;
const c = 0;
}
@ -961,9 +970,11 @@ function f5() {
}
g();
let x = 0;
const c = 0;
}
var x: C;
var y = new C();
class C {}

View File

@ -131,6 +131,7 @@ new FormData(\"\");
new FormData(document.createElement(\"input\"));
new FormData(document.createElement(\"form\"));
const b: boolean = a.has(\"foo\");
const c: ?(string | File) = a.get(\"foo\");
const d: string = a.get(\"foo\");
@ -138,6 +139,7 @@ const e: Blob = a.get(\"foo\");
const f: ?(string | File | Blob) = a.get(\"foo\");
a.get(2);
const a1: Array<string | File> = a.getAll(\"foo\");
const a2: Array<string | File | number> = a.getAll(\"foo\");
const a3: Array<string | Blob | File> = a.getAll(\"foo\");
@ -276,6 +278,7 @@ function callback(
): void {
return;
}
const o: MutationObserver = new MutationObserver(callback);
new MutationObserver((arr: Array<MutationRecord>) => true);
@ -287,6 +290,7 @@ new MutationObserver();
new MutationObserver(42);
new MutationObserver((n: number) => {});
const div = document.createElement(\"div\");
o.observe(div, { attributes: true, attributeFilter: [ \"style\" ] });

View File

@ -56,6 +56,7 @@ function foo<T: number>(x: T): T {
var y: string = x;
return x;
}
class C<T: number> {
bar<U: number>(x: U): T {
return x;
@ -69,8 +70,10 @@ class C<T: number> {
function example<T: { x: number }>(o: T): T {
o.x = 0;
return o;
}
var obj1: { x: number; y: string } = example({ x: 0, y: \"\" });
var obj2: { x: number } = example({ x: 0 });
var c: C<string> = new C();

View File

@ -87,8 +87,10 @@ function foo(b) {
while (b) {
if (x == null) {
z = \"\";
break;
}
var y: number = x;
}
var w: number = z;
@ -99,11 +101,13 @@ function bar(b) {
if (x == null)
return;
switch (\"\") {
case 0:
var y: number = x;
x = \"\";
case 1:
var z: number = x;
break;
@ -117,6 +121,7 @@ function bar2(b) {
if (x == null)
return;
switch (\"\") {
case 0:
{
@ -141,6 +146,7 @@ function qux(b) {
if (b) {
z = \"\";
continue;
}
@ -161,6 +167,7 @@ function test_const() {
st = fooRes;
}
return st;
}
"

View File

@ -35,8 +35,10 @@ function f() {
return \"...\";
}
);
var x: number = array[0];
}
var Foo = require(\"./genericfoo\");
var foo = new Foo();

View File

@ -226,6 +226,7 @@ function e(x: { (): string; (x: number): string }): () => number {
function a(f: { (): string; (x: number): string }): string {
return f() + f(123);
}
var b: { (): string; (x: number): string } = function(x?: number): string {
return \"hi\";
};
@ -263,6 +264,7 @@ var b: { apply: Function } = function() {};
var f = function() {};
f.myProp = 123;
var c: { myProp: number } = f;
"
`;

View File

@ -53,15 +53,18 @@ var x = Boolean(4);
function foo(fn: (value: any) => boolean) {}
foo(Boolean);
var dict: { [k: string]: any } = {};
dict();
interface ICall { (x: string): void }
declare var icall: ICall;
icall(0);
icall.call(null, 0);
type Callable = { (x: string): void };
declare var callable: Callable;

View File

@ -82,6 +82,7 @@ class A {
}
A.qux = function(x: string) {};
class B extends A {
static x: string;
static foo(x: string) {}
@ -126,10 +127,12 @@ var d: C<*> = D.create();
(new A(): typeof A);
(B: typeof A);
class E {
static x: number;
static foo(): string {
this.bar();
return this.x;
}
}

View File

@ -68,9 +68,11 @@ class C<X> {
}
function foo<X>(c: C<X>, x: X) {}
type O = { f: number };
foo((new C(): C<O>), { f_: 0 });
class D extends C<O> {
bar() {
this.x;

View File

@ -18,6 +18,7 @@ class A {}
function foo(x: Class<A>): A {
return new x();
}
class B {
constructor(_: any) {}
}

View File

@ -136,11 +136,13 @@ x.b;
x.c;
x.d;
var y: Foo = x;
y.b;
y.d;
class Test2Superclass {
a: number;
c: ?number;
@ -263,6 +265,7 @@ C.p = \"hi\";
(C: { p: string });
(C: { p: number });
declare var o: { p: number };
(o: Class<C>);

View File

@ -105,6 +105,7 @@ function local_meth() {
// error
// shouldn\'t pollute linear refinement
function takes_string(_: string) {}
var global_x = \"hello\";
function global_f() {}
@ -142,6 +143,7 @@ function local_func() {
local_x = 42;
}
var global_y = \"hello\";
var global_o = {
f: function() {},
@ -212,6 +214,7 @@ function example(b: boolean): number {
if (b) {
f();
}
return x;
}
"
@ -291,6 +294,7 @@ function g(x: ?number) {
var y: number = const_x;
};
}
var var_x = x;
if (var_x) {
@ -320,6 +324,7 @@ function h(x: number | string | boolean) {
var y: boolean = const_x;
};
}
var var_x = x;
if (typeof var_x == \"number\") {

View File

@ -50,6 +50,7 @@ class A {
}
A._sProperty = 48;
class B extends A {
_property1: string;
static _sProperty: string;

View File

@ -50,6 +50,7 @@ class A {
}
A._sProperty = 48;
class B extends A {
_property1: string;
static _sProperty: string;

View File

@ -42,6 +42,7 @@ Foo.prototype = {
};
exports.Foo = Foo;
interface IFooPrototype { m(): number }
interface IFoo extends IFooPrototype {
static (): void;

View File

@ -68,6 +68,7 @@ let tests = [
},
function() {
true.toString();
let x: boolean = false;
x.toString();
@ -145,6 +146,7 @@ function* generator(): Iterable<[string, number]> {
yield [ \"foo\", 123 ];
}
}
let tests = [
function() {
let w = new Map();
@ -307,6 +309,7 @@ ws.delete(window);
ws.delete(obj);
ws.delete(dict);
let ws2 = new WeakSet([ obj, dict ]);
let ws3 = new WeakSet([ 1, 2, 3 ]);
@ -315,6 +318,7 @@ function* generator(): Iterable<{ foo: string }> {
yield { foo: \"bar\" };
}
}
let ws4 = new WeakSet(generator());
function* numbers(): Iterable<number> {
@ -323,6 +327,7 @@ function* numbers(): Iterable<number> {
yield i++;
}
}
let ws5 = new WeakSet(numbers());
"
`;

View File

@ -91,6 +91,7 @@ var b: CovArrayVerbose<number, *> = [];
var y: CovArrayVerbose<mixed, *> = b;
y[0] = \"\";
class NVerbose<E, I: E> {
x: CovArrayVerbose<E, I>;
foo(): CovArrayVerbose<mixed, I> {

View File

@ -70,9 +70,11 @@ var ExplicitDifferentName = require(\'ExplicitProvidesModuleDifferentName\');
var Implicit = require(\"ImplicitProvidesModule\");
(Implicit.fun(): string);
var ExplicitSameName = require(\"ExplicitProvidesModuleSameName\");
(ExplicitSameName.fun(): string);
var ExplicitDifferentName = require(\"ExplicitProvidesModuleDifferentName\");
(ExplicitDifferentName.fun(): string);

View File

@ -95,9 +95,11 @@ var ExplicitDifferentName = require(\'ExplicitProvidesModuleDifferentName\');
var Implicit = require(\"ImplicitProvidesModule\");
(Implicit.fun(): boolean);
var ExplicitSameName = require(\"ExplicitProvidesModuleSameName\");
(ExplicitSameName.fun(): boolean);
var ExplicitDifferentName = require(\"ExplicitProvidesModuleDifferentName\");
(ExplicitDifferentName.fun(): boolean);

View File

@ -72,36 +72,47 @@ var F = require(\'package_with_dir_main\');
var B1 = require(\"B\");
(B1.fun(): boolean);
var B2 = require(\"B.js\");
(B2.fun(): boolean);
var C = require(\"package_with_full_main\");
(C.fun(): boolean);
var D = require(\"package_with_partial_main\");
(D.fun(): boolean);
var E = require(\"package_with_no_package_json\");
(E.fun(): boolean);
var F = require(\"package_with_dir_main\");
(F.fun(): boolean);
var B1 = require(\"B\");
(B1.fun(): boolean);
var B2 = require(\"B.js\");
(B2.fun(): boolean);
var C = require(\"package_with_full_main\");
(C.fun(): boolean);
var D = require(\"package_with_partial_main\");
(D.fun(): boolean);
var E = require(\"package_with_no_package_json\");
(E.fun(): boolean);
var F = require(\"package_with_dir_main\");
(F.fun(): boolean);

View File

@ -52,18 +52,23 @@ var F = require(\'package_with_dir_main\');
var B1 = require(\"B\");
(B1.fun(): string);
var B2 = require(\"B.js\");
(B2.fun(): string);
var C = require(\"package_with_full_main\");
(C.fun(): string);
var D = require(\"package_with_partial_main\");
(D.fun(): string);
var E = require(\"package_with_no_package_json\");
(E.fun(): string);
var F = require(\"package_with_dir_main\");
(F.fun(): string);
@ -94,9 +99,11 @@ var CJS = require(\'./CJS.js\');
var A1 = require(\"./A\");
(A1.fun(): string);
var A2 = require(\"./A.js\");
(A2.fun(): string);
var CJS = require(\"./CJS.js\");
(CJS: string);

View File

@ -992,11 +992,13 @@ var e1: number = CJS_Clobb_Lit.numberValue3;
var e2: string = CJS_Clobb_Lit.numberValue3;
CJS_Clobb_Lit.doesntExist;
import * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";
var f1: number = CJS_Clobb_Lit_NS.numberValue4;
var f2: number = CJS_Clobb_Lit_NS.default.numberValue4;
CJS_Clobb_Lit_NS.default.default;
var f3: string = CJS_Clobb_Lit_NS.numberValue4;
var f4: string = CJS_Clobb_Lit_NS.default.numberValue5;
import { doesntExist2 } from \"CommonJS_Clobbering_Class\";
@ -1006,6 +1008,7 @@ import CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";
new CJS_Clobb_Class();
new CJS_Clobb_Class().doesntExist;
var h1: number = CJS_Clobb_Class.staticNumber2();
var h2: string = CJS_Clobb_Class.staticNumber2();
var h3: number = new CJS_Clobb_Class().instNumber1();
@ -1013,6 +1016,7 @@ var h4: string = new CJS_Clobb_Class().instNumber1();
import * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";
new CJS_Clobb_Class_NS();
var i1: number = CJS_Clobb_Class_NS.staticNumber3();
var i2: number = new CJS_Clobb_Class_NS.default().instNumber2();
var i3: string = new CJS_Clobb_Class_NS.default().instNumber2();
@ -1028,6 +1032,7 @@ var l1: number = CJS_Named.numberValue1;
var l2: string = CJS_Named.numberValue1;
CJS_Named.doesntExist;
import * as CJS_Named_NS from \"CommonJS_Named\";
var m1: number = CJS_Named_NS.numberValue4;
var m2: string = CJS_Named_NS.default.numberValue4;
@ -1079,6 +1084,7 @@ var ac1: number = numberValue5;
var ac2: string = numberValue5;
require(\"ES6_Default_AnonFunction2\").doesntExist;
var ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;
var ad1: number = ES6_Def_AnonFunc2();
var ad2: string = ES6_Def_AnonFunc2();

View File

@ -40,17 +40,20 @@ import declare_module_exports from \"declare_module_exports\";
(declare_module_exports: number);
(declare_module_exports: string);
import { str } from \"declare_m_e_with_other_value_declares\";
import type { str2 } from \"declare_m_e_with_other_type_declares\";
(\"asdf\": str2);
(42: str2);
import DEPRECATED__declare_var_exports from \"DEPRECATED__declare_var_exports\";
(DEPRECATED__declare_var_exports: number);
(DEPRECATED__declare_var_exports: string);
import declare_m_e_with_declare_var_e from \"declare_m_e_with_declare_var_e\";
(declare_m_e_with_declare_var_e: number);

View File

@ -61,6 +61,7 @@ function subtyping(v1: Variance<A, B>, v2: Variance<B, A>) {
(v2: Variance<A, B>);
}
class PropVariance<+Out, -In> {
inv1: Out;
inv2: In;

View File

@ -13,6 +13,7 @@ f(x);
function f(x) {
return 42 / x;
}
var x = null;
f(x);

View File

@ -37,6 +37,7 @@ class A {
function callback(x: string) {
return x.length;
}
var a = new A(42);
a.onLoad(callback);

View File

@ -31,6 +31,7 @@ let d = zs[1];
(c: void);
(d: void);
let [ ...e ] = 0;
"
`;
@ -52,10 +53,12 @@ var { [\"key\"]: val3, ...spread } = { key: \"val\" };
var { [\"key\"]: val1 } = { key: \"val\" };
(val1: void);
var key: string = \"key\";
var { [key]: val2 } = { key: \"val\" };
(val2: void);
var { [\"key\"]: val3, ...spread } = { key: \"val\" };
(spread.key: void);
@ -230,6 +233,7 @@ obj_rest({ p: { q: 0, r: null } });
function obj_prop_annot({ p = true }: { p: string } = { p: 0 }) {
(p: void);
}
var { p = true }: { p: string } = { p: 0 };
(p: void);
@ -348,9 +352,11 @@ declare var b: string;
declare var c: string;
[ { a1: a, b }, c ] = [ { a1: 0, b: 1 }, 2 ];
var { m } = { m: 0 };
({ m } = { m: m });
var obj;
({ n: obj.x } = { n: 3 });
@ -374,6 +380,7 @@ function bar({ x, ...z }) {
}
bar({ x: \"\", y: 0 });
var spread = { y: \"\" };
var extend: { x: number; y: string; z: boolean } = { x: 0, ...spread };
@ -384,6 +391,7 @@ qux({ a: \"\" });
function corge({ b }: { b: string }) {}
corge({ b: 0 });
var { n }: { n: number } = { n: \"\" };
function test() {
@ -401,6 +409,7 @@ function test() {
}
module.exports = corge;
class Base {
baseprop1: number;
baseprop2: number;
@ -507,16 +516,19 @@ function arr_rest_pattern<X>([ _, ...a ] : ArrRest<X>) { // a: [X]
// a: [X]
// a: [X]
function obj_pattern<X>({ prop }: { prop: X }) {}
type Prop<X> = { prop: X };
function obj_pattern2<X>({ prop }: Prop<X>) {}
function arr_pattern<X>([ elem ]: X[]) {}
type Elem<X> = X[];
function arr_pattern2<X>([ elem ]: Elem<X>) {}
function tup_pattern<X>([ proj ]: [X]) {}
type Proj<X> = [X];
function tup_pattern2<X>([ proj ]: Proj<X>) {}
@ -528,6 +540,7 @@ function rest_pattern<X>(...r: X[]) {}
function obj_rest_pattern<X>({ _, ...o }: { _: any; x: X }) {
o.x;
}
type ObjRest<X> = { _: any; x: X };
function obj_rest_pattern<X>({ _, ...o }: ObjRest<X>) {
@ -537,6 +550,7 @@ function obj_rest_pattern<X>({ _, ...o }: ObjRest<X>) {
function arr_rest_pattern<X>([ _, ...a ]: [any, X]) {
a[0];
}
type ArrRest<X> = [any, X];
function arr_rest_pattern<X>([ _, ...a ]: ArrRest<X>) {
@ -574,12 +588,14 @@ var { x: o } = o;
let foo = (i: number) => [ i ];
const bar = (i: number) => {
[ i ] = foo(i);
return [ i ];
};
foo = (i: number) => {
return bar(i);
};
declare var o;
var { x: o } = o;
"
@ -597,6 +613,7 @@ var { \"with-dash\": with_dash } = { \"with-dash\": \"motivating example\" };
var { \"key\": val } = { key: \"val\" };
(val: void);
var { \"with-dash\": with_dash } = { \"with-dash\": \"motivating example\" };
(with_dash: \"motivating example\");

View File

@ -38,6 +38,7 @@ function foo0(x: Array<{ [key: string]: mixed }>): Array<{
[key: string]: mixed
}> {
x[0].fooBar = \"foobar\";
return x;
}
@ -554,6 +555,7 @@ function object_prototype(o: { [k: string]: number }): {
+toString: () => string
} {
(o.toString(): boolean);
return o;
}
@ -567,6 +569,7 @@ function unification_dict_values_invariant(x: Array<{ [k: string]: B }>) {
let a: Array<{ [k: string]: A }> = x;
a[0].p = new A();
let b: Array<{ [k: string]: B }> = x;
let c: Array<{ [k: string]: C }> = x;
@ -577,6 +580,7 @@ function subtype_dict_values_invariant(x: { [k: string]: B }) {
let a: { [k: string]: A } = x;
a.p = new A();
let b: { [k: string]: B } = x;
let c: { [k: string]: C } = x;
@ -607,6 +611,7 @@ function unification_mix_with_declared_props_invariant_l(
let a: Array<{ [k: string]: B; p: A }> = x;
a[0].p = new A();
let b: Array<{ [k: string]: B; p: B }> = x;
let c: Array<{ [k: string]: B; p: C }> = x;
@ -621,6 +626,7 @@ function unification_mix_with_declared_props_invariant_r(
let a: Array<{ [k: string]: A }> = xa;
a[0].p = new A();
let b: Array<{ [k: string]: B }> = xb;
let c: Array<{ [k: string]: C }> = xc;
@ -631,6 +637,7 @@ function subtype_mix_with_declared_props_invariant_l(x: { [k: string]: B }) {
let a: { [k: string]: B; p: A } = x;
a.p = new A();
let b: { [k: string]: B; p: B } = x;
let c: { [k: string]: B; p: C } = x;
@ -645,6 +652,7 @@ function subtype_mix_with_declared_props_invariant_r(
let a: { [k: string]: A } = xa;
a.p = new A();
let b: { [k: string]: B } = xb;
let c: { [k: string]: C } = xc;
@ -667,6 +675,7 @@ function subtype_dict_to_obj(x: { [k: string]: B }) {
let a: { p: A } = x;
a.p = new A();
let b: { p: B } = x;
let c: { p: C } = x;
@ -677,6 +686,7 @@ function subtype_obj_to_dict(x: { p: B }) {
let a: { [k: string]: A } = x;
a.p = new A();
let b: { [k: string]: B } = x;
let c: { [k: string]: C } = x;
@ -825,6 +835,7 @@ function foo2(x: Array<{ [key: string]: mixed }>): Array<{
fooBar: string
}> {
x[0].fooBar = 123;
return x;
}

View File

@ -230,6 +230,7 @@ function getBinaryOp(
throw new Error(\"Invalid binary operator: \" + op);
}
}
export function emitExpression(node: TypedNode): t.Expression {
switch (node.exprNodeType) {
case \"string_literal\":

View File

@ -46,11 +46,13 @@ var num = require(\"./import\");
function foo(x) {}
foo(0);
var a: string = num;
function unannotated(x) {
return x;
}
const nullToUndefined = val => (val === null ? undefined : val);
function f0(x: ?Object) {
@ -68,6 +70,7 @@ function f2(x: ?string) {
function f3(x: ?string) {
return nullToUndefined(x);
}
declare var idx: $Facebookism$Idx;
declare var obj: { a?: { b: ?{ c: null | { d: number } } } };
const idxResult = idx(obj, obj => obj.a.b.c.d);

View File

@ -41,6 +41,7 @@ class C1 {
}
new C1().m();
class C2 {
get m() {
return 42;
@ -49,12 +50,14 @@ class C2 {
}
new C2().m();
class C3 {
set m(x) {}
m() {}
}
new C3().m();
class C4 {
get m() {
return 42;
@ -63,6 +66,7 @@ class C4 {
}
new C4().m = new C4().m - 42;
class C5 {
m() {}
get m() {

View File

@ -28,11 +28,13 @@ function tag(strings, ...values) {
var x: number = strings[0];
return x;
}
var s2 = tag\`l\${42}r\`;
function tag2(strings, ...values) {
return { foo: \"\" };
}
var s3 = tag2\`la la la\`;
(s3.foo: number);

View File

@ -36,6 +36,7 @@ function isActive(
}
isActive({ state: \"PAUSE\" });
var MyStates = { PAUSED: \"PAUSED\", ACTIVE: \"ACTIVE\", DELETED: \"DELETED\" };
function isActive2(ad: { state: $Keys<typeof MyStates> }): boolean {
@ -43,6 +44,7 @@ function isActive2(ad: { state: $Keys<typeof MyStates> }): boolean {
}
isActive2({ state: \"PAUSE\" });
type Keys = $Keys<{ x: any; y: any }>;
type Union = \"x\" | \"y\";

View File

@ -26,6 +26,7 @@ null == 1;
1 == \"\";
\"\" == 1;
var x = (null: ?number);
x == 1;

View File

@ -1102,11 +1102,13 @@ var e1: number = CJS_Clobb_Lit.numberValue3;
var e2: string = CJS_Clobb_Lit.numberValue3;
CJS_Clobb_Lit.doesntExist;
import * as CJS_Clobb_Lit_NS from \"CommonJS_Clobbering_Lit\";
var f1: number = CJS_Clobb_Lit_NS.numberValue4;
var f2: number = CJS_Clobb_Lit_NS.default.numberValue4;
CJS_Clobb_Lit_NS.default.default;
var f3: string = CJS_Clobb_Lit_NS.numberValue4;
var f4: string = CJS_Clobb_Lit_NS.default.numberValue5;
import { doesntExist2 } from \"CommonJS_Clobbering_Class\";
@ -1116,6 +1118,7 @@ import CJS_Clobb_Class from \"CommonJS_Clobbering_Class\";
new CJS_Clobb_Class();
new CJS_Clobb_Class().doesntExist;
var h1: number = CJS_Clobb_Class.staticNumber2();
var h2: string = CJS_Clobb_Class.staticNumber2();
var h3: number = new CJS_Clobb_Class().instNumber1();
@ -1123,6 +1126,7 @@ var h4: string = new CJS_Clobb_Class().instNumber1();
import * as CJS_Clobb_Class_NS from \"CommonJS_Clobbering_Class\";
new CJS_Clobb_Class_NS();
var i1: number = CJS_Clobb_Class_NS.staticNumber3();
var i2: number = new CJS_Clobb_Class_NS.default().instNumber2();
var i3: string = new CJS_Clobb_Class_NS.default().instNumber2();
@ -1138,6 +1142,7 @@ var l1: number = CJS_Named.numberValue1;
var l2: string = CJS_Named.numberValue1;
CJS_Named.doesntExist;
import * as CJS_Named_NS from \"CommonJS_Named\";
var m1: number = CJS_Named_NS.numberValue4;
var m2: string = CJS_Named_NS.default.numberValue4;
@ -1198,6 +1203,7 @@ var ac1: number = numberValue5;
var ac2: string = numberValue5;
require(\"ES6_Default_AnonFunction2\").doesntExist;
var ES6_Def_AnonFunc2 = require(\"ES6_Default_AnonFunction2\").default;
var ad1: number = ES6_Def_AnonFunc2();
var ad2: string = ES6_Def_AnonFunc2();
@ -1352,22 +1358,27 @@ function testRequires() {
import * as DefaultA from \"A\";
DefaultA.numberValue1 = 123;
import * as ES6_Named1 from \"ES6_Named1\";
ES6_Named1.varDeclNumber1 = 123;
import * as CommonJS_Star from \"CommonJS_Clobbering_Lit\";
CommonJS_Star.numberValue1 = 123;
CommonJS_Star.default.numberValue1 = 123;
import CommonJS_Clobbering_Lit from \"CommonJS_Clobbering_Lit\";
CommonJS_Clobbering_Lit.numberValue1 = 123;
import * as CommonJS_Frozen_Star from \"CommonJS_Clobbering_Frozen\";
CommonJS_Frozen_Star.numberValue1 = 123;
CommonJS_Frozen_Star.default.numberValue1 = 123;
import CommonJS_Clobbering_Frozen from \"CommonJS_Clobbering_Frozen\";
CommonJS_Clobbering_Frozen.numberValue1 = 123;
@ -1376,12 +1387,15 @@ function testRequires() {
var DefaultA = require(\"A\");
DefaultA.numberValue1 = 123;
var ES6_Named1 = require(\"ES6_Named1\");
ES6_Named1.numberValue = 123;
var CommonJS_Star = require(\"CommonJS_Clobbering_Lit\");
CommonJS_Star.numberValue1 = 123;
var CommonJS_Frozen_Star = require(\"CommonJS_Clobbering_Frozen\");
CommonJS_Frozen_Star.numberValue1 = 123;

View File

@ -70,28 +70,33 @@ import CJS_Named from \"CJS_Named\";
(CJS_Named: { num1: number; str1: string });
(CJS_Named: number);
import { num2 } from \"CJS_Clobbered\";
import { numExport } from \"CJS_Clobbered\";
(numExport: number);
(numExport: string);
import type { numType } from \"CJS_Clobbered\";
(42: numType);
(\"asdf\": numType);
import { strHidden } from \"ES\";
import { str3 } from \"ES\";
(str3: string);
(str3: number);
import { num3 } from \"ES\";
(num3: number);
(num3: string);
import { C } from \"ES\";
import type { C as CType } from \"ES\";
@ -102,12 +107,14 @@ import type { C as CType } from \"ES\";
(new C(): CType);
(42: CType);
import { T } from \"ES\";
import type { T as T2 } from \"ES\";
(42: T2);
(\"asdf\": T2);
import { exports as nope } from \"ES\";
"
`;

View File

@ -20,9 +20,11 @@ var M = require(\"M\");
var N = require(\"N\");
N.x = M(N.x);
var P = require(\"./P\");
N.y = P(N.y);
var Q = require(\"Q\");
N.z = Q(N.z);

View File

@ -110,6 +110,7 @@ e.set(\"Content-Type\", \"image/jpeg\");
e.set(\"Content-Type\");
e.set({ \"Content-Type\", \"image/jpeg\" });
const f: Headers = e.append(\"Content-Type\", \"image/jpeg\");
const g: string = e.get(\"Content-Type\");
const h: number = e.get(\"Content-Type\");
@ -412,6 +413,7 @@ e.set(\"key1\", \"value1\");
e.set(\"key1\");
e.set({ \"key1\", \"value1\" });
const f: URLSearchParams = e.append(\"key1\", \"value1\");
const g: string = e.get(\"key1\");
const h: number = e.get(\"key1\");

View File

@ -14,6 +14,7 @@ import x from \'./req\';
var x = require(\"./req\");
(x: string);
import x from \"./req\";
"
`;

View File

@ -62,11 +62,13 @@ function mk_factorial() {
if (eq(n, 1)) {
return 1;
}
return mul(factorial(sub(n, 1)), n);
};
}
);
}
var factorial = mk_factorial();
factorial(\"...\");
@ -111,6 +113,7 @@ function func1(f) {
function fix_f(x: number): number {
return f(x);
}
return fix_f;
}
@ -118,6 +121,7 @@ function func2(f) {
function fix_f(x: string): string {
return f(x);
}
return fix_f;
}

View File

@ -55,6 +55,7 @@ function foo(x: boolean) {
if (x) {
continue;
}
return;
}
@ -159,6 +160,7 @@ function foo(x: boolean) {
if (x) {
continue;
}
return;
}
@ -257,6 +259,7 @@ function foo(x: boolean) {
if (x) {
continue;
}
return;
}

View File

@ -333,11 +333,13 @@ function good(x: Function, MyThing: Function): number {
x();
<MyThing/>;
var { ...something } = x;
Object.assign(x, { hi: \"there\" });
Object.keys(x);
return x.bar + x[\"bar\"] + x.lala();
}
@ -346,6 +348,7 @@ function bad(x: Function, y: Object): void {
var b: string = x;
var c: Function = y;
}
let tests = [
function(y: () => void, z: Function) {
function x() {}

View File

@ -160,6 +160,7 @@ class GeneratorExamples {
if (a) {
(a: number);
}
var b = yield;
if (b) {
@ -213,6 +214,7 @@ else {
function* inner() {
return \"\";
}
var x: number = yield* inner();
}
*delegate_next_iterable(xs: Array<number>) {
@ -239,6 +241,7 @@ var examples = new GeneratorExamples();
for (var x of examples.infer_stmt()) {
(x: string);
}
var infer_stmt_next = examples.infer_stmt().next(0).value;
if (typeof infer_stmt_next === \"undefined\")
@ -319,6 +322,7 @@ var examples = new GeneratorExamples();
for (var x of examples.infer_stmt()) {
(x: string);
}
var infer_stmt_next = examples.infer_stmt().next(0).value;
if (typeof infer_stmt_next === \"undefined\")
@ -494,6 +498,7 @@ function* stmt_next(): Generator<void, void, number> {
if (a) {
(a: number);
}
var b = yield;
if (b) {
@ -517,6 +522,7 @@ function* infer_stmt() {
for (var x of infer_stmt()) {
(x: string);
}
var infer_stmt_next = infer_stmt().next(0).value;
if (typeof infer_stmt_next === \"undefined\")
@ -592,6 +598,7 @@ function* delegate_return_generator() {
function* inner() {
return \"\";
}
var x: number = yield* inner();
}
@ -632,6 +639,7 @@ function* multiple_return(b) {
return \"foo\";
}
}
let multiple_return_result = multiple_return().next();
if (multiple_return_result.done) {
@ -682,6 +690,7 @@ function* refuse_return() {
return 0;
}
}
var refuse_return_gen = refuse_return();
var refuse_return_result = refuse_return_gen.return(\"string\");
@ -727,6 +736,7 @@ function* catch_return() {
return e;
}
}
var catch_return_value = catch_return().throw(\"\").value;
if (catch_return_value !== undefined) {
@ -736,11 +746,13 @@ if (catch_return_value !== undefined) {
function* yield_return() {
try {
yield 0;
return;
} catch (e) {
yield e;
}
}
var yield_return_value = yield_return().throw(\"\").value;
if (yield_return_value !== undefined) {

View File

@ -65,6 +65,7 @@ class D<T> {
this.x = u;
v.u = u;
return z;
}
}
@ -76,6 +77,7 @@ var n: number = o.u;
class E<X> extends C<X> {
set(x: X): X {
this.x = x;
return this.get();
}
}
@ -92,6 +94,7 @@ class H<Z> extends G<Array<Z>> {
var h1 = new H();
h1.foo([ \"...\" ]);
var h2: F<Array<Array<Array<number>>>> = h1;
var obj: Object<string, string> = {};
var fn: Function<string> = function() {

View File

@ -23,6 +23,7 @@ var lib = require(\"./library\");
function add(a: number, b: number): number {
return a + b;
}
var re = /^keynote (talk){2} (lightning){3,5} (talk){2} closing partytime!!!/;
add(lib.iTakeAString(42), 7);
@ -48,11 +49,13 @@ things;
import thing from \"./helpers/exports_default.js\";
thing;
import { foo, bar as baz } from \"./helpers/exports_named.js\";
foo;
baz;
import * as things from \"./helpers/exports_named.js\";
things;

View File

@ -50,17 +50,21 @@ let ParentFoo;
({ ParentFoo } = Parent);
ParentFoo;
let ParentFoo2;
ParentFoo2 = Parent;
ParentFoo2;
let ParentFoo3 = Parent;
ParentFoo3;
let foo = require(\"./Parent\").ParentFoo.foo;
foo;
import type { Foo } from \"./types\";
"
`;

View File

@ -121,6 +121,7 @@ foo.goodSetterWithAnnotation = 123;
foo.goodSetterNoAnnotation = \"hello\";
foo.goodSetterWithAnnotation = \"hello\";
var testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter;
var testPropOverridenWithGetter: number = foo.propOverriddenWithGetter;
@ -259,9 +260,11 @@ obj.goodSetterWithAnnotation = 123;
obj.goodSetterNoAnnotation = \"hello\";
obj.goodSetterWithAnnotation = \"hello\";
var testSubtypingGetterAndSetter: number = obj.propWithSubtypingGetterAndSetter;
obj.exampleOfOrderOfGetterAndSetter = new C();
var testExampleOrOrderOfGetterAndSetterReordered: number = obj.exampleOfOrderOfGetterAndSetterReordered;
"
`;

View File

@ -303,23 +303,27 @@ var a1: ClassFoo1 = foo1Inst;
var a2: number = foo1Inst;
new ClassFoo1();
import type { ClassFoo2 } from \"./ExportNamed_Class\";
import { foo2Inst } from \"./ExportNamed_Class\";
var b1: ClassFoo2 = foo2Inst;
var b2: number = foo2Inst;
new ClassFoo2();
import type ClassFoo3T from \"./ExportCJSDefault_Class\";
import ClassFoo3 from \"./ExportCJSDefault_Class\";
var c1: ClassFoo3T = new ClassFoo3();
new ClassFoo3T();
import type { ClassFoo4, ClassFoo5 } from \"./ExportCJSNamed_Class\";
import { foo4Inst, foo5Inst } from \"./ExportCJSNamed_Class\";
var d1: ClassFoo4 = foo4Inst;
var d2: number = foo4Inst;
new ClassFoo4();
var d3: typeof ClassFoo5 = foo5Inst;
import type { AliasFoo3 } from \"./ExportNamed_Alias\";
import { givesAFoo3Obj } from \"./ExportNamed_Alias\";

View File

@ -334,12 +334,14 @@ var a1: ClassFoo1T = ClassFoo1;
var a2: ClassFoo1T = new ClassFoo1();
new ClassFoo1T();
import typeof { ClassFoo2 as ClassFoo2T } from \"./ExportNamed_Class\";
import { ClassFoo2 } from \"./ExportNamed_Class\";
var b1: ClassFoo2T = ClassFoo2;
var b2: ClassFoo2T = new ClassFoo2();
new ClassFoo2T();
import typeof ClassFoo3T from \"./ExportCJSDefault_Class\";
import ClassFoo3 from \"./ExportCJSDefault_Class\";
var c1: ClassFoo3T = ClassFoo3;

View File

@ -434,6 +434,7 @@ function linear_deferred_init() {
var x: number;
x = 0;
var y: number = x;
}
@ -469,6 +470,7 @@ function if_partial_post_init(b) {
if (b) {
var x: number = 0;
}
var y: number = x;
}
@ -478,6 +480,7 @@ function if_post_init(b) {
} else {
var x: number = 1;
}
var y: number = x;
}
@ -487,6 +490,7 @@ function if_partial_post_init(b) {
if (b) {
x = 0;
}
var y: number = x;
}
@ -498,6 +502,7 @@ function if_post_init(b) {
} else {
x = 1;
}
var y: number = x;
}
@ -507,10 +512,12 @@ function switch_partial_post_init(i) {
case 0:
x = 0;
break;
case 1:
x = 1;
break;
}
var y: number = x;
@ -522,14 +529,17 @@ function switch_post_init(i) {
case 0:
x = 0;
break;
case 1:
x = 1;
break;
default:
x = 2;
}
var y: number = x;
}
@ -628,6 +638,7 @@ function for_post_init(b) {
for (; b; ) {
var x: number = 0;
}
var y: number = x;
}
@ -650,6 +661,7 @@ function for_in_post_init() {
for (var p in { a: 1, b: 2 }) {
var x: number = 0;
}
var y: number = x;
}
@ -672,6 +684,7 @@ function for_in_post_init() {
for (var x of [ 1, 2, 3 ]) {
var x: number = 0;
}
var y: number = x;
}
"
@ -875,6 +888,7 @@ function linear_deferred_init() {
let x: number;
x = 0;
let y: number = x;
}
@ -884,6 +898,7 @@ function linear_pre_init() {
let z: number = x;
x = 0;
let w: number = x;
}
@ -897,6 +912,7 @@ function if_partial_post_init(b) {
if (b) {
x = 0;
}
var y: number = x;
}
@ -908,6 +924,7 @@ function if_post_init(b) {
} else {
x = 1;
}
var y: number = x;
}
@ -917,10 +934,12 @@ function switch_partial_post_init(i) {
case 0:
x = 0;
break;
case 1:
x = 1;
break;
}
var y: number = x;
@ -932,14 +951,17 @@ function switch_post_init(i) {
case 0:
x = 0;
break;
case 1:
x = 1;
break;
default:
x = 2;
}
var y: number = x;
}
@ -975,6 +997,7 @@ function for_in_post_init() {
for (var p in {}) {
x = 0;
}
var y: number = x;
}
@ -984,6 +1007,7 @@ function for_of_post_init() {
for (var x of []) {
x = 0;
}
var y: number = x;
}
@ -993,6 +1017,7 @@ function switch_post_init2(i): number {
case 1:
bar = 3;
break;
default:
throw new Error(\"Invalid state\");
@ -1006,6 +1031,7 @@ function switch_post_init2(i): number {
case 1:
bar = 3;
break;
default:
throw new Error(\"Invalid state\");

View File

@ -123,6 +123,7 @@ function consumer2(b) {
if (g instanceof X1)
g.foo = \"1337\";
}
class Y1 {
bar: X1;
}
@ -149,6 +150,7 @@ function consumer4(b) {
if (g.bar instanceof X1)
g.bar.foo = \"1337\";
}
class Z1 {
baz: Y1;
}
@ -175,6 +177,7 @@ function consumer6(b) {
if (g.baz.bar instanceof X1)
g.baz.bar.foo = \"1337\";
}
class C {
m() {
if (this instanceof D)

View File

@ -97,6 +97,7 @@ var k: K = { x: \"\", y: \"\" };
(k.x: string);
(k.y: string);
declare class C { x: number }
declare class D extends C, Other {}
interface A<Y> { y: Y }
@ -139,6 +140,7 @@ function foo(l: L) {
l.z;
}
type M = { y: string } & J & { z: boolean };
function bar(m: M) {
@ -191,6 +193,7 @@ new C().bar((x: string) => { }); // error, number ~/~> string
interface I { foo(x: number): void }
(function foo(x: number) {}: I);
declare class C { bar(i: I): void; bar(f: (x: number) => void): void }
new C().bar((x: string) => {});

View File

@ -150,6 +150,7 @@ type FG = (_: ObjA | ObjB) => void;
declare var fun1: F & G;
(fun1: FG);
var fun2: FG = fun1;
declare var f: ((_: number) => void) & ((_: string) => void);
var g: (_: number | string) => void = f;

View File

@ -54,16 +54,19 @@ for (var i = 0; i < 3; i++) {
for (var k in a) {
foo(a[k]);
}
var b = (null: ?{ [key: string]: string });
for (var j in b) {
foo(b[j]);
}
var c;
for (var m in c = b) {
foo(c[m]);
}
var d;
for (var n in d = a) {

View File

@ -89,6 +89,7 @@ function foo(strs: Iterable<string>): void {
console.log(s);
}
}
var m: Map<string, number> = new Map();
foo(m.keys());

View File

@ -31,6 +31,7 @@ var b: React.Element<{ prop1: string }> = <CustomComponent prop=\"asdf\"/>;
<div id=\"asdf\"/>;
<div id={42}/>;
var c: React.Element<{ id: string }> = <div id=\"asdf\"/>;
var d: React.Element<{ id: number }> = <div id=\"asdf\"/>;
"

View File

@ -74,6 +74,7 @@ function testKeysOfObject(str: string, lit: \"hi\") {
(123: $Keys<Object>);
}
type StrDict = { [key: string]: mixed };
function testKeysOfStrDict(str: string, lit: \"hi\") {
@ -87,6 +88,7 @@ function testKeysOfStrDict(str: string, lit: \"hi\") {
(123: $Keys<StrDict>);
}
type StrLitDict = { [key: \"hi\"]: mixed };
function testKeysOfStrLitDict(str: string, lit: \"hi\") {
@ -102,6 +104,7 @@ function testKeysOfStrLitDict(str: string, lit: \"hi\") {
(123: $Keys<StrLitDict>);
}
type ObjLit = { hi: mixed };
function testKeysOfOtherObj(str: string, lit: \"hi\") {

View File

@ -88,6 +88,7 @@ class C {
(new C().bar: boolean);
(new C().qux: boolean);
const o = {
foo(): number {
return 0;

View File

@ -18,6 +18,7 @@ var w: string = parseInt(\"...\");
var a = new Map();
a.delete(\"foobar\");
var b = undefined;
if (undefined)

View File

@ -56,11 +56,13 @@ function bar(x: $Keys<{ age: number }>) {}
bar(APIKeys.AGE);
bar(APIKeys.NAME);
var object = {};
object[APIKeys.AGE] = 123;
object[APIKeys.NAME] = \"FOO\";
var age: number = object[APIKeys.AGE];
var name: number = object[APIKeys.NAME];
var indices = { red: 0, green: 1, blue: 2 };
@ -108,6 +110,7 @@ function test3(x: number, flip_times: number): number {
for (var i = 0; i < flip_times; i++) {
x = -x;
}
return x;
}
@ -117,6 +120,7 @@ function test4(flip_times: number): number {
for (var i = 0; i < flip_times; i++) {
x = -x;
}
return x;
}
"

View File

@ -82,6 +82,7 @@ function switch_scope(x: mixed) {
a = 0;
b = 0;
}
(a: string);
@ -204,6 +205,7 @@ function foo0(b: boolean): number {
if (b) {
var x = \"\";
}
return x;
}
"

View File

@ -924,6 +924,7 @@ function logical11a(): number {
for (var x = 0; x < 5; x++) {
y = y || true;
}
return y;
}
@ -931,6 +932,7 @@ function logical11b(y: number): number {
for (var x = 0; x < 5; x++) {
y = y || true;
}
return y;
}
@ -943,6 +945,7 @@ function logical12a(): number {
z = false;
}
return y;
}
@ -950,6 +953,7 @@ function logical12b(y: number): number {
for (var x = 0; x < 5; x++) {
y = y && true;
}
return y;
}

View File

@ -17,6 +17,7 @@ var export_o: { x: number } = o;
function f(u, v?): number {
return u;
}
var export_f: (u: number) => number = f;
module.exports = export_f;

View File

@ -49,6 +49,7 @@ C.x;
new C().foo.x;
C.bar.x;
import { Foo } from \"./exports_optional_prop\";
const foo = new Foo();

View File

@ -17,6 +17,7 @@ f(A.x); // A.x is now a string, by def assign
/* @providesModule A */
// A.x is now a string, by def assign
module.exports = {};
var A = { x: true, ...{} };
module.exports.cls = A;
@ -125,9 +126,11 @@ var f = require(\"A\").fn;
function g(): string {
return this.i;
}
var o = { fn: g, ...{} };
o.i = true;
var i = o.fn();
f(i);
@ -150,6 +153,7 @@ module.exports = {obj: o};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* @providesModule E */
function h(x: number) {}
var proto = { fn: h };
var o = Object.create(proto);
@ -193,6 +197,7 @@ var a = { length: \"duck\" };
a.length = 123;
a.length();
var b = [ 123 ];
b.length = \"duck\";

View File

@ -43,6 +43,7 @@ function g(x: string) {}
function f(x: number): number {
g(x);
return x;
}

View File

@ -43,6 +43,7 @@ function Foo() {
}
Foo.prototype.m = function() {};
var o1: { x: number; m(): void } = new Foo();
var o2: Foo = new Foo();
"

View File

@ -32,6 +32,7 @@ class Bar {
}
bar(z: string, u: string): string {
new Qux().w = \"?\";
return z;
}
}
@ -78,10 +79,12 @@ class Foo extends Qux {
}
foo(y: string, z): number {
this.x = y;
var u = new Foo(\"...\").qux();
var v = new Bar(y);
v.self = v;
return v.bar(z, u);
}
fooqux(x: string) {

View File

@ -45,6 +45,7 @@ var foo1 = function<T>(x: T): T {
function foo2<T, S>(x: T): S {
return x;
}
var foo3 = function<T>(x: T): T {
return foo3(x);
};
@ -52,11 +53,13 @@ var foo3 = function<T>(x: T): T {
function foo4<T, S>(x: T): S {
return foo4(x);
}
var x = [];
function foo5<T>(): Array<T> {
return x;
}
var foo6 = function<R>(x: R): R {
return foo1(x);
};
@ -69,6 +72,7 @@ function foo8<U>(x: U, y): U {
var z = foo8(x, x);
y();
return x;
}
"

View File

@ -67,6 +67,7 @@ function f(x: number) {}
function g() {
return 42 || \"hello\";
}
var x = g();
if (typeof x === \"string\") {
@ -74,11 +75,13 @@ if (typeof x === \"string\") {
}
f(x);
class A {}
function h() {
return 42 || new A();
}
var y = h();
if (y instanceof A) {
@ -88,6 +91,7 @@ if (y instanceof A) {
function bar() {
return true;
}
class C {
qux() {}
}
@ -117,6 +121,7 @@ function goofy2() {
if (typeof o.x == \"function\") {
o.x();
}
var y = o.x;
if (typeof y == \"function\") {
@ -241,6 +246,7 @@ function foo(x: A) {
x.c();
}
}
class D {
d() {}
}
@ -282,6 +288,7 @@ function test(obj: BaseClass): string {
if (obj instanceof ChildClass) {
return obj.childProp_TYPO;
}
return obj.baseProp;
}
"

View File

@ -36,6 +36,7 @@ type Map<X, Y> = (x: X) => Y;
function bar<U, V>(x: U, f: Map<U, V>): V {
return f(x);
}
var y: number = bar(0, x => \"\");
type Seq = number | Array<Seq>;
var s1: Seq = [ 0, [ 0 ] ];

View File

@ -84,6 +84,7 @@ buffer[1];
buffer.copyWithin(0, 0);
buffer.copyWithin(0, 0, 0);
const it1: Iterator<[number, number]> = buffer.entries();
bool = buffer.every((element: number) => false);
@ -136,6 +137,7 @@ num = buffer.indexOf(3);
num = buffer.indexOf(3, 4);
buffer = Buffer.from([ 98, 117, 102, 102, 101, 114 ]);
const typedArray = new Uint8Array([ 52 ]);
buffer = Buffer.from(

View File

@ -43,12 +43,15 @@ let data = require(\"./package/index.json\");
(data.foo.bar: void);
(data.abc: boolean);
let data2 = require(\"./package\");
(data2.baz: void);
let data3 = require(\"./package2\");
(data3.foo: void);
let data4 = require(\"./json_array\");
(data4: Array<number>);

View File

@ -25,11 +25,13 @@ var u1 = os.userInfo();
(u1.username: string);
(u1.username: Buffer);
var u2 = os.userInfo({ encoding: \"utf8\" });
(u2.username: string);
(u2.username: Buffer);
var u3 = os.userInfo({ encoding: \"buffer\" });
(u3.username: string);

View File

@ -57,9 +57,11 @@ ls.stdin.end(data, \"utf-8\");
ls.stdin.end(data, () => {});
ls.stdin.end(data, \"utf-8\", () => {});
var ws = fs.createWriteStream(\"/dev/null\");
ls.stdout.pipe(ws).end();
class MyReadStream extends stream.Readable {}
class MyWriteStream extends stream.Writable {}
class MyDuplex extends stream.Duplex {}

View File

@ -49,6 +49,7 @@ function bar(): ?string {
function qux(x: string) {}
function corge(x: number) {}
var x = bar();
if (x != null)
@ -66,6 +67,7 @@ if (x != null) {
qux(x);
}
var array_of_nullable: Array<?number> = [ null, 3 ];
"
`;

View File

@ -77,6 +77,7 @@ b.f(); // error, property \`p\` not found
function f() {
return this.p;
}
var a = { p: 0, f };
var b = { f };

View File

@ -107,6 +107,7 @@ class C {
(Object.create(new C()): C);
({ foo: \"foo\" }: C);
type O = { foo: string };
declare var o: O;
@ -188,6 +189,7 @@ var sealed = { one: \"one\", two: \"two\" };
(Object.keys(sealed): Array<\"one\" | \"two\">);
(Object.keys(sealed): void);
var unsealed = {};
Object.keys(unsealed).forEach(
@ -195,6 +197,7 @@ Object.keys(unsealed).forEach(
(k: number);
}
);
var dict: { [k: number]: string } = {};
Object.keys(dict).forEach(
@ -202,15 +205,18 @@ Object.keys(dict).forEach(
(k: number);
}
);
var any: Object = {};
(Object.keys(any): Array<number>);
class Foo {
prop: string;
foo() {}
}
(Object.keys(new Foo()): Array<\"error\">);
class Bar extends Foo {
bar_prop: string;
bar() {}
@ -476,6 +482,7 @@ function takesAString(x: string) {}
function takesANumber(x: number) {}
function takesAnObject(x: Object) {}
class Foo {}
var a = { foo: \"bar\" };
var b = { foo: \"bar\", ...{} };
@ -492,6 +499,7 @@ var y = new Foo();
takesAString(a.toString());
d.toString();
var aToString: () => string = a.toString;
var aToString2 = a.toString;
@ -504,11 +512,13 @@ b.toString = function(): string {
c.toString = function(): number {
return 123;
};
var cToString: () => number = c.toString;
var xToString: number = x.toString;
var xToString2: () => number = x.toString;
takesAString(x.toString());
var yToString: number = y.toString;
takesAString(y.toString());
@ -526,6 +536,7 @@ takesAString(y.toString());
(123).toString(null);
takesABool(a.hasOwnProperty(\"foo\"));
var aHasOwnProperty: (prop: string) => boolean = a.hasOwnProperty;
var aHasOwnProperty2 = a.hasOwnProperty;
@ -534,15 +545,18 @@ takesABool(aHasOwnProperty2(\"bar\"));
b.hasOwnProperty = function() {
return false;
};
var xHasOwnProperty: number = x.hasOwnProperty;
var xHasOwnProperty2: (prop: string) => number = x.hasOwnProperty;
takesABool(x.hasOwnProperty(\"foo\"));
var yHasOwnProperty: number = y.hasOwnProperty;
takesABool(y.hasOwnProperty(\"foo\"));
takesABool(a.propertyIsEnumerable(\"foo\"));
var aPropertyIsEnumerable: (prop: string) => boolean = a.propertyIsEnumerable;
var aPropertyIsEnumerable2 = a.propertyIsEnumerable;
@ -551,15 +565,18 @@ takesABool(aPropertyIsEnumerable2(\"bar\"));
b.propertyIsEnumerable = function() {
return false;
};
var xPropertyIsEnumerable: number = x.propertyIsEnumerable;
var xPropertyIsEnumerable2: (prop: string) => number = x.propertyIsEnumerable;
takesABool(x.propertyIsEnumerable(\"foo\"));
var yPropertyIsEnumerable: number = y.propertyIsEnumerable;
takesABool(y.propertyIsEnumerable(\"foo\"));
takesAnObject(a.valueOf());
var aValueOf: () => Object = a.valueOf;
var aValueOf2 = a.valueOf;
@ -568,17 +585,21 @@ takesAnObject(aValueOf2());
b.valueOf = function() {
return {};
};
var xValueOf: number = x.valueOf;
takesANumber(x.valueOf());
var yValueOf: number = y.valueOf;
takesAnObject(y.valueOf());
var strValueOf: string = \"foo\".valueOf();
var numValueOf: number = (123).valueOf();
var boolValueOf: boolean = true.valueOf();
takesAString(a.toLocaleString());
var aToLocaleString: () => string = a.toLocaleString;
var aToLocaleString2 = a.toLocaleString;
@ -587,13 +608,16 @@ takesAString(aToLocaleString2());
b.toLocaleString = function() {
return \"derp\";
};
var xToLocaleString: number = x.toLocaleString;
var xToLocaleString2: () => number = x.toLocaleString;
takesAString(x.toLocaleString());
var yToLocaleString: number = y.toLocaleString;
takesAString(y.toLocaleString());
var k: Object = a.constructor;
(123).constructor;

View File

@ -33,6 +33,7 @@ var foo = Object.freeze({ bar: \"12345\" });
foo.bar = \"23456\";
Object.assign(foo, { bar: \"12345\" });
var baz = { baz: 12345 };
var bliffl = Object.freeze({ bar: \"12345\", ...baz });
@ -47,6 +48,7 @@ bliffl.constructor = baz;
bliffl.toString = function() {};
baz.baz = 0;
var x: number = Object.freeze(123);
var xx: { x: number } = Object.freeze({ x: \"error\" });
"

View File

@ -37,6 +37,7 @@ Object.is(0, -0);
Object.is(NaN, NaN);
Object.is({}, {});
var emptyObject = {};
var emptyArray = [];
@ -45,9 +46,11 @@ Object.is(emptyObject, emptyObject);
Object.is(emptyArray, emptyArray);
Object.is(emptyObject, emptyArray);
var squared = x => x * x;
Object.is(squared, squared);
var a: boolean = Object.is(\"a\", \"a\");
var b: string = Object.is(\"a\", \"a\");
var c: boolean = Object.is(\"a\");

View File

@ -37,12 +37,15 @@ var z = Object(123); // error (next line makes this not match any signatures)
(Object(void 0): {});
(Object(undefined): Number);
var x = Object(null);
x.foo = \"bar\";
var y = Object(\"123\");
(y.charAt(0): string);
var z = Object(123);
(z.charAt(0): string);
@ -101,6 +104,7 @@ x[123] = false;
x[\"foo\" + \"bar\"] = \"derp\";
(x[\`foo\`]: string);
var y: { foo: string } = { foo: \"bar\" };
y[\"foo\"] = 123;

View File

@ -28,6 +28,7 @@ class C {
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function x<T>(x: T = 0) {}
class C {
x<T>(x: T = 0) {}
}
@ -170,12 +171,14 @@ function bar(x?, y?) {
}
bar(0);
var foo: (x?: number) => void = bar;
foo();
function qux(x = \"hello\", ...y): string {
foo(x);
return y[0];
}
@ -229,6 +232,7 @@ function foo(x?: string): string {
if (x == null) {
return \"foo\";
}
return x;
}
@ -236,6 +240,7 @@ function bar(obj: { x?: string }): string {
if (obj.x == null) {
return \"foo\";
}
return obj.x;
}
@ -243,6 +248,7 @@ function baz(bar?) {
if (!bar) {
return 1;
}
return bar.duck;
}
@ -250,6 +256,7 @@ function testOptionalNullable(x?: ?string): string {
if (x == null) {
return \"foo\";
}
return x;
}
@ -257,6 +264,7 @@ function testOptionalNullableDefault(x?: ?string = \"hi\"): string {
if (x == null) {
return \"foo\";
}
return x;
}
@ -264,6 +272,7 @@ function testOptionalNullableProperty(obj: { x?: ?string }): string {
if (obj.x == null) {
return \"foo\";
}
return obj.x;
}

View File

@ -60,11 +60,13 @@ var a: { foo?: string } = {};
a.foo = undefined;
a.foo = null;
var b: { foo?: ?string } = {};
b.foo = undefined;
b.foo = null;
var c: { foo?: string } = { foo: undefined };
var d: { foo?: string } = { foo: null };
var e: { foo?: ?string } = { foo: undefined };
@ -176,6 +178,7 @@ var x: { a: number; b?: number } = { a: 0 };
x = { a: 0 };
x.b = 1;
class A {
x: { a: number; b?: string };
foo() {

View File

@ -104,6 +104,7 @@ a.bar({ a: 0 });
a.bar({ a: \"hey\" });
a.bar({ a: true });
declare var x: { a: boolean } & { b: string };
a.bar(x);
@ -181,12 +182,14 @@ declare function f(x: number): void;
declare var x_f: string | number;
f(x_f);
declare function g(x: null): void;
declare function g(x: void): void;
declare function g(x: string): void;
declare var x_g: ?string;
g(x_g);
declare function h(x: void): void;
declare function h(x: string): void;
declare var x_h: { p?: string };
@ -204,6 +207,7 @@ var x2:string = foo([\"\"])[0];
function foo<U>(x: $Either<Array<U>, U>): Array<U> {
return [];
}
var x1: number = foo(0)[0];
var x2: string = foo([ \"\" ])[0];
"

View File

@ -7,6 +7,7 @@ n * s.length;
function foo(x) {
return [ x, x > 0, \"number \" + x ];
}
var [ n, b, s ] = foo(42);
n * s.length;
@ -43,6 +44,7 @@ var r: number = 0;
function foo<X>(x: X): X {
r = x;
return x;
}
"
@ -80,6 +82,7 @@ function foo() {
function bar(x: ?string): number {
if (x == null)
x = \"\";
return x.length;
}
"
@ -107,6 +110,7 @@ function C() {
C.prototype.foo = function() {
return this.x;
};
var c = new C();
var x: string = c.foo();
@ -117,10 +121,12 @@ function foo() {
function bar() {
return this.foo();
}
var o = { y: \"\", foo: foo, bar: bar };
var o2 = { y: 0, foo: foo, bar: bar };
o.bar();
var y: number = o2.bar();
"
`;

View File

@ -18,6 +18,7 @@ function bar(): A<*> { // error, * can\'t be {} and {x: string} at the same time
class A<X> {}
new A();
class B extends A {}
function foo(b): A<any> {
@ -144,6 +145,7 @@ class Foo<T> {
function bar<S>(foo: Foo<S>, y: S): Foo<S> {
return new Foo(y);
}
var P = { bar: bar };
declare var Q: { bar<S>(foo: Foo<S>, y: S): Foo<S> };
var foo = new Foo(0);

View File

@ -139,6 +139,7 @@ declare var a: mixed;
var b = refine(a, is_string);
(b: string);
declare function refine_fst<T, P: $Pred<2>>(v: T,
w: T,
cb: P): $Refine<T, P, 1>;
@ -147,6 +148,7 @@ declare var d: mixed;
var e = refine2(c, d, is_string_and_number);
(e: string);
declare function refine2<T, P: $Pred<2>>(v: T, w: T, cb: P): $Refine<T, P, 1>;
function is_string(x): boolean %checks {
@ -192,6 +194,7 @@ declare var a: Array<mixed>;
const b = my_filter(a, is_string);
(b: Array<number>);
declare var c: Array<mixed>;
const d = my_filter(c, is_string_regular);
@ -305,6 +308,7 @@ declare var a: mixed;
var b = refine(a, is_string);
(b: string);
declare var c: mixed;
declare var d: mixed;
declare var e: mixed;
@ -319,6 +323,7 @@ var e = refine3(c, d, e, is_string_and_number);
function is_string_and_number(x, y): %checks {
return typeof x === \"string\" && typeof y === \"number\";
}
var e = refine(a, is_string_regular);
(e: number);

View File

@ -63,6 +63,7 @@ const o = { a: 1 };
if (m.bind(o)) {
o.a;
}
class D {
m: Function;
n() {
@ -189,11 +190,13 @@ var s = \"a\";
var n = r(s) || 1;
(n: number);
var x = \"\";
if (x = r(s) || 1) {
(x: number);
}
declare var dollars: mixed;
function foo(x: mixed) {
@ -245,6 +248,7 @@ function f(_this: { m: ?Meeting }): string {
if (_this.m.es.some(a => a.fbid === 0))
{}
return \"3\";
}
"
@ -302,6 +306,7 @@ function foo(s: Array<string>): string {
if (pred(s)) {
return \"1\";
}
return 1;
}
"
@ -341,6 +346,7 @@ function foo(s: Array<string>): string {
if ((pred + 1)(\"s\")) {
return \"1\";
}
return \"1\";
}
"
@ -431,6 +437,7 @@ function foo(x: string | Array<string>): string {
if (pred(x)) {
return x;
}
return \"1\";
}
"

View File

@ -33,6 +33,7 @@ function bak(z: string | number): number {
function check(y): %checks(typeof y === \"string\") {
return typeof y === \"number\";
}
declare var y: number | boolean;
if (check(y)) {
@ -310,6 +311,7 @@ function foo(a, b) {
function two_strings(x, y): %checks {
return is_string(x) && is_string(y);
}
declare function from_two_strings(x: string, y: string): void;
"
`;

View File

@ -54,6 +54,7 @@ var a2 = (x: mixed): %checks (x !== null) => x !== null;
function f5(x: mixed): %checks(x !== null) {
return x !== null;
}
var a2 = (x: mixed): %checks(x !== null) => x !== null;
"
`;
@ -95,10 +96,12 @@ declare function f4(x: mixed): boolean %checks(x !== null);
function f7(x: mixed): %checks {
return x !== null;
}
var a0 = (x: mixed) => x !== null;
var a1 = (x: mixed): %checks => x !== null;
(x): %checks => x !== null;
const insert_a_really_big_predicated_arrow_function_name_here = (x): %checks => x !==
null;
declare var x;
@ -106,6 +109,7 @@ declare var x;
x;
checks => 123;
type checks = any;
declare function f(x: mixed): checks;

Some files were not shown because too many files have changed in this diff Show More