Skip to content

Commit 760bcff

Browse files
committed
stash
1 parent ece1bdb commit 760bcff

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

src/compiler/binder.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -410,13 +410,22 @@ namespace ts {
410410
}
411411
}
412412

413-
forEach(symbol.declarations, declaration => {
414-
file.bindDiagnostics.push(createDiagnosticForNode(getNameOfDeclaration(declaration) || declaration, message, getDisplayName(declaration)));
415-
});
416413
const declarationName = getNameOfDeclaration(node) || node;
417-
const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node))
414+
const relatedInformation: DiagnosticRelatedInformation[] = [];
415+
forEach(symbol.declarations, (declaration, index) => {
416+
const decl = getNameOfDeclaration(declaration) || declaration;
417+
const diag = createDiagnosticForNode(decl, message, getDisplayName(declaration));
418+
file.bindDiagnostics.push(
419+
multipleDefaultExports ? addRelatedInfo(diag, createDiagnosticForNode(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) : diag
420+
);
421+
if (multipleDefaultExports) {
422+
relatedInformation.push(createDiagnosticForNode(decl, Diagnostics.The_first_export_default_is_here));
423+
}
424+
});
425+
426+
const diag = createDiagnosticForNode(declarationName, message, getDisplayName(node));
418427
file.bindDiagnostics.push(
419-
multipleDefaultExports ? addRelatedInfo(diag, createDiagnosticForNode(declarationName, Diagnostics.This_export_conflicts_with_the_first)) : diag
428+
multipleDefaultExports ? addRelatedInfo(diag, ...relatedInformation) : diag
420429
);
421430

422431
symbol = createSymbol(SymbolFlags.None, name);

src/compiler/diagnosticMessages.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -2409,10 +2409,14 @@
24092409
"category": "Error",
24102410
"code": 2729
24112411
},
2412-
"This export conflicts with the first.": {
2412+
"The first export default is here.": {
24132413
"category": "Error",
24142414
"code": 2730
24152415
},
2416+
"Another export default is here.": {
2417+
"category": "Error",
2418+
"code": 2731
2419+
},
24162420

24172421
"Import declaration '{0}' is using private name '{1}'.": {
24182422
"category": "Error",

tests/baselines/reference/multipleDefaultExports01.errors.txt

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,32 @@
11
tests/cases/conformance/es6/modules/m1.ts(1,22): error TS2528: A module cannot have multiple default exports.
22
tests/cases/conformance/es6/modules/m1.ts(5,25): error TS2528: A module cannot have multiple default exports.
3+
tests/cases/conformance/es6/modules/m1.ts(5,25): error TS2528: A module cannot have multiple default exports.
34
tests/cases/conformance/es6/modules/m1.ts(10,16): error TS2528: A module cannot have multiple default exports.
45

56

6-
==== tests/cases/conformance/es6/modules/m1.ts (3 errors) ====
7+
==== tests/cases/conformance/es6/modules/m1.ts (4 errors) ====
78
export default class foo {
89
~~~
910
!!! error TS2528: A module cannot have multiple default exports.
10-
!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:1:22: This export conflicts with the first.
11+
!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here.
1112

1213
}
1314

1415
export default function bar() {
1516
~~~
1617
!!! error TS2528: A module cannot have multiple default exports.
18+
!!! related TS2731 tests/cases/conformance/es6/modules/m1.ts:1:22: Another export default is here.
19+
~~~
20+
!!! error TS2528: A module cannot have multiple default exports.
21+
!!! related TS2731 tests/cases/conformance/es6/modules/m1.ts:10:16: Another export default is here.
1722

1823
}
1924

2025
var x = 10;
2126
export default x;
2227
~
2328
!!! error TS2528: A module cannot have multiple default exports.
24-
!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:10:16: This export conflicts with the first.
29+
!!! related TS2730 tests/cases/conformance/es6/modules/m1.ts:5:25: The first export default is here.
2530

2631
==== tests/cases/conformance/es6/modules/m2.ts (0 errors) ====
2732
import Entity from "./m1"

tests/baselines/reference/multipleDefaultExports03.errors.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ tests/cases/conformance/es6/modules/multipleDefaultExports03.ts(4,22): error TS2
66
export default class C {
77
~
88
!!! error TS2528: A module cannot have multiple default exports.
9+
!!! related TS2731 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: Another export default is here.
910
}
1011

1112
export default class C {
1213
~
1314
!!! error TS2528: A module cannot have multiple default exports.
14-
!!! related TS2730 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:4:22: This export conflicts with the first.
15+
!!! related TS2730 tests/cases/conformance/es6/modules/multipleDefaultExports03.ts:1:22: The first export default is here.
1516
}

0 commit comments

Comments
 (0)