diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9a41b4a89ae23..a857c8f60fda2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4950,6 +4950,7 @@ module ts { if (fullTypeCheck) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithArgumentsInGeneratedCode(node); if (program.getCompilerOptions().noImplicitAny && !node.type) { switch (node.kind) { @@ -5692,6 +5693,24 @@ module ts { } } + function checkCollistionWithRequireExportsInGeneratedCode(node: Node, name: Identifier) { + if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { + return; + } + + // Uninstantiated modules shouldnt do this check + if (node.kind === SyntaxKind.ModuleDeclaration && !isInstantiated(node)) { + return; + } + + // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent + var parent = node.kind === SyntaxKind.VariableDeclaration ? node.parent.parent : node.parent; + if (parent.kind === SyntaxKind.SourceFile && isExternalModule(parent)) { + // If the declaration happens to be in external module, report error that require and exports are reserved keywords + error(name, Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, name.text, name.text); + } + } + function checkVariableDeclaration(node: VariableDeclaration) { checkSourceElement(node.type); checkExportsOnMergedDeclarations(node); @@ -5719,6 +5738,7 @@ module ts { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); if (!useTypeFromValueDeclaration) { // TypeScript 1.0 spec (April 2014): 5.1 // Multiple declarations for the same variable name in the same declaration space are permitted, @@ -5988,6 +6008,7 @@ module ts { checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0); checkTypeParameters(node.typeParameters); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); var type = getDeclaredTypeOfSymbol(symbol); @@ -6203,6 +6224,7 @@ module ts { } checkTypeNameIsReserved(node.name, Diagnostics.Enum_name_cannot_be_0); checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var enumSymbol = getSymbolOfNode(node); var enumType = getDeclaredTypeOfSymbol(enumSymbol); @@ -6276,6 +6298,7 @@ module ts { function checkModuleDeclaration(node: ModuleDeclaration) { if (fullTypeCheck) { checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); if (symbol.flags & SymbolFlags.ValueModule && symbol.declarations.length > 1 && !isInAmbientContext(node)) { @@ -6310,6 +6333,7 @@ module ts { function checkImportDeclaration(node: ImportDeclaration) { checkCollisionWithCapturedThisVariable(node, node.name); + checkCollistionWithRequireExportsInGeneratedCode(node, node.name); var symbol = getSymbolOfNode(node); var target: Symbol; diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 14360f3931487..aa1b793f6acc7 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -253,6 +253,7 @@ module ts { Import_name_cannot_be_0: { code: 2438, category: DiagnosticCategory.Error, key: "Import name cannot be '{0}'" }, Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: DiagnosticCategory.Error, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: DiagnosticCategory.Error, key: "Import declaration conflicts with local declaration of '{0}'" }, + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: { code: 2441, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index adceb133a933d..eef8da8c8572d 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1004,6 +1004,11 @@ "category": "Error", "code": 2440 }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { + "category": "Error", + "code": 2441 + }, + "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.errors.txt b/tests/baselines/reference/collisionExportsRequireAndAlias.errors.txt new file mode 100644 index 0000000000000..2ed2ee5d10e1c --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAlias.errors.txt @@ -0,0 +1,20 @@ +==== tests/cases/compiler/collisionExportsRequireAndAlias_file2.ts (2 errors) ==== + import require = require('collisionExportsRequireAndAlias_file1'); // Error + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + import exports = require('collisionExportsRequireAndAlias_file3333'); // Error + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + export function foo() { + require.bar(); + } + export function foo2() { + exports.bar2(); + } +==== tests/cases/compiler/collisionExportsRequireAndAlias_file1.ts (0 errors) ==== + export function bar() { + } + +==== tests/cases/compiler/collisionExportsRequireAndAlias_file3333.ts (0 errors) ==== + export function bar2() { + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.js b/tests/baselines/reference/collisionExportsRequireAndAlias.js index 83f23accccf46..2e4210f49104d 100644 --- a/tests/baselines/reference/collisionExportsRequireAndAlias.js +++ b/tests/baselines/reference/collisionExportsRequireAndAlias.js @@ -1,23 +1,42 @@ -//// [collisionExportsRequireAndAlias.ts] -// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone - -////@module: amd -//// @Filename: collisionExportsRequireAndAlias_file1.ts -//export function bar() { -//} - -//// @Filename: collisionExportsRequireAndAlias_file3333.ts -//export function bar2() { -//} -//// @Filename: collisionExportsRequireAndAlias_file2.ts -//import require = require('collisionExportsRequireAndAlias_file1'); // Error -//import exports = require('collisionExportsRequireAndAlias_file3333'); // Error -//export function foo() { -// require.bar(); -//} -//export function foo2() { -// exports.bar2(); -//} +//// [tests/cases/compiler/collisionExportsRequireAndAlias.ts] //// -//// [collisionExportsRequireAndAlias.js] -// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone +//// [collisionExportsRequireAndAlias_file1.ts] +export function bar() { +} + +//// [collisionExportsRequireAndAlias_file3333.ts] +export function bar2() { +} +//// [collisionExportsRequireAndAlias_file2.ts] +import require = require('collisionExportsRequireAndAlias_file1'); // Error +import exports = require('collisionExportsRequireAndAlias_file3333'); // Error +export function foo() { + require.bar(); +} +export function foo2() { + exports.bar2(); +} + +//// [collisionExportsRequireAndAlias_file1.js] +define(["require", "exports"], function (require, exports) { + function bar() { + } + exports.bar = bar; +}); +//// [collisionExportsRequireAndAlias_file3333.js] +define(["require", "exports"], function (require, exports) { + function bar2() { + } + exports.bar2 = bar2; +}); +//// [collisionExportsRequireAndAlias_file2.js] +define(["require", "exports", 'collisionExportsRequireAndAlias_file1', 'collisionExportsRequireAndAlias_file3333'], function (require, exports, require, exports) { + function foo() { + require.bar(); + } + exports.foo = foo; + function foo2() { + exports.bar2(); + } + exports.foo2 = foo2; +}); diff --git a/tests/baselines/reference/collisionExportsRequireAndAlias.types b/tests/baselines/reference/collisionExportsRequireAndAlias.types deleted file mode 100644 index 0e13caf324713..0000000000000 --- a/tests/baselines/reference/collisionExportsRequireAndAlias.types +++ /dev/null @@ -1,21 +0,0 @@ -=== tests/cases/compiler/collisionExportsRequireAndAlias.ts === -// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone -No type information for this code. -No type information for this code.////@module: amd -No type information for this code.//// @Filename: collisionExportsRequireAndAlias_file1.ts -No type information for this code.//export function bar() { -No type information for this code.//} -No type information for this code. -No type information for this code.//// @Filename: collisionExportsRequireAndAlias_file3333.ts -No type information for this code.//export function bar2() { -No type information for this code.//} -No type information for this code.//// @Filename: collisionExportsRequireAndAlias_file2.ts -No type information for this code.//import require = require('collisionExportsRequireAndAlias_file1'); // Error -No type information for this code.//import exports = require('collisionExportsRequireAndAlias_file3333'); // Error -No type information for this code.//export function foo() { -No type information for this code.// require.bar(); -No type information for this code.//} -No type information for this code.//export function foo2() { -No type information for this code.// exports.bar2(); -No type information for this code.//} -No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientClass.js b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.js new file mode 100644 index 0000000000000..9f4106616a84b --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.js @@ -0,0 +1,50 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientClass.ts] //// + +//// [collisionExportsRequireAndAmbientClass_externalmodule.ts] +export declare class require { +} +export declare class exports { +} +declare module m1 { + class require { + } + class exports { + } +} +module m2 { + export declare class require { + } + export declare class exports { + } +} + +//// [collisionExportsRequireAndAmbientClass_globalFile.ts] +declare class require { +} +declare class exports { +} +declare module m3 { + class require { + } + class exports { + } +} +module m4 { + export declare class require { + } + export declare class exports { + } + var a = 10; +} + +//// [collisionExportsRequireAndAmbientClass_externalmodule.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientClass_globalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientClass.types b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.types new file mode 100644 index 0000000000000..8212c6ffc612e --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientClass.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientClass_externalmodule.ts === +export declare class require { +>require : require +} +export declare class exports { +>exports : exports +} +declare module m1 { +>m1 : typeof m1 + + class require { +>require : require + } + class exports { +>exports : exports + } +} +module m2 { +>m2 : typeof m2 + + export declare class require { +>require : require + } + export declare class exports { +>exports : exports + } +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientClass_globalFile.ts === +declare class require { +>require : require +} +declare class exports { +>exports : exports +} +declare module m3 { +>m3 : typeof m3 + + class require { +>require : require + } + class exports { +>exports : exports + } +} +module m4 { +>m4 : typeof m4 + + export declare class require { +>require : require + } + export declare class exports { +>exports : exports + } + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.js b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.js new file mode 100644 index 0000000000000..829f93e4fa775 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.js @@ -0,0 +1,72 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientEnum.ts] //// + +//// [collisionExportsRequireAndAmbientEnum_externalmodule.ts] +export declare enum require { + _thisVal1, + _thisVal2, +} +export declare enum exports { + _thisVal1, + _thisVal2, +} +declare module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m2 { + export declare enum require { + _thisVal1, + _thisVal2, + } + export declare enum exports { + _thisVal1, + _thisVal2, + } +} + +//// [collisionExportsRequireAndAmbientEnum_globalFile.ts] +declare enum require { + _thisVal1, + _thisVal2, +} +declare enum exports { + _thisVal1, + _thisVal2, +} +declare module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m4 { + export declare enum require { + _thisVal1, + _thisVal2, + } + export declare enum exports { + _thisVal1, + _thisVal2, + } +} + +//// [collisionExportsRequireAndAmbientEnum_externalmodule.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientEnum_globalFile.js] +var m4; +(function (m4) { +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.types b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.types new file mode 100644 index 0000000000000..3bc7a00063b95 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientEnum.types @@ -0,0 +1,127 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientEnum_externalmodule.ts === +export declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require +} +export declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports +} +declare module m1 { +>m1 : typeof m1 + + enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} +module m2 { +>m2 : typeof m2 + + export declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + export declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientEnum_globalFile.ts === +declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require +} +declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports +} +declare module m3 { +>m3 : typeof m3 + + enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} +module m4 { +>m4 : typeof m4 + + export declare enum require { +>require : require + + _thisVal1, +>_thisVal1 : require + + _thisVal2, +>_thisVal2 : require + } + export declare enum exports { +>exports : exports + + _thisVal1, +>_thisVal1 : exports + + _thisVal2, +>_thisVal2 : exports + } +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.js b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.js new file mode 100644 index 0000000000000..c1fb0ce163ac1 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.js @@ -0,0 +1,22 @@ +//// [collisionExportsRequireAndAmbientFunction.ts] +export declare function exports(): number; + +export declare function require(): string[]; + +declare module m1 { + function exports(): string; + function require(): number; +} +module m2 { + export declare function exports(): string; + export declare function require(): string[]; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientFunction.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + var a = 10; + })(m2 || (m2 = {})); +}); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.types b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.types new file mode 100644 index 0000000000000..024bdff8ea3fd --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunction.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientFunction.ts === +export declare function exports(): number; +>exports : () => number + +export declare function require(): string[]; +>require : () => string[] + +declare module m1 { +>m1 : typeof m1 + + function exports(): string; +>exports : () => string + + function require(): number; +>require : () => number +} +module m2 { +>m2 : typeof m2 + + export declare function exports(): string; +>exports : () => string + + export declare function require(): string[]; +>require : () => string[] + + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.js b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.js new file mode 100644 index 0000000000000..44294f51cb5ee --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.js @@ -0,0 +1,18 @@ +//// [collisionExportsRequireAndAmbientFunctionInGlobalFile.ts] +declare function exports(): number; +declare function require(): string; +declare module m3 { + function exports(): string[]; + function require(): number[]; +} +module m4 { + export declare function exports(): string; + export declare function require(): string; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientFunctionInGlobalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.types b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.types new file mode 100644 index 0000000000000..0ecde7f429fa0 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientFunctionInGlobalFile.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientFunctionInGlobalFile.ts === +declare function exports(): number; +>exports : () => number + +declare function require(): string; +>require : () => string + +declare module m3 { +>m3 : typeof m3 + + function exports(): string[]; +>exports : () => string[] + + function require(): number[]; +>require : () => number[] +} +module m4 { +>m4 : typeof m4 + + export declare function exports(): string; +>exports : () => string + + export declare function require(): string; +>require : () => string + + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientModule.js b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.js new file mode 100644 index 0000000000000..4979e9e50ca3d --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.js @@ -0,0 +1,116 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientModule.ts] //// + +//// [collisionExportsRequireAndAmbientModule_externalmodule.ts] +export declare module require { + export interface I { + } + export class C { + } +} +export function foo(): require.I { + return null; +} +export declare module exports { + export interface I { + } + export class C { + } +} +export function foo2(): exports.I { + return null; +} +declare module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m2 { + export declare module require { + export interface I { + } + export class C { + } + } + export declare module exports { + export interface I { + } + export class C { + } + } + var a = 10; +} + +//// [collisionExportsRequireAndAmbientModule_globalFile.ts] +declare module require { + export interface I { + } + export class C { + } +} +declare module exports { + export interface I { + } + export class C { + } +} +declare module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m4 { + export declare module require { + export interface I { + } + export class C { + } + } + export declare module exports { + export interface I { + } + export class C { + } + } + + var a = 10; +} + + +//// [collisionExportsRequireAndAmbientModule_externalmodule.js] +define(["require", "exports"], function (require, exports) { + function foo() { + return null; + } + exports.foo = foo; + function foo2() { + return null; + } + exports.foo2 = foo2; + var m2; + (function (m2) { + var a = 10; + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientModule_globalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientModule.types b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.types new file mode 100644 index 0000000000000..7e41093daaa3a --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientModule.types @@ -0,0 +1,159 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientModule_externalmodule.ts === +export declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } +} +export function foo(): require.I { +>foo : () => require.I +>require : unknown +>I : require.I + + return null; +} +export declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } +} +export function foo2(): exports.I { +>foo2 : () => exports.I +>exports : unknown +>I : exports.I + + return null; +} +declare module m1 { +>m1 : typeof m1 + + module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } +} +module m2 { +>m2 : typeof m2 + + export declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + export declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } + var a = 10; +>a : number +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientModule_globalFile.ts === +declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } +} +declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } +} +declare module m3 { +>m3 : typeof m3 + + module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } +} +module m4 { +>m4 : typeof m4 + + export declare module require { +>require : typeof require + + export interface I { +>I : I + } + export class C { +>C : C + } + } + export declare module exports { +>exports : typeof exports + + export interface I { +>I : I + } + export class C { +>C : C + } + } + + var a = 10; +>a : number +} + diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientVar.js b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.js new file mode 100644 index 0000000000000..7a552251b158b --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.js @@ -0,0 +1,40 @@ +//// [tests/cases/compiler/collisionExportsRequireAndAmbientVar.ts] //// + +//// [collisionExportsRequireAndAmbientVar_externalmodule.ts] +export declare var exports: number; +export declare var require: string; +declare module m1 { + var exports: string; + var require: number; +} +module m2 { + export declare var exports: number; + export declare var require: string; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientVar_globalFile.ts] +declare var exports: number; +declare var require: string; +declare module m3 { + var exports: string; + var require: number; +} +module m4 { + export declare var exports: string; + export declare var require: number; + var a = 10; +} + +//// [collisionExportsRequireAndAmbientVar_externalmodule.js] +define(["require", "exports"], function (require, exports) { + var m2; + (function (m2) { + var a = 10; + })(m2 || (m2 = {})); +}); +//// [collisionExportsRequireAndAmbientVar_globalFile.js] +var m4; +(function (m4) { + var a = 10; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndAmbientVar.types b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.types new file mode 100644 index 0000000000000..1419df3504b0b --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndAmbientVar.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/collisionExportsRequireAndAmbientVar_externalmodule.ts === +export declare var exports: number; +>exports : number + +export declare var require: string; +>require : string + +declare module m1 { +>m1 : typeof m1 + + var exports: string; +>exports : string + + var require: number; +>require : number +} +module m2 { +>m2 : typeof m2 + + export declare var exports: number; +>exports : number + + export declare var require: string; +>require : string + + var a = 10; +>a : number +} + +=== tests/cases/compiler/collisionExportsRequireAndAmbientVar_globalFile.ts === +declare var exports: number; +>exports : number + +declare var require: string; +>require : string + +declare module m3 { +>m3 : typeof m3 + + var exports: string; +>exports : string + + var require: number; +>require : number +} +module m4 { +>m4 : typeof m4 + + export declare var exports: string; +>exports : string + + export declare var require: number; +>require : number + + var a = 10; +>a : number +} diff --git a/tests/baselines/reference/collisionExportsRequireAndClass.errors.txt b/tests/baselines/reference/collisionExportsRequireAndClass.errors.txt new file mode 100644 index 0000000000000..8fea5b475f2ef --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndClass.errors.txt @@ -0,0 +1,39 @@ +==== tests/cases/compiler/collisionExportsRequireAndClass_externalmodule.ts (2 errors) ==== + export class require { + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + } + export class exports { + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + } + module m1 { + class require { + } + class exports { + } + } + module m2 { + export class require { + } + export class exports { + } + } + +==== tests/cases/compiler/collisionExportsRequireAndClass_globalFile.ts (0 errors) ==== + class require { + } + class exports { + } + module m3 { + class require { + } + class exports { + } + } + module m4 { + export class require { + } + export class exports { + } + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndClass.js b/tests/baselines/reference/collisionExportsRequireAndClass.js index 7ec2975f918a3..f337d9a0a35a0 100644 --- a/tests/baselines/reference/collisionExportsRequireAndClass.js +++ b/tests/baselines/reference/collisionExportsRequireAndClass.js @@ -1,11 +1,42 @@ -//// [collisionExportsRequireAndClass.ts] +//// [tests/cases/compiler/collisionExportsRequireAndClass.ts] //// + +//// [collisionExportsRequireAndClass_externalmodule.ts] export class require { } export class exports { } +module m1 { + class require { + } + class exports { + } +} +module m2 { + export class require { + } + export class exports { + } +} +//// [collisionExportsRequireAndClass_globalFile.ts] +class require { +} +class exports { +} +module m3 { + class require { + } + class exports { + } +} +module m4 { + export class require { + } + export class exports { + } +} -//// [collisionExportsRequireAndClass.js] +//// [collisionExportsRequireAndClass_externalmodule.js] define(["require", "exports"], function (require, exports) { var require = (function () { function require() { @@ -19,4 +50,71 @@ define(["require", "exports"], function (require, exports) { return exports; })(); exports.exports = exports; + var m1; + (function (m1) { + var require = (function () { + function require() { + } + return require; + })(); + var exports = (function () { + function exports() { + } + return exports; + })(); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + var require = (function () { + function require() { + } + return require; + })(); + m2.require = require; + var exports = (function () { + function exports() { + } + return exports; + })(); + m2.exports = exports; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndClass_globalFile.js] +var require = (function () { + function require() { + } + return require; +})(); +var exports = (function () { + function exports() { + } + return exports; +})(); +var m3; +(function (m3) { + var require = (function () { + function require() { + } + return require; + })(); + var exports = (function () { + function exports() { + } + return exports; + })(); +})(m3 || (m3 = {})); +var m4; +(function (m4) { + var require = (function () { + function require() { + } + return require; + })(); + m4.require = require; + var exports = (function () { + function exports() { + } + return exports; + })(); + m4.exports = exports; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndClass.types b/tests/baselines/reference/collisionExportsRequireAndClass.types deleted file mode 100644 index 07debc401477c..0000000000000 --- a/tests/baselines/reference/collisionExportsRequireAndClass.types +++ /dev/null @@ -1,8 +0,0 @@ -=== tests/cases/compiler/collisionExportsRequireAndClass.ts === -export class require { ->require : require -} -export class exports { ->exports : exports -} - diff --git a/tests/baselines/reference/collisionExportsRequireAndEnum.errors.txt b/tests/baselines/reference/collisionExportsRequireAndEnum.errors.txt new file mode 100644 index 0000000000000..782e4958363e0 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndEnum.errors.txt @@ -0,0 +1,63 @@ +==== tests/cases/compiler/collisionExportsRequireAndEnum_externalmodule.ts (2 errors) ==== + export enum require { // Error + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + _thisVal1, + _thisVal2, + } + export enum exports { // Error + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + _thisVal1, + _thisVal2, + } + module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } + } + module m2 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } + } + +==== tests/cases/compiler/collisionExportsRequireAndEnum_globalFile.ts (0 errors) ==== + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } + module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } + } + module m4 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndEnum.js b/tests/baselines/reference/collisionExportsRequireAndEnum.js index f495b534805c8..be63fa3285165 100644 --- a/tests/baselines/reference/collisionExportsRequireAndEnum.js +++ b/tests/baselines/reference/collisionExportsRequireAndEnum.js @@ -1,4 +1,6 @@ -//// [collisionExportsRequireAndEnum.ts] +//// [tests/cases/compiler/collisionExportsRequireAndEnum.ts] //// + +//// [collisionExportsRequireAndEnum_externalmodule.ts] export enum require { // Error _thisVal1, _thisVal2, @@ -6,9 +8,59 @@ export enum require { // Error export enum exports { // Error _thisVal1, _thisVal2, +} +module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m2 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } +} + +//// [collisionExportsRequireAndEnum_globalFile.ts] +enum require { + _thisVal1, + _thisVal2, +} +enum exports { + _thisVal1, + _thisVal2, +} +module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m4 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } } -//// [collisionExportsRequireAndEnum.js] +//// [collisionExportsRequireAndEnum_externalmodule.js] define(["require", "exports"], function (require, exports) { (function (require) { require[require["_thisVal1"] = 0] = "_thisVal1"; @@ -20,4 +72,67 @@ define(["require", "exports"], function (require, exports) { exports[exports["_thisVal2"] = 1] = "_thisVal2"; })(exports.exports || (exports.exports = {})); var exports = exports.exports; + var m1; + (function (m1) { + var require; + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(require || (require = {})); + var exports; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(exports || (exports = {})); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(m2.require || (m2.require = {})); + var require = m2.require; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(m2.exports || (m2.exports = {})); + var exports = m2.exports; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndEnum_globalFile.js] +var require; +(function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; +})(require || (require = {})); +var exports; +(function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; +})(exports || (exports = {})); +var m3; +(function (m3) { + var require; + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(require || (require = {})); + var exports; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(exports || (exports = {})); +})(m3 || (m3 = {})); +var m4; +(function (m4) { + (function (require) { + require[require["_thisVal1"] = 0] = "_thisVal1"; + require[require["_thisVal2"] = 1] = "_thisVal2"; + })(m4.require || (m4.require = {})); + var require = m4.require; + (function (exports) { + exports[exports["_thisVal1"] = 0] = "_thisVal1"; + exports[exports["_thisVal2"] = 1] = "_thisVal2"; + })(m4.exports || (m4.exports = {})); + var exports = m4.exports; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndEnum.types b/tests/baselines/reference/collisionExportsRequireAndEnum.types deleted file mode 100644 index b347b72284b4c..0000000000000 --- a/tests/baselines/reference/collisionExportsRequireAndEnum.types +++ /dev/null @@ -1,19 +0,0 @@ -=== tests/cases/compiler/collisionExportsRequireAndEnum.ts === -export enum require { // Error ->require : require - - _thisVal1, ->_thisVal1 : require - - _thisVal2, ->_thisVal2 : require -} -export enum exports { // Error ->exports : exports - - _thisVal1, ->_thisVal1 : exports - - _thisVal2, ->_thisVal2 : exports -} diff --git a/tests/baselines/reference/collisionExportsRequireAndFunction.errors.txt b/tests/baselines/reference/collisionExportsRequireAndFunction.errors.txt new file mode 100644 index 0000000000000..49c6355c480e4 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunction.errors.txt @@ -0,0 +1,27 @@ +==== tests/cases/compiler/collisionExportsRequireAndFunction.ts (2 errors) ==== + export function exports() { + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + return 1; + } + export function require() { + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + return "require"; + } + module m1 { + function exports() { + return 1; + } + function require() { + return "require"; + } + } + module m2 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndFunction.js b/tests/baselines/reference/collisionExportsRequireAndFunction.js index a7d4ca2492e4f..e768609f3c683 100644 --- a/tests/baselines/reference/collisionExportsRequireAndFunction.js +++ b/tests/baselines/reference/collisionExportsRequireAndFunction.js @@ -5,7 +5,22 @@ export function exports() { export function require() { return "require"; } - +module m1 { + function exports() { + return 1; + } + function require() { + return "require"; + } +} +module m2 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } +} //// [collisionExportsRequireAndFunction.js] define(["require", "exports"], function (require, exports) { @@ -17,4 +32,24 @@ define(["require", "exports"], function (require, exports) { return "require"; } exports.require = require; + var m1; + (function (m1) { + function exports() { + return 1; + } + function require() { + return "require"; + } + })(m1 || (m1 = {})); + var m2; + (function (m2) { + function exports() { + return 1; + } + m2.exports = exports; + function require() { + return "require"; + } + m2.require = require; + })(m2 || (m2 = {})); }); diff --git a/tests/baselines/reference/collisionExportsRequireAndFunction.types b/tests/baselines/reference/collisionExportsRequireAndFunction.types deleted file mode 100644 index 8b90397c6fe5a..0000000000000 --- a/tests/baselines/reference/collisionExportsRequireAndFunction.types +++ /dev/null @@ -1,12 +0,0 @@ -=== tests/cases/compiler/collisionExportsRequireAndFunction.ts === -export function exports() { ->exports : () => number - - return 1; -} -export function require() { ->require : () => string - - return "require"; -} - diff --git a/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.js b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.js new file mode 100644 index 0000000000000..1865d1aceff74 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.js @@ -0,0 +1,51 @@ +//// [collisionExportsRequireAndFunctionInGlobalFile.ts] +function exports() { + return 1; +} +function require() { + return "require"; +} +module m3 { + function exports() { + return 1; + } + function require() { + return "require"; + } +} +module m4 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } +} + +//// [collisionExportsRequireAndFunctionInGlobalFile.js] +function exports() { + return 1; +} +function require() { + return "require"; +} +var m3; +(function (m3) { + function exports() { + return 1; + } + function require() { + return "require"; + } +})(m3 || (m3 = {})); +var m4; +(function (m4) { + function exports() { + return 1; + } + m4.exports = exports; + function require() { + return "require"; + } + m4.require = require; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.types b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.types new file mode 100644 index 0000000000000..ba804feb91a67 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndFunctionInGlobalFile.types @@ -0,0 +1,39 @@ +=== tests/cases/compiler/collisionExportsRequireAndFunctionInGlobalFile.ts === +function exports() { +>exports : () => number + + return 1; +} +function require() { +>require : () => string + + return "require"; +} +module m3 { +>m3 : typeof m3 + + function exports() { +>exports : () => number + + return 1; + } + function require() { +>require : () => string + + return "require"; + } +} +module m4 { +>m4 : typeof m4 + + export function exports() { +>exports : () => number + + return 1; + } + export function require() { +>require : () => string + + return "require"; + } +} diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.errors.txt b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.errors.txt new file mode 100644 index 0000000000000..9facc72da2379 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.errors.txt @@ -0,0 +1,27 @@ +==== tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts (2 errors) ==== + export module m { + export class c { + } + } + import exports = m.c; + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + import require = m.c; + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + new exports(); + new require(); + + module m1 { + import exports = m.c; + import require = m.c; + new exports(); + new require(); + } + + module m2 { + export import exports = m.c; + export import require = m.c; + new exports(); + new require(); + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.js b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.js new file mode 100644 index 0000000000000..a4c2a39c8f55e --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAlias.js @@ -0,0 +1,54 @@ +//// [collisionExportsRequireAndInternalModuleAlias.ts] +export module m { + export class c { + } +} +import exports = m.c; +import require = m.c; +new exports(); +new require(); + +module m1 { + import exports = m.c; + import require = m.c; + new exports(); + new require(); +} + +module m2 { + export import exports = m.c; + export import require = m.c; + new exports(); + new require(); +} + +//// [collisionExportsRequireAndInternalModuleAlias.js] +define(["require", "exports"], function (require, exports) { + (function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + })(exports.m || (exports.m = {})); + var m = exports.m; + var exports = m.c; + var require = m.c; + new exports(); + new require(); + var m1; + (function (m1) { + var exports = m.c; + var require = m.c; + new exports(); + new require(); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + m2.exports = m.c; + m2.require = m.c; + new m2.exports(); + new m2.require(); + })(m2 || (m2 = {})); +}); diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.js b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.js new file mode 100644 index 0000000000000..c6a6e234ee9a8 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.js @@ -0,0 +1,52 @@ +//// [collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts] +module mOfGloalFile { + export class c { + } +} +import exports = mOfGloalFile.c; +import require = mOfGloalFile.c; +new exports(); +new require(); + +module m1 { + import exports = mOfGloalFile.c; + import require = mOfGloalFile.c; + new exports(); + new require(); +} + +module m2 { + export import exports = mOfGloalFile.c; + export import require = mOfGloalFile.c; + new exports(); + new require(); +} + +//// [collisionExportsRequireAndInternalModuleAliasInGlobalFile.js] +var mOfGloalFile; +(function (mOfGloalFile) { + var c = (function () { + function c() { + } + return c; + })(); + mOfGloalFile.c = c; +})(mOfGloalFile || (mOfGloalFile = {})); +var exports = mOfGloalFile.c; +var require = mOfGloalFile.c; +new exports(); +new require(); +var m1; +(function (m1) { + var exports = mOfGloalFile.c; + var require = mOfGloalFile.c; + new exports(); + new require(); +})(m1 || (m1 = {})); +var m2; +(function (m2) { + m2.exports = mOfGloalFile.c; + m2.require = mOfGloalFile.c; + new m2.exports(); + new m2.require(); +})(m2 || (m2 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.types b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.types new file mode 100644 index 0000000000000..11001fe115f15 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndInternalModuleAliasInGlobalFile.types @@ -0,0 +1,69 @@ +=== tests/cases/compiler/collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts === +module mOfGloalFile { +>mOfGloalFile : typeof mOfGloalFile + + export class c { +>c : c + } +} +import exports = mOfGloalFile.c; +>exports : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + +import require = mOfGloalFile.c; +>require : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + +new exports(); +>new exports() : exports +>exports : typeof exports + +new require(); +>new require() : exports +>require : typeof exports + +module m1 { +>m1 : typeof m1 + + import exports = mOfGloalFile.c; +>exports : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + import require = mOfGloalFile.c; +>require : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + new exports(); +>new exports() : exports +>exports : typeof exports + + new require(); +>new require() : exports +>require : typeof exports +} + +module m2 { +>m2 : typeof m2 + + export import exports = mOfGloalFile.c; +>exports : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + export import require = mOfGloalFile.c; +>require : typeof exports +>mOfGloalFile : typeof mOfGloalFile +>c : exports + + new exports(); +>new exports() : exports +>exports : typeof exports + + new require(); +>new require() : exports +>require : typeof exports +} diff --git a/tests/baselines/reference/collisionExportsRequireAndModule.errors.txt b/tests/baselines/reference/collisionExportsRequireAndModule.errors.txt new file mode 100644 index 0000000000000..4f1f9c4cd4d4e --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndModule.errors.txt @@ -0,0 +1,94 @@ +==== tests/cases/compiler/collisionExportsRequireAndModule_externalmodule.ts (2 errors) ==== + export module require { + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + export interface I { + } + export class C { + } + } + export function foo(): require.I { + return null; + } + export module exports { + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + export interface I { + } + export class C { + } + } + export function foo2(): exports.I { + return null; + } + module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } + } + module m2 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } + } + +==== tests/cases/compiler/collisionExportsRequireAndModule_globalFile.ts (0 errors) ==== + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } + module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } + } + module m4 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndModule.js b/tests/baselines/reference/collisionExportsRequireAndModule.js index 88e53a922b017..76e170b18d17b 100644 --- a/tests/baselines/reference/collisionExportsRequireAndModule.js +++ b/tests/baselines/reference/collisionExportsRequireAndModule.js @@ -1,4 +1,6 @@ -//// [collisionExportsRequireAndModule.ts] +//// [tests/cases/compiler/collisionExportsRequireAndModule.ts] //// + +//// [collisionExportsRequireAndModule_externalmodule.ts] export module require { export interface I { } @@ -16,9 +18,80 @@ export module exports { } export function foo2(): exports.I { return null; -} +} +module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m2 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } +} -//// [collisionExportsRequireAndModule.js] +//// [collisionExportsRequireAndModule_globalFile.ts] +module require { + export interface I { + } + export class C { + } +} +module exports { + export interface I { + } + export class C { + } +} +module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m4 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } +} + + +//// [collisionExportsRequireAndModule_externalmodule.js] define(["require", "exports"], function (require, exports) { (function (require) { var C = (function () { @@ -46,4 +119,107 @@ define(["require", "exports"], function (require, exports) { return null; } exports.foo2 = foo2; + var m1; + (function (m1) { + var require; + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(require || (require = {})); + var exports; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(exports || (exports = {})); + })(m1 || (m1 = {})); + var m2; + (function (m2) { + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(m2.require || (m2.require = {})); + var require = m2.require; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(m2.exports || (m2.exports = {})); + var exports = m2.exports; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndModule_globalFile.js] +var require; +(function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; +})(require || (require = {})); +var exports; +(function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; +})(exports || (exports = {})); +var m3; +(function (m3) { + var require; + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(require || (require = {})); + var exports; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(exports || (exports = {})); +})(m3 || (m3 = {})); +var m4; +(function (m4) { + (function (require) { + var C = (function () { + function C() { + } + return C; + })(); + require.C = C; + })(m4.require || (m4.require = {})); + var require = m4.require; + (function (exports) { + var C = (function () { + function C() { + } + return C; + })(); + exports.C = C; + })(m4.exports || (m4.exports = {})); + var exports = m4.exports; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndModule.types b/tests/baselines/reference/collisionExportsRequireAndModule.types deleted file mode 100644 index c462a508d06c4..0000000000000 --- a/tests/baselines/reference/collisionExportsRequireAndModule.types +++ /dev/null @@ -1,35 +0,0 @@ -=== tests/cases/compiler/collisionExportsRequireAndModule.ts === -export module require { ->require : typeof require - - export interface I { ->I : I - } - export class C { ->C : C - } -} -export function foo(): require.I { ->foo : () => require.I ->require : unknown ->I : require.I - - return null; -} -export module exports { ->exports : typeof exports - - export interface I { ->I : I - } - export class C { ->C : C - } -} -export function foo2(): exports.I { ->foo2 : () => exports.I ->exports : unknown ->I : exports.I - - return null; -} diff --git a/tests/baselines/reference/collisionExportsRequireAndVar.errors.txt b/tests/baselines/reference/collisionExportsRequireAndVar.errors.txt new file mode 100644 index 0000000000000..d5106a0fe5078 --- /dev/null +++ b/tests/baselines/reference/collisionExportsRequireAndVar.errors.txt @@ -0,0 +1,29 @@ +==== tests/cases/compiler/collisionExportsRequireAndVar_externalmodule.ts (2 errors) ==== + export function foo() { + } + var exports = 1; + ~~~~~~~ +!!! Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of an external module. + var require = "require"; + ~~~~~~~ +!!! Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of an external module. + module m1 { + var exports = 0; + var require = "require"; + } + module m2 { + export var exports = 0; + export var require = "require"; + } + +==== tests/cases/compiler/collisionExportsRequireAndVar_globalFile.ts (0 errors) ==== + var exports = 0; + var require = "require"; + module m3 { + var exports = 0; + var require = "require"; + } + module m4 { + export var exports = 0; + export var require = "require"; + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionExportsRequireAndVar.js b/tests/baselines/reference/collisionExportsRequireAndVar.js index a760403856317..07c8827603ed7 100644 --- a/tests/baselines/reference/collisionExportsRequireAndVar.js +++ b/tests/baselines/reference/collisionExportsRequireAndVar.js @@ -1,15 +1,59 @@ -//// [collisionExportsRequireAndVar.ts] +//// [tests/cases/compiler/collisionExportsRequireAndVar.ts] //// + +//// [collisionExportsRequireAndVar_externalmodule.ts] export function foo() { } var exports = 1; var require = "require"; +module m1 { + var exports = 0; + var require = "require"; +} +module m2 { + export var exports = 0; + export var require = "require"; +} +//// [collisionExportsRequireAndVar_globalFile.ts] +var exports = 0; +var require = "require"; +module m3 { + var exports = 0; + var require = "require"; +} +module m4 { + export var exports = 0; + export var require = "require"; +} -//// [collisionExportsRequireAndVar.js] +//// [collisionExportsRequireAndVar_externalmodule.js] define(["require", "exports"], function (require, exports) { function foo() { } exports.foo = foo; var exports = 1; var require = "require"; + var m1; + (function (m1) { + var exports = 0; + var require = "require"; + })(m1 || (m1 = {})); + var m2; + (function (m2) { + m2.exports = 0; + m2.require = "require"; + })(m2 || (m2 = {})); }); +//// [collisionExportsRequireAndVar_globalFile.js] +var exports = 0; +var require = "require"; +var m3; +(function (m3) { + var exports = 0; + var require = "require"; +})(m3 || (m3 = {})); +var m4; +(function (m4) { + m4.exports = 0; + m4.require = "require"; +})(m4 || (m4 = {})); diff --git a/tests/baselines/reference/collisionExportsRequireAndVar.types b/tests/baselines/reference/collisionExportsRequireAndVar.types deleted file mode 100644 index 656c705aa232e..0000000000000 --- a/tests/baselines/reference/collisionExportsRequireAndVar.types +++ /dev/null @@ -1,10 +0,0 @@ -=== tests/cases/compiler/collisionExportsRequireAndVar.ts === -export function foo() { ->foo : () => void -} -var exports = 1; ->exports : number - -var require = "require"; ->require : string - diff --git a/tests/cases/compiler/collisionExportsRequireAndAlias.ts b/tests/cases/compiler/collisionExportsRequireAndAlias.ts index 4c249d83a0c50..b79da28f66bc3 100644 --- a/tests/cases/compiler/collisionExportsRequireAndAlias.ts +++ b/tests/cases/compiler/collisionExportsRequireAndAlias.ts @@ -1,19 +1,17 @@ -// TODO: re-enable, fails when run in the browser with full compiler suite, but not when run alone +//@module: amd +// @Filename: collisionExportsRequireAndAlias_file1.ts +export function bar() { +} -////@module: amd -//// @Filename: collisionExportsRequireAndAlias_file1.ts -//export function bar() { -//} - -//// @Filename: collisionExportsRequireAndAlias_file3333.ts -//export function bar2() { -//} -//// @Filename: collisionExportsRequireAndAlias_file2.ts -//import require = require('collisionExportsRequireAndAlias_file1'); // Error -//import exports = require('collisionExportsRequireAndAlias_file3333'); // Error -//export function foo() { -// require.bar(); -//} -//export function foo2() { -// exports.bar2(); -//} \ No newline at end of file +// @Filename: collisionExportsRequireAndAlias_file3333.ts +export function bar2() { +} +// @Filename: collisionExportsRequireAndAlias_file2.ts +import require = require('collisionExportsRequireAndAlias_file1'); // Error +import exports = require('collisionExportsRequireAndAlias_file3333'); // Error +export function foo() { + require.bar(); +} +export function foo2() { + exports.bar2(); +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndAmbientClass.ts b/tests/cases/compiler/collisionExportsRequireAndAmbientClass.ts new file mode 100644 index 0000000000000..563c834c79c3a --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndAmbientClass.ts @@ -0,0 +1,37 @@ +//@module: amd +//@filename: collisionExportsRequireAndAmbientClass_externalmodule.ts +export declare class require { +} +export declare class exports { +} +declare module m1 { + class require { + } + class exports { + } +} +module m2 { + export declare class require { + } + export declare class exports { + } +} + +//@filename: collisionExportsRequireAndAmbientClass_globalFile.ts +declare class require { +} +declare class exports { +} +declare module m3 { + class require { + } + class exports { + } +} +module m4 { + export declare class require { + } + export declare class exports { + } + var a = 10; +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndAmbientEnum.ts b/tests/cases/compiler/collisionExportsRequireAndAmbientEnum.ts new file mode 100644 index 0000000000000..5366d5511f98a --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndAmbientEnum.ts @@ -0,0 +1,60 @@ +//@module: amd +//@filename: collisionExportsRequireAndAmbientEnum_externalmodule.ts +export declare enum require { + _thisVal1, + _thisVal2, +} +export declare enum exports { + _thisVal1, + _thisVal2, +} +declare module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m2 { + export declare enum require { + _thisVal1, + _thisVal2, + } + export declare enum exports { + _thisVal1, + _thisVal2, + } +} + +//@filename: collisionExportsRequireAndAmbientEnum_globalFile.ts +declare enum require { + _thisVal1, + _thisVal2, +} +declare enum exports { + _thisVal1, + _thisVal2, +} +declare module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m4 { + export declare enum require { + _thisVal1, + _thisVal2, + } + export declare enum exports { + _thisVal1, + _thisVal2, + } +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndAmbientFunction.ts b/tests/cases/compiler/collisionExportsRequireAndAmbientFunction.ts new file mode 100644 index 0000000000000..caabb75971a97 --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndAmbientFunction.ts @@ -0,0 +1,14 @@ +//@module: amd +export declare function exports(): number; + +export declare function require(): string[]; + +declare module m1 { + function exports(): string; + function require(): number; +} +module m2 { + export declare function exports(): string; + export declare function require(): string[]; + var a = 10; +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndAmbientFunctionInGlobalFile.ts b/tests/cases/compiler/collisionExportsRequireAndAmbientFunctionInGlobalFile.ts new file mode 100644 index 0000000000000..2b3663f4d9eed --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndAmbientFunctionInGlobalFile.ts @@ -0,0 +1,11 @@ +declare function exports(): number; +declare function require(): string; +declare module m3 { + function exports(): string[]; + function require(): number[]; +} +module m4 { + export declare function exports(): string; + export declare function require(): string; + var a = 10; +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndAmbientModule.ts b/tests/cases/compiler/collisionExportsRequireAndAmbientModule.ts new file mode 100644 index 0000000000000..b94fcb0cc32df --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndAmbientModule.ts @@ -0,0 +1,93 @@ +//@module: amd +//@filename: collisionExportsRequireAndAmbientModule_externalmodule.ts +export declare module require { + export interface I { + } + export class C { + } +} +export function foo(): require.I { + return null; +} +export declare module exports { + export interface I { + } + export class C { + } +} +export function foo2(): exports.I { + return null; +} +declare module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m2 { + export declare module require { + export interface I { + } + export class C { + } + } + export declare module exports { + export interface I { + } + export class C { + } + } + var a = 10; +} + +//@filename: collisionExportsRequireAndAmbientModule_globalFile.ts +declare module require { + export interface I { + } + export class C { + } +} +declare module exports { + export interface I { + } + export class C { + } +} +declare module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m4 { + export declare module require { + export interface I { + } + export class C { + } + } + export declare module exports { + export interface I { + } + export class C { + } + } + + var a = 10; +} diff --git a/tests/cases/compiler/collisionExportsRequireAndAmbientVar.ts b/tests/cases/compiler/collisionExportsRequireAndAmbientVar.ts new file mode 100644 index 0000000000000..0e17603c92585 --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndAmbientVar.ts @@ -0,0 +1,26 @@ +//@module: amd +//@filename: collisionExportsRequireAndAmbientVar_externalmodule.ts +export declare var exports: number; +export declare var require: string; +declare module m1 { + var exports: string; + var require: number; +} +module m2 { + export declare var exports: number; + export declare var require: string; + var a = 10; +} + +//@filename: collisionExportsRequireAndAmbientVar_globalFile.ts +declare var exports: number; +declare var require: string; +declare module m3 { + var exports: string; + var require: number; +} +module m4 { + export declare var exports: string; + export declare var require: number; + var a = 10; +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndClass.ts b/tests/cases/compiler/collisionExportsRequireAndClass.ts index 73efb9cbe8925..0bc1e0e337ba0 100644 --- a/tests/cases/compiler/collisionExportsRequireAndClass.ts +++ b/tests/cases/compiler/collisionExportsRequireAndClass.ts @@ -1,5 +1,36 @@ //@module: amd +//@filename: collisionExportsRequireAndClass_externalmodule.ts export class require { } export class exports { } +module m1 { + class require { + } + class exports { + } +} +module m2 { + export class require { + } + export class exports { + } +} + +//@filename: collisionExportsRequireAndClass_globalFile.ts +class require { +} +class exports { +} +module m3 { + class require { + } + class exports { + } +} +module m4 { + export class require { + } + export class exports { + } +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndEnum.ts b/tests/cases/compiler/collisionExportsRequireAndEnum.ts index 936db765c1498..b8bb172748024 100644 --- a/tests/cases/compiler/collisionExportsRequireAndEnum.ts +++ b/tests/cases/compiler/collisionExportsRequireAndEnum.ts @@ -1,4 +1,5 @@ //@module: amd +//@filename: collisionExportsRequireAndEnum_externalmodule.ts export enum require { // Error _thisVal1, _thisVal2, @@ -6,4 +7,54 @@ export enum require { // Error export enum exports { // Error _thisVal1, _thisVal2, +} +module m1 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m2 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } +} + +//@filename: collisionExportsRequireAndEnum_globalFile.ts +enum require { + _thisVal1, + _thisVal2, +} +enum exports { + _thisVal1, + _thisVal2, +} +module m3 { + enum require { + _thisVal1, + _thisVal2, + } + enum exports { + _thisVal1, + _thisVal2, + } +} +module m4 { + export enum require { + _thisVal1, + _thisVal2, + } + export enum exports { + _thisVal1, + _thisVal2, + } } \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndFunction.ts b/tests/cases/compiler/collisionExportsRequireAndFunction.ts index 94aec04ff2c7a..185b0a4180569 100644 --- a/tests/cases/compiler/collisionExportsRequireAndFunction.ts +++ b/tests/cases/compiler/collisionExportsRequireAndFunction.ts @@ -5,3 +5,19 @@ export function exports() { export function require() { return "require"; } +module m1 { + function exports() { + return 1; + } + function require() { + return "require"; + } +} +module m2 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndFunctionInGlobalFile.ts b/tests/cases/compiler/collisionExportsRequireAndFunctionInGlobalFile.ts new file mode 100644 index 0000000000000..050887580f761 --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndFunctionInGlobalFile.ts @@ -0,0 +1,22 @@ +function exports() { + return 1; +} +function require() { + return "require"; +} +module m3 { + function exports() { + return 1; + } + function require() { + return "require"; + } +} +module m4 { + export function exports() { + return 1; + } + export function require() { + return "require"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts b/tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts new file mode 100644 index 0000000000000..e76fc572b7599 --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndInternalModuleAlias.ts @@ -0,0 +1,23 @@ +//@module: amd +export module m { + export class c { + } +} +import exports = m.c; +import require = m.c; +new exports(); +new require(); + +module m1 { + import exports = m.c; + import require = m.c; + new exports(); + new require(); +} + +module m2 { + export import exports = m.c; + export import require = m.c; + new exports(); + new require(); +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts b/tests/cases/compiler/collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts new file mode 100644 index 0000000000000..d76da86891e07 --- /dev/null +++ b/tests/cases/compiler/collisionExportsRequireAndInternalModuleAliasInGlobalFile.ts @@ -0,0 +1,22 @@ +module mOfGloalFile { + export class c { + } +} +import exports = mOfGloalFile.c; +import require = mOfGloalFile.c; +new exports(); +new require(); + +module m1 { + import exports = mOfGloalFile.c; + import require = mOfGloalFile.c; + new exports(); + new require(); +} + +module m2 { + export import exports = mOfGloalFile.c; + export import require = mOfGloalFile.c; + new exports(); + new require(); +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionExportsRequireAndModule.ts b/tests/cases/compiler/collisionExportsRequireAndModule.ts index c0254243234a3..dc79e15605cad 100644 --- a/tests/cases/compiler/collisionExportsRequireAndModule.ts +++ b/tests/cases/compiler/collisionExportsRequireAndModule.ts @@ -1,4 +1,5 @@ //@module: amd +//@filename: collisionExportsRequireAndModule_externalmodule.ts export module require { export interface I { } @@ -16,4 +17,74 @@ export module exports { } export function foo2(): exports.I { return null; -} \ No newline at end of file +} +module m1 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m2 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } +} + +//@filename: collisionExportsRequireAndModule_globalFile.ts +module require { + export interface I { + } + export class C { + } +} +module exports { + export interface I { + } + export class C { + } +} +module m3 { + module require { + export interface I { + } + export class C { + } + } + module exports { + export interface I { + } + export class C { + } + } +} +module m4 { + export module require { + export interface I { + } + export class C { + } + } + export module exports { + export interface I { + } + export class C { + } + } +} diff --git a/tests/cases/compiler/collisionExportsRequireAndVar.ts b/tests/cases/compiler/collisionExportsRequireAndVar.ts index da1000009fd51..af98b1a7d092d 100644 --- a/tests/cases/compiler/collisionExportsRequireAndVar.ts +++ b/tests/cases/compiler/collisionExportsRequireAndVar.ts @@ -1,5 +1,26 @@ //@module: amd +//@filename: collisionExportsRequireAndVar_externalmodule.ts export function foo() { } var exports = 1; var require = "require"; +module m1 { + var exports = 0; + var require = "require"; +} +module m2 { + export var exports = 0; + export var require = "require"; +} + +//@filename: collisionExportsRequireAndVar_globalFile.ts +var exports = 0; +var require = "require"; +module m3 { + var exports = 0; + var require = "require"; +} +module m4 { + export var exports = 0; + export var require = "require"; +} \ No newline at end of file