Fix #2929: relax the check for export= in ES6 if it is resulting from an ambient declaration

This commit is contained in:
Mohamed Hegazy 2015-04-27 13:46:45 -07:00
parent 2349a27f92
commit 992bbff5b1
23 changed files with 295 additions and 1 deletions

View File

@ -10689,7 +10689,7 @@ module ts {
}
checkExternalModuleExports(container);
if (node.isExportEquals) {
if (node.isExportEquals && !isInAmbientContext(node)) {
if (languageVersion >= ScriptTarget.ES6) {
// export assignment is deprecated in es6 or above
grammarErrorOnNode(node, Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_export_default_instead);

View File

@ -0,0 +1,13 @@
tests/cases/compiler/a.ts(3,1): error TS1203: Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead.
==== tests/cases/compiler/a.ts (1 errors) ====
var a = 10;
export = a; // Error: export = not allowed in ES6
~~~~~~~~~~~
!!! error TS1203: Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead.
==== tests/cases/compiler/b.ts (0 errors) ====
import * as a from "a";

View File

@ -0,0 +1,14 @@
//// [tests/cases/compiler/es6ExportAssignment2.ts] ////
//// [a.ts]
var a = 10;
export = a; // Error: export = not allowed in ES6
//// [b.ts]
import * as a from "a";
//// [a.js]
var a = 10;
//// [b.js]

View File

@ -0,0 +1,12 @@
//// [tests/cases/compiler/es6ExportAssignment3.ts] ////
//// [a.d.ts]
declare var a: number;
export = a; // OK, in ambient context
//// [b.ts]
import * as a from "a";
//// [b.js]

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/a.d.ts ===
declare var a: number;
>a : Symbol(a, Decl(a.d.ts, 1, 11))
export = a; // OK, in ambient context
>a : Symbol(a, Decl(a.d.ts, 1, 11))
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : Symbol(a, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/a.d.ts ===
declare var a: number;
>a : number
export = a; // OK, in ambient context
>a : number
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : number

View File

@ -0,0 +1,14 @@
//// [tests/cases/compiler/es6ExportAssignment4.ts] ////
//// [modules.d.ts]
declare module "a" {
var a: number;
export = a; // OK, in ambient context
}
//// [b.ts]
import * as a from "a";
//// [b.js]

View File

@ -0,0 +1,14 @@
=== tests/cases/compiler/modules.d.ts ===
declare module "a" {
var a: number;
>a : Symbol(a, Decl(modules.d.ts, 2, 7))
export = a; // OK, in ambient context
>a : Symbol(a, Decl(modules.d.ts, 2, 7))
}
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : Symbol(a, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,14 @@
=== tests/cases/compiler/modules.d.ts ===
declare module "a" {
var a: number;
>a : number
export = a; // OK, in ambient context
>a : number
}
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : number

View File

@ -0,0 +1,19 @@
//// [tests/cases/compiler/systemExportAssignment.ts] ////
//// [a.d.ts]
declare var a: number;
export = a; // OK, in ambient context
//// [b.ts]
import * as a from "a";
//// [b.js]
System.register([], function(exports_1) {
return {
setters:[],
execute: function() {
}
}
});

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/a.d.ts ===
declare var a: number;
>a : Symbol(a, Decl(a.d.ts, 1, 11))
export = a; // OK, in ambient context
>a : Symbol(a, Decl(a.d.ts, 1, 11))
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : Symbol(a, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/a.d.ts ===
declare var a: number;
>a : number
export = a; // OK, in ambient context
>a : number
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : number

View File

@ -0,0 +1,13 @@
tests/cases/compiler/a.ts(3,1): error TS1218: Export assignment is not supported when '--module' flag is 'system'.
==== tests/cases/compiler/a.ts (1 errors) ====
var a = 10;
export = a; // Error: export = not allowed in ES6
~~~~~~~~~~~
!!! error TS1218: Export assignment is not supported when '--module' flag is 'system'.
==== tests/cases/compiler/b.ts (0 errors) ====
import * as a from "a";

View File

@ -0,0 +1,29 @@
//// [tests/cases/compiler/systemExportAssignment2.ts] ////
//// [a.ts]
var a = 10;
export = a; // Error: export = not allowed in ES6
//// [b.ts]
import * as a from "a";
//// [a.js]
System.register([], function(exports_1) {
var a;
return {
setters:[],
execute: function() {
a = 10;
}
}
});
//// [b.js]
System.register([], function(exports_1) {
return {
setters:[],
execute: function() {
}
}
});

View File

@ -0,0 +1,21 @@
//// [tests/cases/compiler/systemExportAssignment3.ts] ////
//// [modules.d.ts]
declare module "a" {
var a: number;
export = a; // OK, in ambient context
}
//// [b.ts]
import * as a from "a";
//// [b.js]
System.register([], function(exports_1) {
return {
setters:[],
execute: function() {
}
}
});

View File

@ -0,0 +1,14 @@
=== tests/cases/compiler/modules.d.ts ===
declare module "a" {
var a: number;
>a : Symbol(a, Decl(modules.d.ts, 2, 7))
export = a; // OK, in ambient context
>a : Symbol(a, Decl(modules.d.ts, 2, 7))
}
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : Symbol(a, Decl(b.ts, 0, 6))

View File

@ -0,0 +1,14 @@
=== tests/cases/compiler/modules.d.ts ===
declare module "a" {
var a: number;
>a : number
export = a; // OK, in ambient context
>a : number
}
=== tests/cases/compiler/b.ts ===
import * as a from "a";
>a : number

View File

@ -0,0 +1,8 @@
// @target: es6
// @filename: a.ts
var a = 10;
export = a; // Error: export = not allowed in ES6
// @filename: b.ts
import * as a from "a";

View File

@ -0,0 +1,8 @@
// @target: es6
// @filename: a.d.ts
declare var a: number;
export = a; // OK, in ambient context
// @filename: b.ts
import * as a from "a";

View File

@ -0,0 +1,10 @@
// @target: es6
// @filename: modules.d.ts
declare module "a" {
var a: number;
export = a; // OK, in ambient context
}
// @filename: b.ts
import * as a from "a";

View File

@ -0,0 +1,9 @@
// @target: es5
// @module: system
// @filename: a.d.ts
declare var a: number;
export = a; // OK, in ambient context
// @filename: b.ts
import * as a from "a";

View File

@ -0,0 +1,9 @@
// @target: es5
// @module: system
// @filename: a.ts
var a = 10;
export = a; // Error: export = not allowed in ES6
// @filename: b.ts
import * as a from "a";

View File

@ -0,0 +1,11 @@
// @target: es5
// @module: system
// @filename: modules.d.ts
declare module "a" {
var a: number;
export = a; // OK, in ambient context
}
// @filename: b.ts
import * as a from "a";