@@ -1655,14 +1655,25 @@ namespace ts {
16551655 if (declaration === undefined) return Debug.fail("Declaration to checkResolvedBlockScopedVariable is undefined");
16561656
16571657 if (!(declaration.flags & NodeFlags.Ambient) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
1658+ let diagnosticMessage;
1659+ const declarationName = declarationNameToString(getNameOfDeclaration(declaration));
16581660 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 );
16601662 }
16611663 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 );
16631665 }
16641666 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+ );
16661677 }
16671678 }
16681679 }
@@ -17460,16 +17471,24 @@ namespace ts {
1746017471 return;
1746117472 }
1746217473
17474+ let diagnosticMessage;
17475+ const declarationName = idText(right);
1746317476 if (isInPropertyInitializer(node) &&
1746417477 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
1746517478 && !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 );
1746717480 }
1746817481 else if (valueDeclaration.kind === SyntaxKind.ClassDeclaration &&
1746917482 node.parent.kind !== SyntaxKind.TypeReference &&
1747017483 !(valueDeclaration.flags & NodeFlags.Ambient) &&
1747117484 !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+ );
1747317492 }
1747417493 }
1747517494
@@ -19083,8 +19102,8 @@ namespace ts {
1908319102 if (importNode && !isImportCall(importNode)) {
1908419103 const sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target!), kind);
1908519104 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)] ;
1908819107 }
1908919108 }
1909019109
0 commit comments