From eb0fc8921d8a10380d2814a9be650caf8b9891e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Tue, 3 Jul 2018 18:29:10 +0800 Subject: [PATCH 1/6] add related error span for default exports --- src/compiler/binder.ts | 6 +++++- src/compiler/checker.ts | 8 -------- src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/utilities.ts | 8 ++++++++ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index b571530c5d9d7..272bb00ce35b0 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -410,7 +410,11 @@ namespace ts { forEach(symbol.declarations, declaration => { file.bindDiagnostics.push(createDiagnosticForNode(getNameOfDeclaration(declaration) || declaration, message, getDisplayName(declaration))); }); - file.bindDiagnostics.push(createDiagnosticForNode(getNameOfDeclaration(node) || node, message, getDisplayName(node))); + const declarationName = getNameOfDeclaration(node) || node; + const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node)) + file.bindDiagnostics.push( + isDefaultExport ? addRelatedInfo( diag, createDiagnosticForNode(declarationName, Diagnostics.This_export_conflicts_with_the_first)) : diag + ); symbol = createSymbol(SymbolFlags.None, name); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3a19ca63b3f9b..46e13b85c9aef 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -710,14 +710,6 @@ namespace ts { } } - function addRelatedInfo(diagnostic: Diagnostic, ...relatedInformation: DiagnosticRelatedInformation[]) { - if (!diagnostic.relatedInformation) { - diagnostic.relatedInformation = []; - } - diagnostic.relatedInformation.push(...relatedInformation); - return diagnostic; - } - function error(location: Node | undefined, message: DiagnosticMessage, arg0?: string | number, arg1?: string | number, arg2?: string | number, arg3?: string | number): Diagnostic { const diagnostic = location ? createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 87d8297e74d5b..1fae9fc3fc1fc 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2409,6 +2409,10 @@ "category": "Error", "code": 2729 }, + "This export conflicts with the first.": { + "category": "Error", + "code": 2730 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index c5fa7d155d519..37e8ca08807a2 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -8108,4 +8108,12 @@ namespace ts { } export type Mutable = { -readonly [K in keyof T]: T[K] }; + + export function addRelatedInfo(diagnostic: T, ...relatedInformation: DiagnosticRelatedInformation[]): T { + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + diagnostic.relatedInformation.push(...relatedInformation); + return diagnostic; + } } From 2ffa94c646d8af4638668258efcfd6bfa0e7171a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Wed, 4 Jul 2018 12:38:13 +0800 Subject: [PATCH 2/6] accept baseline --- src/compiler/binder.ts | 7 +++++-- tests/baselines/reference/api/tsserverlibrary.d.ts | 2 ++ .../exportDefaultAlias_excludesEverything.errors.txt | 1 + .../jsFileCompilationBindMultipleDefaultExports.errors.txt | 1 + .../reference/multipleDefaultExports01.errors.txt | 2 ++ .../reference/multipleDefaultExports03.errors.txt | 1 + .../baselines/reference/multipleExportDefault1.errors.txt | 1 + .../baselines/reference/multipleExportDefault2.errors.txt | 1 + .../baselines/reference/multipleExportDefault3.errors.txt | 1 + .../baselines/reference/multipleExportDefault4.errors.txt | 3 ++- .../baselines/reference/multipleExportDefault5.errors.txt | 3 ++- .../baselines/reference/multipleExportDefault6.errors.txt | 3 ++- 12 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 272bb00ce35b0..141c56ad672a8 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -388,12 +388,14 @@ namespace ts { message = Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; } - if (symbol.declarations && symbol.declarations.length) { + let multipleDefaultExports = false; + if (length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. // We'll know whether we have other default exports depending on if `symbol` already has a declaration list set. if (isDefaultExport) { message = Diagnostics.A_module_cannot_have_multiple_default_exports; + multipleDefaultExports = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -403,6 +405,7 @@ namespace ts { if (symbol.declarations && symbol.declarations.length && (node.kind === SyntaxKind.ExportAssignment && !(node).isExportEquals)) { message = Diagnostics.A_module_cannot_have_multiple_default_exports; + multipleDefaultExports = true; } } } @@ -413,7 +416,7 @@ namespace ts { const declarationName = getNameOfDeclaration(node) || node; const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node)) file.bindDiagnostics.push( - isDefaultExport ? addRelatedInfo( diag, createDiagnosticForNode(declarationName, Diagnostics.This_export_conflicts_with_the_first)) : diag + multipleDefaultExports ? addRelatedInfo(diag, createDiagnosticForNode(declarationName, Diagnostics.This_export_conflicts_with_the_first)) : diag ); symbol = createSymbol(SymbolFlags.None, name); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 82b7e0c3ef833..9e5908d44ad48 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -5432,6 +5432,7 @@ declare namespace ts { Cannot_find_lib_definition_for_0_Did_you_mean_1: DiagnosticMessage; _0_was_declared_here: DiagnosticMessage; Property_0_is_used_before_its_initialization: DiagnosticMessage; + This_export_conflicts_with_the_first: DiagnosticMessage; Import_declaration_0_is_using_private_name_1: DiagnosticMessage; Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: DiagnosticMessage; Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: DiagnosticMessage; @@ -7399,6 +7400,7 @@ declare namespace ts { type Mutable = { -readonly [K in keyof T]: T[K]; }; + function addRelatedInfo(diagnostic: T, ...relatedInformation: DiagnosticRelatedInformation[]): T; } declare namespace ts { function createNode(kind: SyntaxKind, pos?: number, end?: number): Node; diff --git a/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt b/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt index 9181278db203b..3925b02296465 100644 --- a/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt +++ b/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt @@ -10,4 +10,5 @@ tests/cases/compiler/exportDefaultAlias_excludesEverything.ts(3,16): error TS252 export default B; ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:3:16: This export conflicts with the first. \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt index 246b8f20cac73..fa849da960ae9 100644 --- a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt +++ b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt @@ -15,6 +15,7 @@ tests/cases/compiler/a.js(3,20): error TS2652: Merged declaration 'a' cannot inc export default var a = 10; !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/compiler/a.js:3:15: This export conflicts with the first. ~~~ !!! error TS1109: Expression expected. ~ diff --git a/tests/baselines/reference/multipleDefaultExports01.errors.txt b/tests/baselines/reference/multipleDefaultExports01.errors.txt index a60374943df9e..c5057573b920b 100644 --- a/tests/baselines/reference/multipleDefaultExports01.errors.txt +++ b/tests/baselines/reference/multipleDefaultExports01.errors.txt @@ -7,6 +7,7 @@ tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot export default class foo { ~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:1:22: This export conflicts with the first. } @@ -20,6 +21,7 @@ tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot export default x; ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:10:16: This export conflicts with the first. ==== tests/cases/conformance/es6/modules/m2.ts (0 errors) ==== import Entity from "./m1" diff --git a/tests/baselines/reference/multipleDefaultExports03.errors.txt b/tests/baselines/reference/multipleDefaultExports03.errors.txt index 5b4fc84070ba3..48a4974722a71 100644 --- a/tests/baselines/reference/multipleDefaultExports03.errors.txt +++ b/tests/baselines/reference/multipleDefaultExports03.errors.txt @@ -11,4 +11,5 @@ tests/cases/conformance/es6/modules/multipleDefaultExports03.ts(4,22): error TS2 export default class C { ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: This export conflicts with the first. } \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault1.errors.txt b/tests/baselines/reference/multipleExportDefault1.errors.txt index 3da6afc41e082..6606866b7d7ca 100644 --- a/tests/baselines/reference/multipleExportDefault1.errors.txt +++ b/tests/baselines/reference/multipleExportDefault1.errors.txt @@ -16,4 +16,5 @@ tests/cases/conformance/externalModules/multipleExportDefault1.ts(5,1): error TS }; ~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault1.ts:5:1: This export conflicts with the first. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault2.errors.txt b/tests/baselines/reference/multipleExportDefault2.errors.txt index 0543e25a16330..a68f5adf185b3 100644 --- a/tests/baselines/reference/multipleExportDefault2.errors.txt +++ b/tests/baselines/reference/multipleExportDefault2.errors.txt @@ -10,6 +10,7 @@ tests/cases/conformance/externalModules/multipleExportDefault2.ts(5,25): error T }; ~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault2.ts:1:1: This export conflicts with the first. export default function Foo() { } ~~~ diff --git a/tests/baselines/reference/multipleExportDefault3.errors.txt b/tests/baselines/reference/multipleExportDefault3.errors.txt index f1e55da9112fb..462dc343b0a7d 100644 --- a/tests/baselines/reference/multipleExportDefault3.errors.txt +++ b/tests/baselines/reference/multipleExportDefault3.errors.txt @@ -14,5 +14,6 @@ tests/cases/conformance/externalModules/multipleExportDefault3.ts(5,22): error T export default class C { } ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault3.ts:5:22: This export conflicts with the first. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault4.errors.txt b/tests/baselines/reference/multipleExportDefault4.errors.txt index bba15527d004a..1999acfc7851f 100644 --- a/tests/baselines/reference/multipleExportDefault4.errors.txt +++ b/tests/baselines/reference/multipleExportDefault4.errors.txt @@ -13,4 +13,5 @@ tests/cases/conformance/externalModules/multipleExportDefault4.ts(3,1): error TS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ -!!! error TS2528: A module cannot have multiple default exports. \ No newline at end of file +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault4.ts:3:1: This export conflicts with the first. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault5.errors.txt b/tests/baselines/reference/multipleExportDefault5.errors.txt index 30c87339ff2c5..8f440946a00da 100644 --- a/tests/baselines/reference/multipleExportDefault5.errors.txt +++ b/tests/baselines/reference/multipleExportDefault5.errors.txt @@ -8,4 +8,5 @@ tests/cases/conformance/externalModules/multipleExportDefault5.ts(2,22): error T !!! error TS2528: A module cannot have multiple default exports. export default class C {} ~ -!!! error TS2528: A module cannot have multiple default exports. \ No newline at end of file +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault5.ts:2:22: This export conflicts with the first. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault6.errors.txt b/tests/baselines/reference/multipleExportDefault6.errors.txt index a8bf80e8df070..9540c65100857 100644 --- a/tests/baselines/reference/multipleExportDefault6.errors.txt +++ b/tests/baselines/reference/multipleExportDefault6.errors.txt @@ -17,4 +17,5 @@ tests/cases/conformance/externalModules/multipleExportDefault6.ts(5,1): error TS ~~~~~~~~~~ } ~ -!!! error TS2528: A module cannot have multiple default exports. \ No newline at end of file +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault6.ts:5:1: This export conflicts with the first. \ No newline at end of file From c261ca224e251d8aa310ba61c98c2fbd8a1a135e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Wed, 11 Jul 2018 17:56:56 +0800 Subject: [PATCH 3/6] stash --- src/compiler/binder.ts | 19 ++++++++++++++----- src/compiler/diagnosticMessages.json | 6 +++++- .../multipleDefaultExports01.errors.txt | 11 ++++++++--- .../multipleDefaultExports03.errors.txt | 3 ++- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 85ed81683b9fb..fa5de50460011 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -410,13 +410,22 @@ namespace ts { } } - forEach(symbol.declarations, declaration => { - file.bindDiagnostics.push(createDiagnosticForNode(getNameOfDeclaration(declaration) || declaration, message, getDisplayName(declaration))); - }); const declarationName = getNameOfDeclaration(node) || node; - const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node)) + const relatedInformation: DiagnosticRelatedInformation[] = []; + forEach(symbol.declarations, (declaration, index) => { + const decl = getNameOfDeclaration(declaration) || declaration; + const diag = createDiagnosticForNode(decl, message, getDisplayName(declaration)); + file.bindDiagnostics.push( + multipleDefaultExports ? addRelatedInfo(diag, createDiagnosticForNode(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) : diag + ); + if (multipleDefaultExports) { + relatedInformation.push(createDiagnosticForNode(decl, Diagnostics.The_first_export_default_is_here)); + } + }); + + const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node)); file.bindDiagnostics.push( - multipleDefaultExports ? addRelatedInfo(diag, createDiagnosticForNode(declarationName, Diagnostics.This_export_conflicts_with_the_first)) : diag + multipleDefaultExports ? addRelatedInfo(diag, ...relatedInformation) : diag ); symbol = createSymbol(SymbolFlags.None, name); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 8b8741e36f584..67566b9ae7162 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2409,10 +2409,14 @@ "category": "Error", "code": 2729 }, - "This export conflicts with the first.": { + "The first export default is here.": { "category": "Error", "code": 2730 }, + "Another export default is here.": { + "category": "Error", + "code": 2731 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/tests/baselines/reference/multipleDefaultExports01.errors.txt b/tests/baselines/reference/multipleDefaultExports01.errors.txt index c5057573b920b..4073f59f02281 100644 --- a/tests/baselines/reference/multipleDefaultExports01.errors.txt +++ b/tests/baselines/reference/multipleDefaultExports01.errors.txt @@ -1,19 +1,24 @@ tests/cases/conformance/es6/modules/m1.ts(1,22): error TS2528: A module cannot have multiple default exports. tests/cases/conformance/es6/modules/m1.ts(5,25): error TS2528: A module cannot have multiple default exports. +tests/cases/conformance/es6/modules/m1.ts(5,25): error TS2528: A module cannot have multiple default exports. tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot have multiple default exports. -==== tests/cases/conformance/es6/modules/m1.ts (3 errors) ==== +==== tests/cases/conformance/es6/modules/m1.ts (4 errors) ==== export default class foo { ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:1:22: This export conflicts with the first. +!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here. } export default function bar() { ~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/es6/modules/m1.ts:1:22: Another export default is here. + ~~~ +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/es6/modules/m1.ts:10:16: Another export default is here. } @@ -21,7 +26,7 @@ tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot export default x; ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:10:16: This export conflicts with the first. +!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here. ==== tests/cases/conformance/es6/modules/m2.ts (0 errors) ==== import Entity from "./m1" diff --git a/tests/baselines/reference/multipleDefaultExports03.errors.txt b/tests/baselines/reference/multipleDefaultExports03.errors.txt index 48a4974722a71..c57cc9ca50e08 100644 --- a/tests/baselines/reference/multipleDefaultExports03.errors.txt +++ b/tests/baselines/reference/multipleDefaultExports03.errors.txt @@ -6,10 +6,11 @@ tests/cases/conformance/es6/modules/multipleDefaultExports03.ts(4,22): error TS2 export default class C { ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: Another export default is here. } export default class C { ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: This export conflicts with the first. +!!! related TS2730 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:1:22: The first export default is here. } \ No newline at end of file From c3b4a7af28530fd11ac69658d91145cde070cfbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Wed, 18 Jul 2018 14:45:49 +0800 Subject: [PATCH 4/6] accept baseline and fix lint --- src/compiler/binder.ts | 2 +- .../reference/exportDefaultAlias_excludesEverything.errors.txt | 3 ++- .../jsFileCompilationBindMultipleDefaultExports.errors.txt | 3 ++- tests/baselines/reference/multipleExportDefault1.errors.txt | 3 ++- tests/baselines/reference/multipleExportDefault2.errors.txt | 3 ++- tests/baselines/reference/multipleExportDefault3.errors.txt | 3 ++- tests/baselines/reference/multipleExportDefault4.errors.txt | 3 ++- tests/baselines/reference/multipleExportDefault5.errors.txt | 3 ++- tests/baselines/reference/multipleExportDefault6.errors.txt | 3 ++- 9 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index c48d019a0b541..59fbc2a2733f4 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -422,7 +422,7 @@ namespace ts { relatedInformation.push(createDiagnosticForNode(decl, Diagnostics.The_first_export_default_is_here)); } }); - + const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node)); file.bindDiagnostics.push( multipleDefaultExports ? addRelatedInfo(diag, ...relatedInformation) : diag diff --git a/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt b/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt index 3925b02296465..507c195cf3aa5 100644 --- a/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt +++ b/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt @@ -6,9 +6,10 @@ tests/cases/compiler/exportDefaultAlias_excludesEverything.ts(3,16): error TS252 export default interface A {} ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:3:16: Another export default is here. interface B {} export default B; ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:3:16: This export conflicts with the first. +!!! related TS2730 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:1:26: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt index fa849da960ae9..f35da80e5abf4 100644 --- a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt +++ b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt @@ -9,13 +9,14 @@ tests/cases/compiler/a.js(3,20): error TS2652: Merged declaration 'a' cannot inc export default class a { ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/compiler/a.js:3:15: Another export default is here. ~ !!! error TS2652: Merged declaration 'a' cannot include a default export declaration. Consider adding a separate 'export default a' declaration instead. } export default var a = 10; !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/compiler/a.js:3:15: This export conflicts with the first. +!!! related TS2730 tests/cases/compiler/a.js:1:22: The first export default is here. ~~~ !!! error TS1109: Expression expected. ~ diff --git a/tests/baselines/reference/multipleExportDefault1.errors.txt b/tests/baselines/reference/multipleExportDefault1.errors.txt index 6606866b7d7ca..fe56bedaf30f6 100644 --- a/tests/baselines/reference/multipleExportDefault1.errors.txt +++ b/tests/baselines/reference/multipleExportDefault1.errors.txt @@ -6,6 +6,7 @@ tests/cases/conformance/externalModules/multipleExportDefault1.ts(5,1): error TS export default function Foo (){ ~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault1.ts:5:1: Another export default is here. } @@ -16,5 +17,5 @@ tests/cases/conformance/externalModules/multipleExportDefault1.ts(5,1): error TS }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault1.ts:5:1: This export conflicts with the first. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault1.ts:1:25: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault2.errors.txt b/tests/baselines/reference/multipleExportDefault2.errors.txt index a68f5adf185b3..d7ded3679bd83 100644 --- a/tests/baselines/reference/multipleExportDefault2.errors.txt +++ b/tests/baselines/reference/multipleExportDefault2.errors.txt @@ -10,10 +10,11 @@ tests/cases/conformance/externalModules/multipleExportDefault2.ts(5,25): error T }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault2.ts:1:1: This export conflicts with the first. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault2.ts:5:25: The first export default is here. export default function Foo() { } ~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault2.ts:1:1: Another export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault3.errors.txt b/tests/baselines/reference/multipleExportDefault3.errors.txt index 462dc343b0a7d..99a4105ac4d83 100644 --- a/tests/baselines/reference/multipleExportDefault3.errors.txt +++ b/tests/baselines/reference/multipleExportDefault3.errors.txt @@ -10,10 +10,11 @@ tests/cases/conformance/externalModules/multipleExportDefault3.ts(5,22): error T }; ~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault3.ts:5:22: Another export default is here. export default class C { } ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault3.ts:5:22: This export conflicts with the first. +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault3.ts:1:1: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault4.errors.txt b/tests/baselines/reference/multipleExportDefault4.errors.txt index 1999acfc7851f..9d854cf29149e 100644 --- a/tests/baselines/reference/multipleExportDefault4.errors.txt +++ b/tests/baselines/reference/multipleExportDefault4.errors.txt @@ -6,6 +6,7 @@ tests/cases/conformance/externalModules/multipleExportDefault4.ts(3,1): error TS export default class C { } ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault4.ts:3:1: Another export default is here. export default { ~~~~~~~~~~~~~~~~ @@ -14,4 +15,4 @@ tests/cases/conformance/externalModules/multipleExportDefault4.ts(3,1): error TS }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault4.ts:3:1: This export conflicts with the first. \ No newline at end of file +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault4.ts:1:22: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault5.errors.txt b/tests/baselines/reference/multipleExportDefault5.errors.txt index 8f440946a00da..3e938f3880823 100644 --- a/tests/baselines/reference/multipleExportDefault5.errors.txt +++ b/tests/baselines/reference/multipleExportDefault5.errors.txt @@ -6,7 +6,8 @@ tests/cases/conformance/externalModules/multipleExportDefault5.ts(2,22): error T export default function bar() { } ~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault5.ts:2:22: Another export default is here. export default class C {} ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault5.ts:2:22: This export conflicts with the first. \ No newline at end of file +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault5.ts:1:25: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault6.errors.txt b/tests/baselines/reference/multipleExportDefault6.errors.txt index 9540c65100857..523f42dcde478 100644 --- a/tests/baselines/reference/multipleExportDefault6.errors.txt +++ b/tests/baselines/reference/multipleExportDefault6.errors.txt @@ -10,6 +10,7 @@ tests/cases/conformance/externalModules/multipleExportDefault6.ts(5,1): error TS } ~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault6.ts:5:1: Another export default is here. export default { ~~~~~~~~~~~~~~~~ @@ -18,4 +19,4 @@ tests/cases/conformance/externalModules/multipleExportDefault6.ts(5,1): error TS } ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault6.ts:5:1: This export conflicts with the first. \ No newline at end of file +!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault6.ts:1:1: The first export default is here. \ No newline at end of file From 34432deab35f1ee09c953d95d54825178437626f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Wed, 1 Aug 2018 12:02:23 +0800 Subject: [PATCH 5/6] update testcase --- src/compiler/binder.ts | 15 +++++----- .../duplicateDefaultExport.errors.txt | 2 ++ ...DefaultAlias_excludesEverything.errors.txt | 4 +-- ...ationBindMultipleDefaultExports.errors.txt | 4 +-- .../multipleDefaultExports01.errors.txt | 8 ++--- .../multipleDefaultExports03.errors.txt | 4 +-- .../multipleDefaultExports05.errors.txt | 25 ++++++++++++++++ .../reference/multipleDefaultExports05.js | 29 +++++++++++++++++++ .../multipleDefaultExports05.symbols | 10 +++++++ .../reference/multipleDefaultExports05.types | 10 +++++++ .../multipleExportDefault1.errors.txt | 4 +-- .../multipleExportDefault2.errors.txt | 4 +-- .../multipleExportDefault3.errors.txt | 4 +-- .../multipleExportDefault4.errors.txt | 4 +-- .../multipleExportDefault5.errors.txt | 4 +-- .../multipleExportDefault6.errors.txt | 4 +-- .../es6/modules/multipleDefaultExports05.ts | 8 +++++ 17 files changed, 114 insertions(+), 29 deletions(-) create mode 100644 tests/baselines/reference/multipleDefaultExports05.errors.txt create mode 100644 tests/baselines/reference/multipleDefaultExports05.js create mode 100644 tests/baselines/reference/multipleDefaultExports05.symbols create mode 100644 tests/baselines/reference/multipleDefaultExports05.types create mode 100644 tests/cases/conformance/es6/modules/multipleDefaultExports05.ts diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 85414fb6e147e..74e9cbfbd28a7 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -390,6 +390,7 @@ namespace ts { messageNeedsName = false; } + let multipleDefaultExports = false; if (length(symbol.declarations)) { // If the current node is a default export of some sort, then check if // there are any other default exports that we need to error on. @@ -397,6 +398,7 @@ namespace ts { if (isDefaultExport) { message = Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName = false; + multipleDefaultExports = true; } else { // This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration. @@ -407,6 +409,7 @@ namespace ts { (node.kind === SyntaxKind.ExportAssignment && !(node).isExportEquals)) { message = Diagnostics.A_module_cannot_have_multiple_default_exports; messageNeedsName = false; + multipleDefaultExports = true; } } } @@ -415,19 +418,17 @@ namespace ts { const relatedInformation: DiagnosticRelatedInformation[] = []; forEach(symbol.declarations, (declaration, index) => { const decl = getNameOfDeclaration(declaration) || declaration; + const diag = createDiagnosticForNode(decl, message, messageNeedsName ? getDisplayName(declaration) : undefined); file.bindDiagnostics.push( - messageNeedsName ? - createDiagnosticForNode(decl, message, getDisplayName(declaration)) : - addRelatedInfo(createDiagnosticForNode(decl, message), createDiagnosticForNode(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) + multipleDefaultExports ? addRelatedInfo(diag, createDiagnosticForNode(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) : diag ); - if (!messageNeedsName) { + if (multipleDefaultExports) { relatedInformation.push(createDiagnosticForNode(decl, Diagnostics.The_first_export_default_is_here)); } }); - file.bindDiagnostics.push( - messageNeedsName ? createDiagnosticForNode(declarationName, message, getDisplayName(node)) : addRelatedInfo(createDiagnosticForNode(declarationName, message), ...relatedInformation) - ); + const diag = createDiagnosticForNode(declarationName, message, messageNeedsName ? getDisplayName(node) : undefined) + file.bindDiagnostics.push(multipleDefaultExports ? addRelatedInfo(diag, ...relatedInformation) : diag); symbol = createSymbol(SymbolFlags.None, name); } diff --git a/tests/baselines/reference/duplicateDefaultExport.errors.txt b/tests/baselines/reference/duplicateDefaultExport.errors.txt index e35e416ff6b97..df3449f4ad80b 100644 --- a/tests/baselines/reference/duplicateDefaultExport.errors.txt +++ b/tests/baselines/reference/duplicateDefaultExport.errors.txt @@ -6,7 +6,9 @@ tests/cases/compiler/duplicateDefaultExport.ts(2,1): error TS2528: A module cann export default 0; ~~~~~~~~~~~~~~~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2733 tests/cases/compiler/duplicateDefaultExport.ts:2:1: The first export default is here. export default function() {} ~~~~~~ !!! error TS2528: A module cannot have multiple default exports. +!!! related TS2734 tests/cases/compiler/duplicateDefaultExport.ts:1:1: Another export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt b/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt index 507c195cf3aa5..60c6344e7be75 100644 --- a/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt +++ b/tests/baselines/reference/exportDefaultAlias_excludesEverything.errors.txt @@ -6,10 +6,10 @@ tests/cases/compiler/exportDefaultAlias_excludesEverything.ts(3,16): error TS252 export default interface A {} ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:3:16: Another export default is here. +!!! related TS2734 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:3:16: Another export default is here. interface B {} export default B; ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:1:26: The first export default is here. +!!! related TS2733 tests/cases/compiler/exportDefaultAlias_excludesEverything.ts:1:26: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt index f35da80e5abf4..bca8e8cdc0a3d 100644 --- a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt +++ b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.errors.txt @@ -9,14 +9,14 @@ tests/cases/compiler/a.js(3,20): error TS2652: Merged declaration 'a' cannot inc export default class a { ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/compiler/a.js:3:15: Another export default is here. +!!! related TS2734 tests/cases/compiler/a.js:3:15: Another export default is here. ~ !!! error TS2652: Merged declaration 'a' cannot include a default export declaration. Consider adding a separate 'export default a' declaration instead. } export default var a = 10; !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/compiler/a.js:1:22: The first export default is here. +!!! related TS2733 tests/cases/compiler/a.js:1:22: The first export default is here. ~~~ !!! error TS1109: Expression expected. ~ diff --git a/tests/baselines/reference/multipleDefaultExports01.errors.txt b/tests/baselines/reference/multipleDefaultExports01.errors.txt index 4073f59f02281..c50e6060abd67 100644 --- a/tests/baselines/reference/multipleDefaultExports01.errors.txt +++ b/tests/baselines/reference/multipleDefaultExports01.errors.txt @@ -8,17 +8,17 @@ tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot export default class foo { ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here. +!!! related TS2733 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here. } export default function bar() { ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/es6/modules/m1.ts:1:22: Another export default is here. +!!! related TS2734 tests/cases/conformance/es6/modules/m1.ts:1:22: Another export default is here. ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/es6/modules/m1.ts:10:16: Another export default is here. +!!! related TS2734 tests/cases/conformance/es6/modules/m1.ts:10:16: Another export default is here. } @@ -26,7 +26,7 @@ tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot export default x; ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here. +!!! related TS2733 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here. ==== tests/cases/conformance/es6/modules/m2.ts (0 errors) ==== import Entity from "./m1" diff --git a/tests/baselines/reference/multipleDefaultExports03.errors.txt b/tests/baselines/reference/multipleDefaultExports03.errors.txt index c57cc9ca50e08..713847f4b9a6f 100644 --- a/tests/baselines/reference/multipleDefaultExports03.errors.txt +++ b/tests/baselines/reference/multipleDefaultExports03.errors.txt @@ -6,11 +6,11 @@ tests/cases/conformance/es6/modules/multipleDefaultExports03.ts(4,22): error TS2 export default class C { ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: Another export default is here. +!!! related TS2734 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: Another export default is here. } export default class C { ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:1:22: The first export default is here. +!!! related TS2733 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:1:22: The first export default is here. } \ No newline at end of file diff --git a/tests/baselines/reference/multipleDefaultExports05.errors.txt b/tests/baselines/reference/multipleDefaultExports05.errors.txt new file mode 100644 index 0000000000000..8fd89fef38cd7 --- /dev/null +++ b/tests/baselines/reference/multipleDefaultExports05.errors.txt @@ -0,0 +1,25 @@ +tests/cases/conformance/es6/modules/multipleDefaultExports05.ts(1,22): error TS2528: A module cannot have multiple default exports. +tests/cases/conformance/es6/modules/multipleDefaultExports05.ts(1,22): error TS2528: A module cannot have multiple default exports. +tests/cases/conformance/es6/modules/multipleDefaultExports05.ts(3,22): error TS2528: A module cannot have multiple default exports. +tests/cases/conformance/es6/modules/multipleDefaultExports05.ts(5,22): error TS2528: A module cannot have multiple default exports. + + +==== tests/cases/conformance/es6/modules/multipleDefaultExports05.ts (4 errors) ==== + export default class AA1 {} + ~~~ +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2734 tests/cases/conformance/es6/modules/multipleDefaultExports05.ts:3:22: Another export default is here. + ~~~ +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2734 tests/cases/conformance/es6/modules/multipleDefaultExports05.ts:5:22: Another export default is here. + + export default class BB1 {} + ~~~ +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2733 tests/cases/conformance/es6/modules/multipleDefaultExports05.ts:1:22: The first export default is here. + + export default class CC1 {} + ~~~ +!!! error TS2528: A module cannot have multiple default exports. +!!! related TS2733 tests/cases/conformance/es6/modules/multipleDefaultExports05.ts:1:22: The first export default is here. + \ No newline at end of file diff --git a/tests/baselines/reference/multipleDefaultExports05.js b/tests/baselines/reference/multipleDefaultExports05.js new file mode 100644 index 0000000000000..f4806237b4a5f --- /dev/null +++ b/tests/baselines/reference/multipleDefaultExports05.js @@ -0,0 +1,29 @@ +//// [multipleDefaultExports05.ts] +export default class AA1 {} + +export default class BB1 {} + +export default class CC1 {} + + +//// [multipleDefaultExports05.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var AA1 = /** @class */ (function () { + function AA1() { + } + return AA1; +}()); +exports.default = AA1; +var BB1 = /** @class */ (function () { + function BB1() { + } + return BB1; +}()); +exports.default = BB1; +var CC1 = /** @class */ (function () { + function CC1() { + } + return CC1; +}()); +exports.default = CC1; diff --git a/tests/baselines/reference/multipleDefaultExports05.symbols b/tests/baselines/reference/multipleDefaultExports05.symbols new file mode 100644 index 0000000000000..254dd3c8a3cbb --- /dev/null +++ b/tests/baselines/reference/multipleDefaultExports05.symbols @@ -0,0 +1,10 @@ +=== tests/cases/conformance/es6/modules/multipleDefaultExports05.ts === +export default class AA1 {} +>AA1 : Symbol(AA1, Decl(multipleDefaultExports05.ts, 0, 0)) + +export default class BB1 {} +>BB1 : Symbol(BB1, Decl(multipleDefaultExports05.ts, 0, 27)) + +export default class CC1 {} +>CC1 : Symbol(CC1, Decl(multipleDefaultExports05.ts, 2, 27)) + diff --git a/tests/baselines/reference/multipleDefaultExports05.types b/tests/baselines/reference/multipleDefaultExports05.types new file mode 100644 index 0000000000000..49cb29ef99a09 --- /dev/null +++ b/tests/baselines/reference/multipleDefaultExports05.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/es6/modules/multipleDefaultExports05.ts === +export default class AA1 {} +>AA1 : AA1 + +export default class BB1 {} +>BB1 : import("tests/cases/conformance/es6/modules/multipleDefaultExports05").default + +export default class CC1 {} +>CC1 : import("tests/cases/conformance/es6/modules/multipleDefaultExports05").default + diff --git a/tests/baselines/reference/multipleExportDefault1.errors.txt b/tests/baselines/reference/multipleExportDefault1.errors.txt index fe56bedaf30f6..521db5fcd632f 100644 --- a/tests/baselines/reference/multipleExportDefault1.errors.txt +++ b/tests/baselines/reference/multipleExportDefault1.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/externalModules/multipleExportDefault1.ts(5,1): error TS export default function Foo (){ ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault1.ts:5:1: Another export default is here. +!!! related TS2734 tests/cases/conformance/externalModules/multipleExportDefault1.ts:5:1: Another export default is here. } @@ -17,5 +17,5 @@ tests/cases/conformance/externalModules/multipleExportDefault1.ts(5,1): error TS }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault1.ts:1:25: The first export default is here. +!!! related TS2733 tests/cases/conformance/externalModules/multipleExportDefault1.ts:1:25: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault2.errors.txt b/tests/baselines/reference/multipleExportDefault2.errors.txt index d7ded3679bd83..6c0698687ab96 100644 --- a/tests/baselines/reference/multipleExportDefault2.errors.txt +++ b/tests/baselines/reference/multipleExportDefault2.errors.txt @@ -10,11 +10,11 @@ tests/cases/conformance/externalModules/multipleExportDefault2.ts(5,25): error T }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault2.ts:5:25: The first export default is here. +!!! related TS2733 tests/cases/conformance/externalModules/multipleExportDefault2.ts:5:25: The first export default is here. export default function Foo() { } ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault2.ts:1:1: Another export default is here. +!!! related TS2734 tests/cases/conformance/externalModules/multipleExportDefault2.ts:1:1: Another export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault3.errors.txt b/tests/baselines/reference/multipleExportDefault3.errors.txt index 99a4105ac4d83..f44b6dda8b576 100644 --- a/tests/baselines/reference/multipleExportDefault3.errors.txt +++ b/tests/baselines/reference/multipleExportDefault3.errors.txt @@ -10,11 +10,11 @@ tests/cases/conformance/externalModules/multipleExportDefault3.ts(5,22): error T }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault3.ts:5:22: Another export default is here. +!!! related TS2734 tests/cases/conformance/externalModules/multipleExportDefault3.ts:5:22: Another export default is here. export default class C { } ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault3.ts:1:1: The first export default is here. +!!! related TS2733 tests/cases/conformance/externalModules/multipleExportDefault3.ts:1:1: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault4.errors.txt b/tests/baselines/reference/multipleExportDefault4.errors.txt index 9d854cf29149e..fdc8a5dae46c1 100644 --- a/tests/baselines/reference/multipleExportDefault4.errors.txt +++ b/tests/baselines/reference/multipleExportDefault4.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/externalModules/multipleExportDefault4.ts(3,1): error TS export default class C { } ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault4.ts:3:1: Another export default is here. +!!! related TS2734 tests/cases/conformance/externalModules/multipleExportDefault4.ts:3:1: Another export default is here. export default { ~~~~~~~~~~~~~~~~ @@ -15,4 +15,4 @@ tests/cases/conformance/externalModules/multipleExportDefault4.ts(3,1): error TS }; ~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault4.ts:1:22: The first export default is here. \ No newline at end of file +!!! related TS2733 tests/cases/conformance/externalModules/multipleExportDefault4.ts:1:22: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault5.errors.txt b/tests/baselines/reference/multipleExportDefault5.errors.txt index 3e938f3880823..fcf9912793a58 100644 --- a/tests/baselines/reference/multipleExportDefault5.errors.txt +++ b/tests/baselines/reference/multipleExportDefault5.errors.txt @@ -6,8 +6,8 @@ tests/cases/conformance/externalModules/multipleExportDefault5.ts(2,22): error T export default function bar() { } ~~~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault5.ts:2:22: Another export default is here. +!!! related TS2734 tests/cases/conformance/externalModules/multipleExportDefault5.ts:2:22: Another export default is here. export default class C {} ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault5.ts:1:25: The first export default is here. \ No newline at end of file +!!! related TS2733 tests/cases/conformance/externalModules/multipleExportDefault5.ts:1:25: The first export default is here. \ No newline at end of file diff --git a/tests/baselines/reference/multipleExportDefault6.errors.txt b/tests/baselines/reference/multipleExportDefault6.errors.txt index 523f42dcde478..1cba84419fe45 100644 --- a/tests/baselines/reference/multipleExportDefault6.errors.txt +++ b/tests/baselines/reference/multipleExportDefault6.errors.txt @@ -10,7 +10,7 @@ tests/cases/conformance/externalModules/multipleExportDefault6.ts(5,1): error TS } ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2731 tests/cases/conformance/externalModules/multipleExportDefault6.ts:5:1: Another export default is here. +!!! related TS2734 tests/cases/conformance/externalModules/multipleExportDefault6.ts:5:1: Another export default is here. export default { ~~~~~~~~~~~~~~~~ @@ -19,4 +19,4 @@ tests/cases/conformance/externalModules/multipleExportDefault6.ts(5,1): error TS } ~ !!! error TS2528: A module cannot have multiple default exports. -!!! related TS2730 tests/cases/conformance/externalModules/multipleExportDefault6.ts:1:1: The first export default is here. \ No newline at end of file +!!! related TS2733 tests/cases/conformance/externalModules/multipleExportDefault6.ts:1:1: The first export default is here. \ No newline at end of file diff --git a/tests/cases/conformance/es6/modules/multipleDefaultExports05.ts b/tests/cases/conformance/es6/modules/multipleDefaultExports05.ts new file mode 100644 index 0000000000000..38a07c683ded1 --- /dev/null +++ b/tests/cases/conformance/es6/modules/multipleDefaultExports05.ts @@ -0,0 +1,8 @@ +// @module: commonjs +// @target: ES5 + +export default class AA1 {} + +export default class BB1 {} + +export default class CC1 {} From c1d0120c11cc2559fca24361d9180ae4bb69f0cd Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 12 Mar 2019 12:58:27 -0700 Subject: [PATCH 6/6] Add missing semicolon --- src/compiler/binder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 35def56981404..ff11b09f0fe2a 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -440,7 +440,7 @@ namespace ts { } }); - const diag = createDiagnosticForNode(declarationName, message, messageNeedsName ? getDisplayName(node) : undefined) + const diag = createDiagnosticForNode(declarationName, message, messageNeedsName ? getDisplayName(node) : undefined); file.bindDiagnostics.push(multipleDefaultExports ? addRelatedInfo(diag, ...relatedInformation) : diag); symbol = createSymbol(SymbolFlags.None, name);