Merge remote-tracking branch 'origin/master' into moduleAugmentations

This commit is contained in:
Vladimir Matveev
2016-01-14 11:13:48 -08:00
57 changed files with 1177 additions and 184 deletions

View File

@@ -38,4 +38,13 @@ someOther = <SomeOther>someDerived; // Error
someOther = <SomeOther>someBase; // Error
someOther = <SomeOther>someOther;
// Type assertion cannot be a type-predicate type
var numOrStr: number | string;
var str: string;
if(<numOrStr is string>(numOrStr === undefined)) { // Error
str = numOrStr; // Error, no narrowing occurred
}
if((numOrStr === undefined) as numOrStr is string) { // Error
}

View File

@@ -1,7 +1,7 @@
//@filename: file.tsx
//@jsx: preserve
declare module JSX {
interface Element { }
interface Element { something; }
interface IntrinsicElements { }
}

View File

@@ -0,0 +1,23 @@
// @filename: file.tsx
// @jsx: preserve
// @module: amd
// @noLib: true
// @libFiles: react.d.ts,lib.d.ts
import React = require('react');
const Foo = (props: any) => <div/>;
// Should be OK
const foo = <Foo />;
// Should be OK
var MainMenu: React.StatelessComponent<{}> = (props) => (<div>
<h3>Main Menu</h3>
</div>);
var App: React.StatelessComponent<{ children }> = ({children}) => (
<div >
<MainMenu/>
</div>
);

View File

@@ -0,0 +1,13 @@
/// <reference path='fourslash.ts'/>
// @Filename: file1.ts
//// interface interface1 extends interface1 {
//// /*1*/doStuff(): void;
//// /*2*/propName: string;
//// }
let markers = test.markers()
for (let marker of markers) {
goTo.position(marker.position);
verify.documentHighlightsAtPositionCount(1, ["file1.ts"]);
}

View File

@@ -0,0 +1,13 @@
/// <reference path='fourslash.ts'/>
// @Filename: file1.ts
//// class class1 extends class1 {
//// /*1*/doStuff() { }
//// /*2*/propName: string;
//// }
let markers = test.markers()
for (let marker of markers) {
goTo.position(marker.position);
verify.documentHighlightsAtPositionCount(1, ["file1.ts"]);
}

View File

@@ -0,0 +1,17 @@
/// <reference path='fourslash.ts'/>
// @Filename: file1.ts
//// interface interface1 extends interface1 {
//// /*1*/doStuff(): void;
//// /*2*/propName: string;
//// }
////
//// var v: interface1;
//// v./*3*/propName;
//// v./*4*/doStuff();
let markers = test.markers()
for (let marker of markers) {
goTo.position(marker.position);
verify.documentHighlightsAtPositionCount(2, ["file1.ts"]);
}

View File

@@ -0,0 +1,17 @@
/// <reference path='fourslash.ts'/>
// @Filename: file1.ts
//// class class1 extends class1 {
//// /*1*/doStuff() { }
//// /*2*/propName: string;
//// }
////
//// var c: class1;
//// c./*3*/doStuff();
//// c./*4*/propName;
let markers = test.markers()
for (let marker of markers) {
goTo.position(marker.position);
verify.documentHighlightsAtPositionCount(2, ["file1.ts"]);
}

View File

@@ -0,0 +1,30 @@
/// <reference path='fourslash.ts'/>
// @Filename: file1.ts
//// interface C extends D {
//// /*0*/prop0: string;
//// /*1*/prop1: number;
//// }
////
//// interface D extends C {
//// /*2*/prop0: string;
//// /*3*/prop1: number;
//// }
////
//// var d: D;
//// d./*4*/prop1;
goTo.marker("0");
verify.documentHighlightsAtPositionCount(2, ["file1.ts"]);
goTo.marker("1");
verify.documentHighlightsAtPositionCount(3, ["file1.ts"]);
goTo.marker("2");
verify.documentHighlightsAtPositionCount(2, ["file1.ts"]);
goTo.marker("3");
verify.documentHighlightsAtPositionCount(3, ["file1.ts"]);
goTo.marker("4");
verify.documentHighlightsAtPositionCount(3, ["file1.ts"]);

View File

@@ -0,0 +1,30 @@
/// <reference path='fourslash.ts'/>
// @Filename: file1.ts
//// class C extends D {
//// /*0*/prop0: string;
//// /*1*/prop1: string;
//// }
////
//// class D extends C {
//// /*2*/prop0: string;
//// /*3*/prop1: string;
//// }
////
//// var d: D;
//// d./*4*/prop1;
goTo.marker("0");
verify.documentHighlightsAtPositionCount(1, ["file1.ts"]);
goTo.marker("1");
verify.documentHighlightsAtPositionCount(1, ["file1.ts"]);
goTo.marker("2");
verify.documentHighlightsAtPositionCount(1, ["file1.ts"]);
goTo.marker("3");
verify.documentHighlightsAtPositionCount(2, ["file1.ts"]);
goTo.marker("4");
verify.documentHighlightsAtPositionCount(2, ["file1.ts"]);

View File

@@ -0,0 +1,25 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// [|doStuff|]() { }
//// [|propName|]: string;
//// }
////
//// var v: class1;
//// v.[|doStuff|]();
//// v.[|propName|];
function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) {
goTo.position(query.start);
for (const ref of references) {
verify.referencesAtPositionContains(ref);
}
}
const ranges = test.ranges();
verify.assertHasRanges(ranges);
const [r0, r1, r2, r3] = ranges;
verifyReferences(r0, [r0, r2]);
verifyReferences(r1, [r1, r3]);
verifyReferences(r2, [r0, r2]);
verifyReferences(r3, [r1, r3]);

View File

@@ -0,0 +1,25 @@
/// <reference path='fourslash.ts'/>
//// interface interface1 extends interface1 {
//// [|doStuff|](): void; // r0
//// [|propName|]: string; // r1
//// }
////
//// var v: interface1;
//// v.[|doStuff|](); // r2
//// v.[|propName|]; // r3
function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) {
goTo.position(query.start);
for (const ref of references) {
verify.referencesAtPositionContains(ref);
}
}
const ranges = test.ranges();
verify.assertHasRanges(ranges);
const [r0, r1, r2, r3] = ranges;
verifyReferences(r0, [r0, r2]);
verifyReferences(r1, [r1, r3]);
verifyReferences(r2, [r0, r2]);
verifyReferences(r3, [r1, r3]);

View File

@@ -0,0 +1,37 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// [|doStuff|]() { } // r0
//// [|propName|]: string; // r1
//// }
//// interface interface1 extends interface1 {
//// [|doStuff|](): void; // r2
//// [|propName|]: string; // r3
//// }
//// class class2 extends class1 implements interface1 {
//// [|doStuff|]() { } // r4
//// [|propName|]: string; // r5
//// }
////
//// var v: class2;
//// v.[|propName|]; // r6
//// v.[|doStuff|](); // r7
function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) {
goTo.position(query.start);
for (const ref of references) {
verify.referencesAtPositionContains(ref);
}
}
const ranges = test.ranges();
verify.assertHasRanges(ranges);
const [r0, r1, r2, r3, r4, r5, r6, r7] = ranges;
verifyReferences(r0, [r0]);
verifyReferences(r1, [r1, r5, r6]);
verifyReferences(r2, [r2, r4, r7]);
verifyReferences(r3, [r3, r5, r6]);
verifyReferences(r4, [r2, r4, r7]);
verifyReferences(r5, [r1, r3, r5, r6]);
verifyReferences(r6, [r1, r3, r5, r6]);
verifyReferences(r7, [r2, r4, r7]);

View File

@@ -0,0 +1,30 @@
/// <reference path='fourslash.ts'/>
//// interface C extends D {
//// [|prop0|]: string; // r0
//// [|prop1|]: number; // r1
//// }
////
//// interface D extends C {
//// [|prop0|]: string; // r2
//// }
////
//// var d: D;
//// d.[|prop0|]; // r3
//// d.[|prop1|]; // r4
function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) {
goTo.position(query.start);
for (const ref of references) {
verify.referencesAtPositionContains(ref);
}
}
const ranges = test.ranges();
verify.assertHasRanges(ranges);
const [r0, r1, r2, r3, r4] = ranges;
verifyReferences(r0, [r0, r2, r3]);
verifyReferences(r1, [r1]);
verifyReferences(r2, [r0, r2, r3]);
verifyReferences(r3, [r0, r2, r3]);
verifyReferences(r4, []);

View File

@@ -0,0 +1,30 @@
/// <reference path='fourslash.ts'/>
//// class C extends D {
//// [|prop0|]: string; // r0
//// [|prop1|]: number; // r1
//// }
////
//// class D extends C {
//// [|prop0|]: string; // r2
//// }
////
//// var d: D;
//// d.[|prop0|]; // r3
//// d.[|prop1|]; // r4
function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) {
goTo.position(query.start);
for (const ref of references) {
verify.referencesAtPositionContains(ref);
}
}
const ranges = test.ranges();
verify.assertHasRanges(ranges);
const [r0, r1, r2, r3, r4] = ranges;
verifyReferences(r0, [r0]);
verifyReferences(r1, [r1]);
verifyReferences(r2, [r2, r3]);
verifyReferences(r3, [r2, r3]);
verifyReferences(r4, []);

View File

@@ -0,0 +1,15 @@
/// <reference path='fourslash.ts'/>
//// interface interface1 extends interface1 {
//// /*1*/doStuff(): void;
//// /*2*/propName: string;
//// }
////
//// var v: interface1;
//// v./*3*/propName;
//// v./*4*/doStuff();
test.markers().forEach(m => {
goTo.position(m.position, m.fileName);
verify.referencesCountIs(2);
});

View File

@@ -0,0 +1,15 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// /*1*/doStuff() { }
//// /*2*/propName: string;
//// }
////
//// var c: class1;
//// c./*3*/doStuff();
//// c./*4*/propName;
test.markers().forEach(m => {
goTo.position(m.position, m.fileName);
verify.referencesCountIs(2);
});

View File

@@ -0,0 +1,19 @@
/// <reference path='fourslash.ts'/>
//// interface interface1 extends interface1 {
//// /*1*/doStuff(): void;
//// /*2*/propName: string;
//// }
//// interface interface2 extends interface1 {
//// /*3*/doStuff(): void;
//// /*4*/propName: string;
//// }
////
//// var v: interface1;
//// v./*5*/propName;
//// v./*6*/doStuff();
test.markers().forEach(m => {
goTo.position(m.position, m.fileName);
verify.referencesCountIs(3);
});

View File

@@ -0,0 +1,32 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// /*1*/doStuff() { }
//// /*2*/propName: string;
//// }
//// class class2 extends class1 {
//// /*3*/doStuff() { }
//// /*4*/propName: string;
//// }
////
//// var v: class2;
//// v./*5*/propName;
//// v./*6*/doStuff();
goTo.marker("1");
verify.referencesCountIs(1);
goTo.marker("2");
verify.referencesCountIs(3);
goTo.marker("3");
verify.referencesCountIs(2);
goTo.marker("4");
verify.referencesCountIs(3);
goTo.marker("5");
verify.referencesCountIs(3);
goTo.marker("6");
verify.referencesCountIs(2);

View File

@@ -0,0 +1,42 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// /*1*/doStuff() { }
//// /*2*/propName: string;
//// }
//// interface interface1 extends interface1 {
//// /*3*/doStuff(): void;
//// /*4*/propName: string;
//// }
//// class class2 extends class1 implements interface1 {
//// /*5*/doStuff() { }
//// /*6*/propName: string;
//// }
////
//// var v: class2;
//// v./*7*/propName;
//// v./*8*/doStuff();
goTo.marker("1");
verify.referencesCountIs(1);
goTo.marker("2");
verify.referencesCountIs(3);
goTo.marker("3");
verify.referencesCountIs(3);
goTo.marker("4");
verify.referencesCountIs(3);
goTo.marker("5");
verify.referencesCountIs(3);
goTo.marker("6");
verify.referencesCountIs(4);
goTo.marker("7");
verify.referencesCountIs(4);
goTo.marker("8");
verify.referencesCountIs(3);

View File

@@ -0,0 +1,27 @@
/// <reference path='fourslash.ts'/>
//// interface C extends D {
//// /*0*/propD: number;
//// }
//// interface D extends C {
//// /*1*/propD: string;
//// /*3*/propC: number;
//// }
//// var d: D;
//// d./*2*/propD;
//// d./*4*/propC;
goTo.marker("0");
verify.referencesCountIs(3);
goTo.marker("1");
verify.referencesCountIs(3);
goTo.marker("2");
verify.referencesCountIs(3);
goTo.marker("3");
verify.referencesCountIs(2);
goTo.marker("4");
verify.referencesCountIs(2);

View File

@@ -0,0 +1,21 @@
/// <reference path='fourslash.ts'/>
//// class D extends C {
//// /*0*/prop1: string;
//// }
////
//// class C extends D {
//// /*1*/prop1: string;
//// }
////
//// var c: C;
//// c./*2*/prop1;
goTo.marker("0");
verify.referencesCountIs(1);
goTo.marker("1");
verify.referencesCountIs(2)
goTo.marker("2");
verify.referencesCountIs(2)

View File

@@ -0,0 +1,10 @@
/// <reference path='fourslash.ts' />
////import [|a|] from "module";
////export { [|a|] };
let ranges = test.ranges()
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,10 @@
/// <reference path='fourslash.ts' />
////import [|foo|] from 'bar';
////const bar = { [|foo|] };
let ranges = test.ranges()
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,10 @@
/// <reference path='fourslash.ts' />
////import * as [|foo|] from 'bar';
////const bar = { [|foo|] };
let ranges = test.ranges()
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,18 @@
/// <reference path='fourslash.ts' />
////declare namespace N {
//// export var x: number;
////}
////declare module "mod" {
//// export = N;
////}
////declare module "test" {
//// import * as [|N|] from "mod";
//// export { [|N|] }; // Renaming N here would rename
////}
let ranges = test.ranges()
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,12 @@
/// <reference path='fourslash.ts' />
////import [|e|] = require("mod4");
////[|e|];
////a = { [|e|] };
////export { [|e|] };
let ranges = test.ranges()
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,15 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// [|propName|]: string;
//// }
////
//// var v: class1;
//// v.[|propName|];
const ranges = test.ranges();
verify.assertHasRanges(ranges);
for (const range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,15 @@
/// <reference path='fourslash.ts'/>
//// class class1 extends class1 {
//// [|doStuff|]() { }
//// }
////
//// var v: class1;
//// v.[|doStuff|]();
let ranges = test.ranges();
verify.assertHasRanges(ranges);
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,15 @@
/// <reference path='fourslash.ts'/>
//// interface interface1 extends interface1 {
//// [|propName|]: string;
//// }
////
//// var v: interface1;
//// v.[|propName|];
let ranges = test.ranges();
verify.assertHasRanges(ranges);
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,15 @@
/// <reference path='fourslash.ts'/>
//// interface interface1 extends interface1 {
//// [|doStuff|](): string;
//// }
////
//// var v: interface1;
//// v.[|doStuff|]();
let ranges = test.ranges();
verify.assertHasRanges(ranges);
for (let range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,17 @@
/// <reference path='fourslash.ts'/>
//// interface C extends D {
//// propC: number;
//// }
//// interface D extends C {
//// [|propD|]: string;
//// }
//// var d: D;
//// d.[|propD|];
const ranges = test.ranges();
verify.assertHasRanges(ranges);
for (const range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,17 @@
/// <reference path='fourslash.ts'/>
//// interface C extends D {
//// propD: number;
//// }
//// interface D extends C {
//// [|propC|]: number;
//// }
//// var d: D;
//// d.[|propC|];
const ranges = test.ranges();
verify.assertHasRanges(ranges);
for (const range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,19 @@
/// <reference path='fourslash.ts'/>
//// class C extends D {
//// [|prop1|]: string;
//// }
////
//// class D extends C {
//// prop1: string;
//// }
////
//// var c: C;
//// c.[|prop1|];
const ranges = test.ranges();
verify.assertHasRanges(ranges);
for (const range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}

View File

@@ -0,0 +1,19 @@
/// <reference path='fourslash.ts'/>
//// class C implements D {
//// [|prop1|]: string;
//// }
////
//// interface D extends C {
//// [|prop1|]: string;
//// }
////
//// var c: C;
//// c.[|prop1|];
const ranges = test.ranges();
verify.assertHasRanges(ranges);
for (const range of ranges) {
goTo.position(range.start);
verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false);
}