Merge branch 'master' into fix5953_crashJSX

This commit is contained in:
Yui T
2015-12-14 15:04:31 -08:00
3879 changed files with 25877 additions and 11116 deletions

View File

@@ -0,0 +1,46 @@
///<reference path="fourslash.ts" />
// Assignments to the 'prototype' property of a function create a class
// @allowNonTsExtensions: true
// @Filename: myMod.js
//// function myCtor(x) {
//// }
//// myCtor.prototype.foo = function() { return 32 };
//// myCtor.prototype.bar = function() { return '' };
////
//// var m = new myCtor(10);
//// m/*1*/
//// var a = m.foo;
//// a/*2*/
//// var b = a();
//// b/*3*/
//// var c = m.bar();
//// c/*4*/
// Members of the class instance
goTo.marker('1');
edit.insert('.');
verify.memberListContains('foo', undefined, undefined, 'property');
verify.memberListContains('bar', undefined, undefined, 'property');
edit.backspace();
// Members of a class method (1)
goTo.marker('2');
edit.insert('.');
verify.memberListContains('length', undefined, undefined, 'property');
edit.backspace();
// Members of the invocation of a class method (1)
goTo.marker('3');
edit.insert('.');
verify.memberListContains('toFixed', undefined, undefined, 'method');
verify.not.memberListContains('substr', undefined, undefined, 'method');
edit.backspace();
// Members of the invocation of a class method (2)
goTo.marker('4');
edit.insert('.');
verify.memberListContains('substr', undefined, undefined, 'method');
verify.not.memberListContains('toFixed', undefined, undefined, 'method');

View File

@@ -0,0 +1,36 @@
///<reference path="fourslash.ts" />
// Assignments to 'this' in the constructorish body create
// properties with those names
// @allowNonTsExtensions: true
// @Filename: myMod.js
//// function myCtor(x) {
//// this.qua = 10;
//// }
//// myCtor.prototype.foo = function() { return 32 };
//// myCtor.prototype.bar = function() { return '' };
////
//// var m = new myCtor(10);
//// m/*1*/
//// var x = m.qua;
//// x/*2*/
//// myCtor/*3*/
// Verify the instance property exists
goTo.marker('1');
edit.insert('.');
verify.completionListContains('qua', undefined, undefined, 'property');
edit.backspace();
// Verify the type of the instance property
goTo.marker('2');
edit.insert('.');
verify.completionListContains('toFixed', undefined, undefined, 'method');
goTo.marker('3');
edit.insert('.');
// Make sure symbols don't leak out into the constructor
verify.completionListContains('qua', undefined, undefined, 'warning');
verify.completionListContains('foo', undefined, undefined, 'warning');
verify.completionListContains('bar', undefined, undefined, 'warning');

View File

@@ -0,0 +1,20 @@
///<reference path="fourslash.ts" />
// Inside an inferred method body, the type of 'this' is the class type
// @allowNonTsExtensions: true
// @Filename: myMod.js
//// function myCtor(x) {
//// this.qua = 10;
//// }
//// myCtor.prototype.foo = function() { return this/**/; };
//// myCtor.prototype.bar = function() { return '' };
////
goTo.marker();
edit.insert('.');
// Check members of the function
verify.completionListContains('foo', undefined, undefined, 'property');
verify.completionListContains('bar', undefined, undefined, 'property');
verify.completionListContains('qua', undefined, undefined, 'property');

View File

@@ -0,0 +1,21 @@
///<reference path="fourslash.ts" />
// Check for any odd symbol leakage
// @allowNonTsExtensions: true
// @Filename: myMod.js
//// function myCtor(x) {
//// this.qua = 10;
//// }
//// myCtor.prototype.foo = function() { return 32 };
//// myCtor.prototype.bar = function() { return '' };
////
//// myCtor/*1*/
goTo.marker('1');
edit.insert('.');
// Check members of the function
verify.completionListContains('foo', undefined, undefined, 'warning');
verify.completionListContains('bar', undefined, undefined, 'warning');
verify.completionListContains('qua', undefined, undefined, 'warning');

View File

@@ -0,0 +1,19 @@
///<reference path="fourslash.ts" />
// No prototype assignments are needed to enable class inference
// @allowNonTsExtensions: true
// @Filename: myMod.js
//// function myCtor() {
//// this.foo = 'hello';
//// this.bar = 10;
//// }
//// let x = new myCtor();
//// x/**/
goTo.marker();
edit.insert('.');
// Check members of the function
verify.completionListContains('foo', undefined, undefined, 'property');
verify.completionListContains('bar', undefined, undefined, 'property');

View File

@@ -0,0 +1,80 @@
/// <reference path="fourslash.ts" />
//// class RoyalGuard {
//// isLeader(): this is LeadGuard {
//// return this instanceof LeadGuard;
//// }
//// isFollower(): this is FollowerGuard {
//// return this instanceof FollowerGuard;
//// }
//// }
////
//// class LeadGuard extends RoyalGuard {
//// lead(): void {};
//// }
////
//// class FollowerGuard extends RoyalGuard {
//// follow(): void {};
//// }
////
//// let a: RoyalGuard = new FollowerGuard();
//// if (a.is/*1*/Leader()) {
//// a./*2*/;
//// }
//// else if (a.is/*3*/Follower()) {
//// a./*4*/;
//// }
////
//// interface GuardInterface {
//// isLeader(): this is LeadGuard;
//// isFollower(): this is FollowerGuard;
//// }
////
//// let b: GuardInterface;
//// if (b.is/*5*/Leader()) {
//// b./*6*/;
//// }
//// else if (b.is/*7*/Follower()) {
//// b./*8*/;
//// }
////
//// if (((a.isLeader)())) {
//// a./*9*/;
//// }
//// else if (((a).isFollower())) {
//// a./*10*/;
//// }
////
//// if (((a["isLeader"])())) {
//// a./*11*/;
//// }
//// else if (((a)["isFollower"]())) {
//// a./*12*/;
//// }
////
//// let leader/*13*/Status = a.isLeader();
//// function isLeaderGuard(g: RoyalGuard) {
//// return g.isLeader();
//// }
//// let checked/*14*/LeaderStatus = isLeader/*15*/Guard(a);
goTo.marker("2");
verify.completionListContains("lead");
goTo.marker("4");
verify.completionListContains("follow");
goTo.marker("6");
verify.completionListContains("lead");
goTo.marker("8");
verify.completionListContains("follow");
goTo.marker("9");
verify.completionListContains("lead");
goTo.marker("10");
verify.completionListContains("follow");
goTo.marker("11");
verify.completionListContains("lead");
goTo.marker("12");
verify.completionListContains("follow");

View File

@@ -0,0 +1,77 @@
/// <reference path="fourslash.ts" />
//// class RoyalGuard {
//// isLeader(): this is LeadGuard {
//// return this instanceof LeadGuard;
//// }
//// isFollower(): this is FollowerGuard {
//// return this instanceof FollowerGuard;
//// }
//// }
////
//// class LeadGuard extends RoyalGuard {
//// lead(): void {};
//// }
////
//// class FollowerGuard extends RoyalGuard {
//// follow(): void {};
//// }
////
//// let a: RoyalGuard = new FollowerGuard();
//// if (a.is/*1*/Leader()) {
//// a./*2*/;
//// }
//// else if (a.is/*3*/Follower()) {
//// a./*4*/;
//// }
////
//// interface GuardInterface {
//// isLeader(): this is LeadGuard;
//// isFollower(): this is FollowerGuard;
//// }
////
//// let b: GuardInterface;
//// if (b.is/*5*/Leader()) {
//// b./*6*/;
//// }
//// else if (b.is/*7*/Follower()) {
//// b./*8*/;
//// }
////
//// if (((a.isLeader)())) {
//// a./*9*/;
//// }
//// else if (((a).isFollower())) {
//// a./*10*/;
//// }
////
//// if (((a["isLeader"])())) {
//// a./*11*/;
//// }
//// else if (((a)["isFollower"]())) {
//// a./*12*/;
//// }
////
//// let leader/*13*/Status = a.isLeader();
//// function isLeaderGuard(g: RoyalGuard) {
//// return g.isLeader();
//// }
//// let checked/*14*/LeaderStatus = isLeader/*15*/Guard(a);
goTo.marker("1");
verify.quickInfoIs("(method) RoyalGuard.isLeader(): this is LeadGuard");
goTo.marker("3");
verify.quickInfoIs("(method) RoyalGuard.isFollower(): this is FollowerGuard");
goTo.marker("5");
verify.quickInfoIs("(method) GuardInterface.isLeader(): this is LeadGuard");
goTo.marker("7");
verify.quickInfoIs("(method) GuardInterface.isFollower(): this is FollowerGuard");
goTo.marker("13");
verify.quickInfoIs("let leaderStatus: boolean");
goTo.marker("14");
verify.quickInfoIs("let checkedLeaderStatus: boolean");
goTo.marker("15");
verify.quickInfoIs("function isLeaderGuard(g: RoyalGuard): boolean");

View File

@@ -0,0 +1,95 @@
/// <reference path="fourslash.ts" />
//// class FileSystemObject {
//// get is/*1*/File(): this is Item {
//// return this instanceof Item;
//// }
//// set is/*2*/File(param) {
//// // noop
//// }
//// get is/*3*/Directory(): this is Directory {
//// return this instanceof Directory;
//// }
//// is/*4*/Networked: this is (Networked & this);
//// constructor(public path: string) {}
//// }
////
//// class Item extends FileSystemObject {
//// constructor(path: string, public content: string) { super(path); }
//// }
//// class Directory extends FileSystemObject {
//// children: FileSystemObject[];
//// }
//// interface Networked {
//// host: string;
//// }
////
//// interface Sundries {
//// broken: boolean;
//// }
////
//// interface Supplies {
//// spoiled: boolean;
//// }
////
//// interface Crate<T> {
//// contents: T;
//// is/*5*/Sundries: this is Crate<Sundries>;
//// is/*6*/Supplies: this is Crate<Supplies>;
//// is/*7*/PackedTight: this is (this & {extraContents: T});
//// }
////
//// const obj: FileSystemObject = new Item("/foo", "");
//// if (obj.is/*8*/File) {
//// obj./*9*/;
//// if (obj.is/*10*/Networked) {
//// obj./*11*/;
//// }
//// }
//// if (obj.is/*12*/Directory) {
//// obj./*13*/;
//// if (obj.is/*14*/Networked) {
//// obj./*15*/;
//// }
//// }
//// if (obj.is/*16*/Networked) {
//// obj./*17*/;
//// }
////
//// const crate: Crate<any>;
//// if (crate.is/*18*/PackedTight) {
//// crate./*19*/;
//// }
//// if (crate.is/*20*/Sundries) {
//// crate.contents./*21*/;
//// if (crate.is/*22*/PackedTight) {
//// crate./*23*/
//// }
//// }
//// if (crate.is/*24*/Supplies) {
//// crate.contents./*25*/;
//// if (crate.is/*26*/PackedTight) {
//// crate./*27*/
//// }
//// }
goTo.marker("9");
verify.completionListContains("content");
goTo.marker("11");
verify.completionListContains("host");
goTo.marker("13");
verify.completionListContains("children");
goTo.marker("15");
verify.completionListContains("host");
goTo.marker("17");
verify.completionListContains("host");
goTo.marker("19");
verify.completionListContains("extraContents");
goTo.marker("21");
verify.completionListContains("broken");
goTo.marker("23");
verify.completionListContains("extraContents");
goTo.marker("25");
verify.completionListContains("spoiled");
goTo.marker("27");
verify.completionListContains("extraContents");

View File

@@ -0,0 +1,117 @@
/// <reference path="fourslash.ts" />
//// class FileSystemObject {
//// get is/*1*/File(): this is Item {
//// return this instanceof Item;
//// }
//// set is/*2*/File(param) {
//// // noop
//// }
//// get is/*3*/Directory(): this is Directory {
//// return this instanceof Directory;
//// }
//// is/*4*/Networked: this is (Networked & this);
//// constructor(public path: string) {}
//// }
////
//// class Item extends FileSystemObject {
//// constructor(path: string, public content: string) { super(path); }
//// }
//// class Directory extends FileSystemObject {
//// children: FileSystemObject[];
//// }
//// interface Networked {
//// host: string;
//// }
////
//// interface Sundries {
//// broken: boolean;
//// }
////
//// interface Supplies {
//// spoiled: boolean;
//// }
////
//// interface Crate<T> {
//// contents: T;
//// is/*5*/Sundries: this is Crate<Sundries>;
//// is/*6*/Supplies: this is Crate<Supplies>;
//// is/*7*/PackedTight: this is (this & {extraContents: T});
//// }
////
//// const obj: FileSystemObject = new Item("/foo", "");
//// if (obj.is/*8*/File) {
//// obj./*9*/;
//// if (obj.is/*10*/Networked) {
//// obj./*11*/;
//// }
//// }
//// if (obj.is/*12*/Directory) {
//// obj./*13*/;
//// if (obj.is/*14*/Networked) {
//// obj./*15*/;
//// }
//// }
//// if (obj.is/*16*/Networked) {
//// obj./*17*/;
//// }
////
//// const crate: Crate<any>;
//// if (crate.is/*18*/PackedTight) {
//// crate./*19*/;
//// }
//// if (crate.is/*20*/Sundries) {
//// crate.contents./*21*/;
//// if (crate.is/*22*/PackedTight) {
//// crate./*23*/
//// }
//// }
//// if (crate.is/*24*/Supplies) {
//// crate.contents./*25*/;
//// if (crate.is/*26*/PackedTight) {
//// crate./*27*/
//// }
//// }
goTo.marker("1");
verify.quickInfoIs("(property) FileSystemObject.isFile: this is Item");
goTo.marker("2");
verify.quickInfoIs("(property) FileSystemObject.isFile: this is Item");
goTo.marker("3");
verify.quickInfoIs("(property) FileSystemObject.isDirectory: this is Directory");
goTo.marker("4");
verify.quickInfoIs("(property) FileSystemObject.isNetworked: this is Networked & this");
goTo.marker("5");
verify.quickInfoIs("(property) Crate<T>.isSundries: this is Crate<Sundries>");
goTo.marker("6");
verify.quickInfoIs("(property) Crate<T>.isSupplies: this is Crate<Supplies>");
goTo.marker("7");
verify.quickInfoIs(`(property) Crate<T>.isPackedTight: this is this & {
extraContents: T;
}`);
goTo.marker("8");
verify.quickInfoIs("(property) FileSystemObject.isFile: this is Item");
goTo.marker("10");
verify.quickInfoIs("(property) FileSystemObject.isNetworked: this is Networked & Item");
goTo.marker("12");
verify.quickInfoIs("(property) FileSystemObject.isDirectory: this is Directory");
goTo.marker("14");
verify.quickInfoIs("(property) FileSystemObject.isNetworked: this is Networked & Directory");
goTo.marker("16");
verify.quickInfoIs("(property) FileSystemObject.isNetworked: this is Networked & FileSystemObject");
goTo.marker("18");
verify.quickInfoIs(`(property) Crate<any>.isPackedTight: this is Crate<any> & {
extraContents: any;
}`);
goTo.marker("20");
verify.quickInfoIs("(property) Crate<any>.isSundries: this is Crate<Sundries>");
goTo.marker("22");
verify.quickInfoIs(`(property) Crate<Sundries>.isPackedTight: this is Crate<Sundries> & {
extraContents: Sundries;
}`);
goTo.marker("24");
verify.quickInfoIs("(property) Crate<any>.isSupplies: this is Crate<Supplies>");
goTo.marker("26");
verify.quickInfoIs(`(property) Crate<Supplies>.isPackedTight: this is Crate<Supplies> & {
extraContents: Supplies;
}`);