From cb2be44d0236fe7a75a4580e83efa8075c5a5150 Mon Sep 17 00:00:00 2001 From: kingwl <805037171@163.com> Date: Tue, 17 Oct 2017 10:48:21 +0800 Subject: [PATCH 1/9] fix export class declare with name object targeting es5 (#17494) --- src/compiler/checker.ts | 12 ++++++++++ src/compiler/diagnosticMessages.json | 5 ++++ .../es6modulekindExportClassNameWithObject.js | 11 +++++++++ ...odulekindExportClassNameWithObject.symbols | 4 ++++ ...6modulekindExportClassNameWithObject.types | 4 ++++ ...nextmodulekindExportClassNameWithObject.js | 11 +++++++++ ...odulekindExportClassNameWithObject.symbols | 4 ++++ ...tmodulekindExportClassNameWithObject.types | 4 ++++ .../exportAmbientClassNameWithObject.js | 7 ++++++ .../exportAmbientClassNameWithObject.symbols | 4 ++++ .../exportAmbientClassNameWithObject.types | 4 ++++ .../exportClassNameWithObjectAMD.errors.txt | 8 +++++++ .../reference/exportClassNameWithObjectAMD.js | 15 ++++++++++++ .../exportClassNameWithObjectAMD.symbols | 4 ++++ .../exportClassNameWithObjectAMD.types | 4 ++++ ...portClassNameWithObjectCommonJS.errors.txt | 8 +++++++ .../exportClassNameWithObjectCommonJS.js | 13 +++++++++++ .../exportClassNameWithObjectCommonJS.symbols | 4 ++++ .../exportClassNameWithObjectCommonJS.types | 4 ++++ ...exportClassNameWithObjectSystem.errors.txt | 8 +++++++ .../exportClassNameWithObjectSystem.js | 21 +++++++++++++++++ .../exportClassNameWithObjectSystem.symbols | 4 ++++ .../exportClassNameWithObjectSystem.types | 4 ++++ .../exportClassNameWithObjectUMD.errors.txt | 8 +++++++ .../reference/exportClassNameWithObjectUMD.js | 23 +++++++++++++++++++ .../exportClassNameWithObjectUMD.symbols | 4 ++++ .../exportClassNameWithObjectUMD.types | 4 ++++ ...xportDefaultClassNameWithObject.errors.txt | 8 +++++++ .../exportDefaultClassNameWithObject.js | 13 +++++++++++ .../exportDefaultClassNameWithObject.symbols | 4 ++++ .../exportDefaultClassNameWithObject.types | 4 ++++ .../es6modulekindExportClassNameWithObject.ts | 3 +++ ...nextmodulekindExportClassNameWithObject.ts | 3 +++ .../exportAmbientClassNameWithObject.ts | 2 ++ .../exportClassNameWithObjectAMD.ts | 3 +++ .../exportClassNameWithObjectCommonJS.ts | 3 +++ .../exportClassNameWithObjectSystem.ts | 3 +++ .../exportClassNameWithObjectUMD.ts | 3 +++ .../exportDefaultClassNameWithObject.ts | 2 ++ 39 files changed, 257 insertions(+) create mode 100644 tests/baselines/reference/es6modulekindExportClassNameWithObject.js create mode 100644 tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols create mode 100644 tests/baselines/reference/es6modulekindExportClassNameWithObject.types create mode 100644 tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js create mode 100644 tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols create mode 100644 tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types create mode 100644 tests/baselines/reference/exportAmbientClassNameWithObject.js create mode 100644 tests/baselines/reference/exportAmbientClassNameWithObject.symbols create mode 100644 tests/baselines/reference/exportAmbientClassNameWithObject.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.types create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.js create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.symbols create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.types create mode 100644 tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts create mode 100644 tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts create mode 100644 tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts create mode 100644 tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fb1f62ddaf..b138ce9ea7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24153,6 +24153,16 @@ namespace ts { } } + /** + * The name cannot be used as 'Object' of user defined types with special target. + */ + function checkClassNameCollisionWithObject(name: Identifier): void { + if (languageVersion === ScriptTarget.ES5 && name.escapedText === "Object" + && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext) { + error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494 + } + } + /** * Check each type parameter and check that type parameters have no duplicate type parameter declarations */ @@ -24279,8 +24289,10 @@ namespace ts { checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); + checkClassNameCollisionWithObject(node.name); } checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); + checkTypeParameters(node.typeParameters); checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfNode(node); const type = getDeclaredTypeOfSymbol(symbol); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index be96d3de07..f0bb5e5ed7 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2357,6 +2357,11 @@ "category": "Error", "code": 2724 }, + "Class name cannot be 'Object' when targeting ES5 with module {0}.": { + "category": "Error", + "code": 2725 + }, + "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", "code": 4000 diff --git a/tests/baselines/reference/es6modulekindExportClassNameWithObject.js b/tests/baselines/reference/es6modulekindExportClassNameWithObject.js new file mode 100644 index 0000000000..d5af2ffafa --- /dev/null +++ b/tests/baselines/reference/es6modulekindExportClassNameWithObject.js @@ -0,0 +1,11 @@ +//// [es6modulekindExportClassNameWithObject.ts] +export class Object {} + + +//// [es6modulekindExportClassNameWithObject.js] +var Object = /** @class */ (function () { + function Object() { + } + return Object; +}()); +export { Object }; diff --git a/tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols b/tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols new file mode 100644 index 0000000000..b05183ae93 --- /dev/null +++ b/tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts === +export class Object {} +>Object : Symbol(Object, Decl(es6modulekindExportClassNameWithObject.ts, 0, 0)) + diff --git a/tests/baselines/reference/es6modulekindExportClassNameWithObject.types b/tests/baselines/reference/es6modulekindExportClassNameWithObject.types new file mode 100644 index 0000000000..b0b9cd7f6a --- /dev/null +++ b/tests/baselines/reference/es6modulekindExportClassNameWithObject.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts === +export class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js new file mode 100644 index 0000000000..e56b6ad8f1 --- /dev/null +++ b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js @@ -0,0 +1,11 @@ +//// [exnextmodulekindExportClassNameWithObject.ts] +export class Object {} + + +//// [exnextmodulekindExportClassNameWithObject.js] +var Object = /** @class */ (function () { + function Object() { + } + return Object; +}()); +export { Object }; diff --git a/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols new file mode 100644 index 0000000000..2bc0455e16 --- /dev/null +++ b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts === +export class Object {} +>Object : Symbol(Object, Decl(exnextmodulekindExportClassNameWithObject.ts, 0, 0)) + diff --git a/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types new file mode 100644 index 0000000000..1fbe924a4a --- /dev/null +++ b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts === +export class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exportAmbientClassNameWithObject.js b/tests/baselines/reference/exportAmbientClassNameWithObject.js new file mode 100644 index 0000000000..fdad4c7818 --- /dev/null +++ b/tests/baselines/reference/exportAmbientClassNameWithObject.js @@ -0,0 +1,7 @@ +//// [exportAmbientClassNameWithObject.ts] +export declare class Object {} + + +//// [exportAmbientClassNameWithObject.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tests/baselines/reference/exportAmbientClassNameWithObject.symbols b/tests/baselines/reference/exportAmbientClassNameWithObject.symbols new file mode 100644 index 0000000000..6287c91780 --- /dev/null +++ b/tests/baselines/reference/exportAmbientClassNameWithObject.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts === +export declare class Object {} +>Object : Symbol(Object, Decl(exportAmbientClassNameWithObject.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportAmbientClassNameWithObject.types b/tests/baselines/reference/exportAmbientClassNameWithObject.types new file mode 100644 index 0000000000..e85e4eb05d --- /dev/null +++ b/tests/baselines/reference/exportAmbientClassNameWithObject.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts === +export declare class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt new file mode 100644 index 0000000000..781a010abb --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. + \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.js b/tests/baselines/reference/exportClassNameWithObjectAMD.js new file mode 100644 index 0000000000..e3403689cb --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.js @@ -0,0 +1,15 @@ +//// [exportClassNameWithObjectAMD.ts] +export class Object {} + + +//// [exportClassNameWithObjectAMD.js] +define(["require", "exports"], function (require, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var Object = /** @class */ (function () { + function Object() { + } + return Object; + }()); + exports.Object = Object; +}); diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.symbols b/tests/baselines/reference/exportClassNameWithObjectAMD.symbols new file mode 100644 index 0000000000..eadb0af0dd --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts === +export class Object {} +>Object : Symbol(Object, Decl(exportClassNameWithObjectAMD.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.types b/tests/baselines/reference/exportClassNameWithObjectAMD.types new file mode 100644 index 0000000000..7caeadb6e0 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts === +export class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt new file mode 100644 index 0000000000..84ffb7f0f8 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. + \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.js b/tests/baselines/reference/exportClassNameWithObjectCommonJS.js new file mode 100644 index 0000000000..b9e2522b1b --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.js @@ -0,0 +1,13 @@ +//// [exportClassNameWithObjectCommonJS.ts] +export class Object {} + + +//// [exportClassNameWithObjectCommonJS.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Object = /** @class */ (function () { + function Object() { + } + return Object; +}()); +exports.Object = Object; diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols b/tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols new file mode 100644 index 0000000000..025fa479fd --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts === +export class Object {} +>Object : Symbol(Object, Decl(exportClassNameWithObjectCommonJS.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.types b/tests/baselines/reference/exportClassNameWithObjectCommonJS.types new file mode 100644 index 0000000000..38ce8d61d9 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts === +export class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt new file mode 100644 index 0000000000..67a932524b --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module System. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module System. + \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.js b/tests/baselines/reference/exportClassNameWithObjectSystem.js new file mode 100644 index 0000000000..6bb9dadaac --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.js @@ -0,0 +1,21 @@ +//// [exportClassNameWithObjectSystem.ts] +export class Object {} + + +//// [exportClassNameWithObjectSystem.js] +System.register([], function (exports_1, context_1) { + "use strict"; + var __moduleName = context_1 && context_1.id; + var Object; + return { + setters: [], + execute: function () { + Object = /** @class */ (function () { + function Object() { + } + return Object; + }()); + exports_1("Object", Object); + } + }; +}); diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.symbols b/tests/baselines/reference/exportClassNameWithObjectSystem.symbols new file mode 100644 index 0000000000..5152c2aa63 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts === +export class Object {} +>Object : Symbol(Object, Decl(exportClassNameWithObjectSystem.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.types b/tests/baselines/reference/exportClassNameWithObjectSystem.types new file mode 100644 index 0000000000..5b6507fd94 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts === +export class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt new file mode 100644 index 0000000000..73cd319230 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. + \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.js b/tests/baselines/reference/exportClassNameWithObjectUMD.js new file mode 100644 index 0000000000..1447392c87 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.js @@ -0,0 +1,23 @@ +//// [exportClassNameWithObjectUMD.ts] +export class Object {} + + +//// [exportClassNameWithObjectUMD.js] +(function (factory) { + if (typeof module === "object" && typeof module.exports === "object") { + var v = factory(require, exports); + if (v !== undefined) module.exports = v; + } + else if (typeof define === "function" && define.amd) { + define(["require", "exports"], factory); + } +})(function (require, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var Object = /** @class */ (function () { + function Object() { + } + return Object; + }()); + exports.Object = Object; +}); diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.symbols b/tests/baselines/reference/exportClassNameWithObjectUMD.symbols new file mode 100644 index 0000000000..05d3eeb8b0 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts === +export class Object {} +>Object : Symbol(Object, Decl(exportClassNameWithObjectUMD.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.types b/tests/baselines/reference/exportClassNameWithObjectUMD.types new file mode 100644 index 0000000000..42f0198cba --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts === +export class Object {} +>Object : Object + diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt new file mode 100644 index 0000000000..7be181d956 --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts(1,22): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. + + +==== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts (1 errors) ==== + export default class Object {} + ~~~~~~ +!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. + \ No newline at end of file diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.js b/tests/baselines/reference/exportDefaultClassNameWithObject.js new file mode 100644 index 0000000000..f5a4ec74a6 --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.js @@ -0,0 +1,13 @@ +//// [exportDefaultClassNameWithObject.ts] +export default class Object {} + + +//// [exportDefaultClassNameWithObject.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Object = /** @class */ (function () { + function Object() { + } + return Object; +}()); +exports.default = Object; diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.symbols b/tests/baselines/reference/exportDefaultClassNameWithObject.symbols new file mode 100644 index 0000000000..3192dcf73e --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts === +export default class Object {} +>Object : Symbol(Object, Decl(exportDefaultClassNameWithObject.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.types b/tests/baselines/reference/exportDefaultClassNameWithObject.types new file mode 100644 index 0000000000..547164703d --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts === +export default class Object {} +>Object : Object + diff --git a/tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts b/tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts new file mode 100644 index 0000000000..40de8852ff --- /dev/null +++ b/tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts @@ -0,0 +1,3 @@ +// @target: ES5 +// @module: es2015 +export class Object {} diff --git a/tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts b/tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts new file mode 100644 index 0000000000..440bfe080d --- /dev/null +++ b/tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts @@ -0,0 +1,3 @@ +// @target: ES5 +// @module: esnext +export class Object {} diff --git a/tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts b/tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts new file mode 100644 index 0000000000..3262ecdd3a --- /dev/null +++ b/tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts @@ -0,0 +1,2 @@ +// @target: ES5 +export declare class Object {} diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts new file mode 100644 index 0000000000..529924b4a4 --- /dev/null +++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts @@ -0,0 +1,3 @@ +// @target: ES5 +// @module: amd +export class Object {} diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts new file mode 100644 index 0000000000..676e275dfb --- /dev/null +++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts @@ -0,0 +1,3 @@ +// @target: ES5 +// @module: commonjs +export class Object {} diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts new file mode 100644 index 0000000000..6d23d7e1e3 --- /dev/null +++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts @@ -0,0 +1,3 @@ +// @target: ES5 +// @module: system +export class Object {} diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts new file mode 100644 index 0000000000..d2cb221a06 --- /dev/null +++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts @@ -0,0 +1,3 @@ +// @target: ES5 +// @module: umd +export class Object {} diff --git a/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts b/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts new file mode 100644 index 0000000000..75a5a33ac0 --- /dev/null +++ b/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts @@ -0,0 +1,2 @@ +// @target: ES5 +export default class Object {} From d5239cdf6ae7d7b9d284bcb2427bac71527f5d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Thu, 24 May 2018 18:20:54 +0800 Subject: [PATCH 2/9] fix ambient context --- src/compiler/checker.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b138ce9ea7..abcfb35ff8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24289,7 +24289,9 @@ namespace ts { checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); - checkClassNameCollisionWithObject(node.name); + if (!(node.flags & NodeFlags.Ambient)) { + checkClassNameCollisionWithObject(node.name); + } } checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); checkTypeParameters(node.typeParameters); From 7f127de89e65eee31ddd4f69b2c1844f9f587ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Fri, 25 May 2018 09:36:16 +0800 Subject: [PATCH 3/9] remove invalid check --- src/compiler/checker.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index abcfb35ff8..12f85eb18b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24294,7 +24294,6 @@ namespace ts { } } checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); - checkTypeParameters(node.typeParameters); checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfNode(node); const type = getDeclaredTypeOfSymbol(symbol); From 5df00d29c78e607b7ca8cb8f08506c4233f8fa8b Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 24 May 2018 22:47:06 +0800 Subject: [PATCH 4/9] accept baseline --- .../reference/exportClassNameWithObjectAMD.errors.txt | 4 ++-- .../reference/exportClassNameWithObjectCommonJS.errors.txt | 4 ++-- .../reference/exportClassNameWithObjectSystem.errors.txt | 4 ++-- tests/baselines/reference/exportClassNameWithObjectSystem.js | 2 +- .../reference/exportClassNameWithObjectUMD.errors.txt | 4 ++-- .../reference/exportDefaultClassNameWithObject.errors.txt | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt index 781a010abb..32eb7a1e7d 100644 --- a/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. +tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module AMD. ==== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts (1 errors) ==== export class Object {} ~~~~~~ -!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. +!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module AMD. \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt index 84ffb7f0f8..de5b8d59ca 100644 --- a/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS. ==== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts (1 errors) ==== export class Object {} ~~~~~~ -!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS. \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt index 67a932524b..4b43001cc2 100644 --- a/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module System. +tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module System. ==== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts (1 errors) ==== export class Object {} ~~~~~~ -!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module System. +!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module System. \ No newline at end of file diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.js b/tests/baselines/reference/exportClassNameWithObjectSystem.js index 6bb9dadaac..54bbd95240 100644 --- a/tests/baselines/reference/exportClassNameWithObjectSystem.js +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.js @@ -4,9 +4,9 @@ export class Object {} //// [exportClassNameWithObjectSystem.js] System.register([], function (exports_1, context_1) { + var Object; "use strict"; var __moduleName = context_1 && context_1.id; - var Object; return { setters: [], execute: function () { diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt index 73cd319230..e292c473af 100644 --- a/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. +tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module UMD. ==== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts (1 errors) ==== export class Object {} ~~~~~~ -!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. +!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module UMD. \ No newline at end of file diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt index 7be181d956..da874bf2d4 100644 --- a/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts(1,22): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts(1,22): error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS. ==== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts (1 errors) ==== export default class Object {} ~~~~~~ -!!! error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS. \ No newline at end of file From 5e848f6efbd2d6c297b59ca7c12b93f67066e808 Mon Sep 17 00:00:00 2001 From: csigs Date: Fri, 25 May 2018 16:10:26 +0000 Subject: [PATCH 5/9] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 51 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 51 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 51 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 28 +++++++++- .../diagnosticMessages.generated.json.lcl | 51 +++++++++++++++++++ 5 files changed, 230 insertions(+), 2 deletions(-) diff --git a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl index 3607e3e848..e68b3b149e 100644 --- a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1008,6 +1008,15 @@ + + + + + + + + + @@ -1125,6 +1134,15 @@ + + + + + + + + + @@ -2538,6 +2556,12 @@ + + + + + + @@ -6564,6 +6588,15 @@ + + + + + + + + + @@ -6603,6 +6636,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl index d64721cd90..4d01ea1789 100644 --- a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1017,6 +1017,15 @@ + + + + + + + + + @@ -1134,6 +1143,15 @@ + + + + + + + + + @@ -2547,6 +2565,12 @@ + + + + + + @@ -6573,6 +6597,15 @@ + + + + + + + + + @@ -6612,6 +6645,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl index ea95d1bda8..e076be1b08 100644 --- a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1005,6 +1005,15 @@ + + + + + + + + + @@ -1122,6 +1131,15 @@ + + + + + + + + + @@ -2535,6 +2553,12 @@ + + + + + + @@ -6558,6 +6582,15 @@ + + + + + + + + + @@ -6597,6 +6630,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl index 7a76969651..56ea63d9e6 100644 --- a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1019,10 +1019,13 @@ - - + + + + + @@ -1143,6 +1146,12 @@ + + + + + + @@ -2556,6 +2565,12 @@ + + + + + + @@ -6585,6 +6600,9 @@ + + + @@ -6633,6 +6651,12 @@ + + + + + + diff --git a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl index d034fc6882..04e562b0fd 100644 --- a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1008,6 +1008,15 @@ + + + + + + + + + @@ -1125,6 +1134,15 @@ + + + + + + + + + @@ -2538,6 +2556,12 @@ + + + + + + @@ -6564,6 +6588,15 @@ + + + + + + + + + @@ -6603,6 +6636,24 @@ + + + + + + + + + + + + + + + + + + From 198722d46aba7d1d55cafe84a74368fe87475632 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 25 May 2018 12:10:19 -0700 Subject: [PATCH 6/9] Make configure prerelease script compile under strict null checks (#24417) --- scripts/configurePrerelease.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/configurePrerelease.ts b/scripts/configurePrerelease.ts index da1984c13e..2377b5d471 100644 --- a/scripts/configurePrerelease.ts +++ b/scripts/configurePrerelease.ts @@ -56,13 +56,13 @@ function updateTsFile(tsFilePath: string, tsFileContents: string, majorMinor: st const majorMinorRgx = /export const versionMajorMinor = "(\d+\.\d+)"/; const majorMinorMatch = majorMinorRgx.exec(tsFileContents); assert(majorMinorMatch !== null, `The file seems to no longer have a string matching '${majorMinorRgx}'.`); - const parsedMajorMinor = majorMinorMatch[1]; + const parsedMajorMinor = majorMinorMatch![1]; assert(parsedMajorMinor === majorMinor, `versionMajorMinor does not match. ${tsFilePath}: '${parsedMajorMinor}'; package.json: '${majorMinor}'`); const versionRgx = /export const version = `\$\{versionMajorMinor\}\.(\d)(-dev)?`;/; const patchMatch = versionRgx.exec(tsFileContents); assert(patchMatch !== null, "The file seems to no longer have a string matching " + versionRgx.toString()); - const parsedPatch = patchMatch[1]; + const parsedPatch = patchMatch![1]; if (parsedPatch !== patch) { throw new Error(`patch does not match. ${tsFilePath}: '${parsedPatch}; package.json: '${patch}'`); } @@ -74,7 +74,7 @@ function parsePackageJsonVersion(versionString: string): { majorMinor: string, p const versionRgx = /(\d+\.\d+)\.(\d+)($|\-)/; const match = versionString.match(versionRgx); assert(match !== null, "package.json 'version' should match " + versionRgx.toString()); - return { majorMinor: match[1], patch: match[2] }; + return { majorMinor: match![1], patch: match![2] }; } /** e.g. 0-dev.20170707 */ From 832893e55924bbbd4ea495beb8dcc5b76e5a3f3a Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 25 May 2018 14:54:53 -0700 Subject: [PATCH 7/9] Revert "Check detected npm path is existing" This reverts commit 1fda3a4165b83fb82b666bd15e601c73590b52ec. --- src/server/typingsInstaller/nodeTypingsInstaller.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/server/typingsInstaller/nodeTypingsInstaller.ts b/src/server/typingsInstaller/nodeTypingsInstaller.ts index 7132a93f3e..6de5d9e1e0 100644 --- a/src/server/typingsInstaller/nodeTypingsInstaller.ts +++ b/src/server/typingsInstaller/nodeTypingsInstaller.ts @@ -2,8 +2,7 @@ namespace ts.server.typingsInstaller { const fs: { - appendFileSync(file: string, content: string): void; - existsSync(path: string): boolean; + appendFileSync(file: string, content: string): void } = require("fs"); const path: { @@ -33,12 +32,11 @@ namespace ts.server.typingsInstaller { /** Used if `--npmLocation` is not passed. */ function getDefaultNPMLocation(processName: string) { if (path.basename(processName).indexOf("node") === 0) { - const npmPath = `"${path.join(path.dirname(process.argv[0]), "npm")}"`; - if (fs.existsSync(npmPath)) { - return npmPath; - } + return `"${path.join(path.dirname(process.argv[0]), "npm")}"`; + } + else { + return "npm"; } - return "npm"; } interface TypesRegistryFile { From 35c0aaa84dc8270c4230c8f803817525aa72fb86 Mon Sep 17 00:00:00 2001 From: csigs Date: Fri, 25 May 2018 22:10:40 +0000 Subject: [PATCH 8/9] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl index 56ea63d9e6..3688383b06 100644 --- a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1020,8 +1020,8 @@ - - + + @@ -1149,6 +1149,9 @@ + + + @@ -6648,12 +6651,18 @@ + + + + + + From 781884c90b4956522441bd16752a7d180a6a392a Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 25 May 2018 15:51:37 -0700 Subject: [PATCH 9/9] Accept baselines --- tests/baselines/reference/exportClassNameWithObjectSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.js b/tests/baselines/reference/exportClassNameWithObjectSystem.js index 54bbd95240..361f4d807d 100644 --- a/tests/baselines/reference/exportClassNameWithObjectSystem.js +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.js @@ -4,8 +4,8 @@ export class Object {} //// [exportClassNameWithObjectSystem.js] System.register([], function (exports_1, context_1) { - var Object; "use strict"; + var Object; var __moduleName = context_1 && context_1.id; return { setters: [],