Skip to content

Commit aec8d96

Browse files
Merge pull request microsoft#1160 from Microsoft/weDontNeedNoTemplateStringsArrayPreEs6
Default to 'unknown' for the template strings array type in pre-ES6 targets.
2 parents c8412c6 + 5646743 commit aec8d96

14 files changed

Lines changed: 129 additions & 12 deletions

src/compiler/checker.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9102,7 +9102,12 @@ module ts {
91029102
globalNumberType = getGlobalType("Number");
91039103
globalBooleanType = getGlobalType("Boolean");
91049104
globalRegExpType = getGlobalType("RegExp");
9105-
globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
9105+
9106+
// If we're in ES6 mode, load the TemplateStringsArray.
9107+
// Otherwise, default to 'unknown' for the purposes of type checking in LS scenarios.
9108+
globalTemplateStringsArrayType = compilerOptions.target >= ScriptTarget.ES6
9109+
? getGlobalType("TemplateStringsArray")
9110+
: unknownType;
91069111
}
91079112

91089113
initializeTypeChecker();

src/harness/harness.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
/// <reference path='..\services\services.ts' />
1717
/// <reference path='..\services\shims.ts' />
18+
/// <reference path='..\compiler\core.ts' />
1819
/// <reference path='..\compiler\sys.ts' />
1920
/// <reference path='external\mocha.d.ts'/>
2021
/// <reference path='external\chai.d.ts'/>
@@ -1002,8 +1003,12 @@ module Harness {
10021003
assert.equal(markedErrorCount, fileErrors.length, 'count of errors in ' + inputFile.unitName);
10031004
});
10041005

1006+
var numLibraryDiagnostics = ts.countWhere(diagnostics, diagnostic => {
1007+
return diagnostic.filename && isLibraryFile(diagnostic.filename);
1008+
});
1009+
10051010
// Verify we didn't miss any errors in total
1006-
assert.equal(totalErrorsReported, diagnostics.length, 'total number of errors');
1011+
assert.equal(totalErrorsReported + numLibraryDiagnostics, diagnostics.length, 'total number of errors');
10071012

10081013
return minimalDiagnosticsToString(diagnostics) +
10091014
sys.newLine + sys.newLine + outputLines.join('\r\n');

tests/baselines/reference/noDefaultLib.errors.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
error TS2318: Cannot find global type 'Boolean'.
22
error TS2318: Cannot find global type 'IArguments'.
3-
error TS2318: Cannot find global type 'TemplateStringsArray'.
43
tests/cases/compiler/noDefaultLib.ts(4,11): error TS2317: Global type 'Array' must have 1 type parameter(s).
54

65

76
!!! error TS2318: Cannot find global type 'Boolean'.
87
!!! error TS2318: Cannot find global type 'IArguments'.
9-
!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
108
==== tests/cases/compiler/noDefaultLib.ts (1 errors) ====
119
/// <reference no-default-lib="true"/>
1210
var x;

tests/baselines/reference/parser509698.errors.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
66
error TS2318: Cannot find global type 'Object'.
77
error TS2318: Cannot find global type 'RegExp'.
88
error TS2318: Cannot find global type 'String'.
9-
error TS2318: Cannot find global type 'TemplateStringsArray'.
109

1110

1211
!!! error TS2318: Cannot find global type 'Array'.
@@ -17,7 +16,6 @@ error TS2318: Cannot find global type 'TemplateStringsArray'.
1716
!!! error TS2318: Cannot find global type 'Object'.
1817
!!! error TS2318: Cannot find global type 'RegExp'.
1918
!!! error TS2318: Cannot find global type 'String'.
20-
!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
2119
==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509698.ts (0 errors) ====
2220
/// <style requireSemi="on" />
2321
/// <reference no-default-lib="true"/>

tests/baselines/reference/project/noDefaultLib/amd/noDefaultLib.errors.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
66
error TS2318: Cannot find global type 'Object'.
77
error TS2318: Cannot find global type 'RegExp'.
88
error TS2318: Cannot find global type 'String'.
9-
error TS2318: Cannot find global type 'TemplateStringsArray'.
109
test.ts(3,8): error TS2304: Cannot find name 'Array'.
1110

1211

@@ -18,7 +17,6 @@ test.ts(3,8): error TS2304: Cannot find name 'Array'.
1817
!!! error TS2318: Cannot find global type 'Object'.
1918
!!! error TS2318: Cannot find global type 'RegExp'.
2019
!!! error TS2318: Cannot find global type 'String'.
21-
!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
2220
==== test.ts (1 errors) ====
2321
/// <reference no-default-lib="true"/>
2422

tests/baselines/reference/project/noDefaultLib/node/noDefaultLib.errors.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
66
error TS2318: Cannot find global type 'Object'.
77
error TS2318: Cannot find global type 'RegExp'.
88
error TS2318: Cannot find global type 'String'.
9-
error TS2318: Cannot find global type 'TemplateStringsArray'.
109
test.ts(3,8): error TS2304: Cannot find name 'Array'.
1110

1211

@@ -18,7 +17,6 @@ test.ts(3,8): error TS2304: Cannot find name 'Array'.
1817
!!! error TS2318: Cannot find global type 'Object'.
1918
!!! error TS2318: Cannot find global type 'RegExp'.
2019
!!! error TS2318: Cannot find global type 'String'.
21-
!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
2220
==== test.ts (1 errors) ====
2321
/// <reference no-default-lib="true"/>
2422

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(10,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
2+
lib.d.ts(502,11): error TS2300: Duplicate identifier 'TemplateStringsArray'.
3+
tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'.
4+
tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
5+
Property 'raw' is missing in type '{ [x: number]: undefined; }'.
6+
7+
8+
==== tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts (3 errors) ====
9+
10+
class TemplateStringsArray {
11+
~~~~~~~~~~~~~~~~~~~~
12+
!!! error TS2300: Duplicate identifier 'TemplateStringsArray'.
13+
}
14+
15+
function f(x: TemplateStringsArray, y: number, z: number) {
16+
}
17+
18+
f({}, 10, 10);
19+
~~
20+
!!! error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
21+
!!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'.
22+
23+
f `abcdef${ 1234 }${ 5678 }ghijkl`;
24+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25+
!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(7,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
2+
tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(5,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
3+
Property 'raw' is missing in type '{ [x: number]: undefined; }'.
4+
5+
6+
==== tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts (2 errors) ====
7+
8+
function f(x: TemplateStringsArray, y: number, z: number) {
9+
}
10+
11+
f({}, 10, 10);
12+
~~
13+
!!! error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
14+
!!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'.
15+
16+
f `abcdef${ 1234 }${ 5678 }ghijkl`;
17+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18+
!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
lib.d.ts(502,11): error TS2300: Duplicate identifier 'TemplateStringsArray'.
2+
tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'.
3+
tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
4+
Property 'raw' is missing in type '{ [x: number]: undefined; }'.
5+
6+
7+
==== tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts (2 errors) ====
8+
9+
class TemplateStringsArray {
10+
~~~~~~~~~~~~~~~~~~~~
11+
!!! error TS2300: Duplicate identifier 'TemplateStringsArray'.
12+
}
13+
14+
function f(x: TemplateStringsArray, y: number, z: number) {
15+
}
16+
17+
f({}, 10, 10);
18+
~~
19+
!!! error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
20+
!!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'.
21+
22+
f `abcdef${ 1234 }${ 5678 }ghijkl`;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//// [templateStringsArrayTypeRedefinedInES6Mode.ts]
2+
3+
class TemplateStringsArray {
4+
}
5+
6+
function f(x: TemplateStringsArray, y: number, z: number) {
7+
}
8+
9+
f({}, 10, 10);
10+
11+
f `abcdef${ 1234 }${ 5678 }ghijkl`;
12+
13+
//// [templateStringsArrayTypeRedefinedInES6Mode.js]
14+
var TemplateStringsArray = (function () {
15+
function TemplateStringsArray() {
16+
}
17+
return TemplateStringsArray;
18+
})();
19+
function f(x, y, z) {
20+
}
21+
f({}, 10, 10);
22+
f `abcdef${1234}${5678}ghijkl`;

0 commit comments

Comments
 (0)