@@ -1655,14 +1655,25 @@ namespace ts {
1655
1655
if (declaration === undefined) return Debug.fail("Declaration to checkResolvedBlockScopedVariable is undefined");
1656
1656
1657
1657
if (!(declaration.flags & NodeFlags.Ambient) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
1658
+ let diagnosticMessage;
1659
+ const declarationName = declarationNameToString(getNameOfDeclaration(declaration));
1658
1660
if (result.flags & SymbolFlags.BlockScopedVariable) {
1659
- error(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationNameToString(getNameOfDeclaration(declaration)) );
1661
+ diagnosticMessage = error(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName );
1660
1662
}
1661
1663
else if (result.flags & SymbolFlags.Class) {
1662
- error(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationNameToString(getNameOfDeclaration(declaration)) );
1664
+ diagnosticMessage = error(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationName );
1663
1665
}
1664
1666
else if (result.flags & SymbolFlags.RegularEnum) {
1665
- error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationNameToString(getNameOfDeclaration(declaration)));
1667
+ diagnosticMessage = error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName);
1668
+ }
1669
+ else {
1670
+ Debug.assert(!!(result.flags & SymbolFlags.ConstEnum));
1671
+ }
1672
+
1673
+ if (diagnosticMessage) {
1674
+ addRelatedInfo(diagnosticMessage,
1675
+ createDiagnosticForNode(declaration, Diagnostics._0_was_declared_here, declarationName)
1676
+ );
1666
1677
}
1667
1678
}
1668
1679
}
@@ -17460,16 +17471,24 @@ namespace ts {
17460
17471
return;
17461
17472
}
17462
17473
17474
+ let diagnosticMessage;
17475
+ const declarationName = idText(right);
17463
17476
if (isInPropertyInitializer(node) &&
17464
17477
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
17465
17478
&& !isPropertyDeclaredInAncestorClass(prop)) {
17466
- error(right, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, idText(right) );
17479
+ diagnosticMessage = error(right, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName );
17467
17480
}
17468
17481
else if (valueDeclaration.kind === SyntaxKind.ClassDeclaration &&
17469
17482
node.parent.kind !== SyntaxKind.TypeReference &&
17470
17483
!(valueDeclaration.flags & NodeFlags.Ambient) &&
17471
17484
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
17472
- error(right, Diagnostics.Class_0_used_before_its_declaration, idText(right));
17485
+ diagnosticMessage = error(right, Diagnostics.Class_0_used_before_its_declaration, declarationName);
17486
+ }
17487
+
17488
+ if (diagnosticMessage) {
17489
+ addRelatedInfo(diagnosticMessage,
17490
+ createDiagnosticForNode(valueDeclaration, Diagnostics._0_was_declared_here, declarationName)
17491
+ );
17473
17492
}
17474
17493
}
17475
17494
@@ -19083,8 +19102,8 @@ namespace ts {
19083
19102
if (importNode && !isImportCall(importNode)) {
19084
19103
const sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target!), kind);
19085
19104
if (!sigs || !sigs.length) return;
19086
- diagnostic.relatedInformation = diagnostic.relatedInformation || [] ;
19087
- diagnostic.relatedInformation.push( createDiagnosticForNode(importNode, Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)) ;
19105
+ Debug.assert(! diagnostic.relatedInformation) ;
19106
+ diagnostic.relatedInformation = [ createDiagnosticForNode(importNode, Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)] ;
19088
19107
}
19089
19108
}
19090
19109
0 commit comments