@@ -1655,34 +1655,29 @@ 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 err ;
1658+ let diagnosticMessage ;
16591659 const declarationName = declarationNameToString(getNameOfDeclaration(declaration));
16601660 if (result.flags & SymbolFlags.BlockScopedVariable) {
1661- err = error(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
1661+ diagnosticMessage = error(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
16621662 }
16631663 else if (result.flags & SymbolFlags.Class) {
1664- err = error(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationName);
1664+ diagnosticMessage = error(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationName);
16651665 }
16661666 else if (result.flags & SymbolFlags.RegularEnum) {
1667- err = error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName);
1667+ diagnosticMessage = error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName);
16681668 }
16691669 else {
16701670 Debug.assert(!!(result.flags & SymbolFlags.ConstEnum));
16711671 }
16721672
1673- if (err) {
1674- placeRelatedSpanOnLaterDeclaration(declarationName, declaration, err);
1673+ if (diagnosticMessage) {
1674+ addRelatedInfo(diagnosticMessage,
1675+ createDiagnosticForNode(declaration, Diagnostics._0_was_declared_here, declarationName)
1676+ );
16751677 }
16761678 }
16771679 }
16781680
1679- function placeRelatedSpanOnLaterDeclaration(declarationName: string, declarationLocation: Declaration, diagnostic: Diagnostic) {
1680- Debug.assert(!diagnostic.relatedInformation);
1681- diagnostic.relatedInformation = [
1682- createDiagnosticForNode(declarationLocation, Diagnostics._0_was_declared_here, declarationName)
1683- ];
1684- }
1685-
16861681 /* Starting from 'initial' node walk up the parent chain until 'stopAt' node is reached.
16871682 * If at any point current node is equal to 'parent' node - return true.
16881683 * Return false if 'stopAt' node is reached or isFunctionLike(current) === true.
@@ -17476,22 +17471,24 @@ namespace ts {
1747617471 return;
1747717472 }
1747817473
17479- let err ;
17474+ let diagnosticMessage ;
1748017475 const declarationName = idText(right);
1748117476 if (isInPropertyInitializer(node) &&
1748217477 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
1748317478 && !isPropertyDeclaredInAncestorClass(prop)) {
17484- err = error(right, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
17479+ diagnosticMessage = error(right, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
1748517480 }
1748617481 else if (valueDeclaration.kind === SyntaxKind.ClassDeclaration &&
1748717482 node.parent.kind !== SyntaxKind.TypeReference &&
1748817483 !(valueDeclaration.flags & NodeFlags.Ambient) &&
1748917484 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
17490- err = error(right, Diagnostics.Class_0_used_before_its_declaration, declarationName);
17485+ diagnosticMessage = error(right, Diagnostics.Class_0_used_before_its_declaration, declarationName);
1749117486 }
1749217487
17493- if (err) {
17494- placeRelatedSpanOnLaterDeclaration(declarationName, valueDeclaration, err);
17488+ if (diagnosticMessage) {
17489+ addRelatedInfo(diagnosticMessage,
17490+ createDiagnosticForNode(valueDeclaration, Diagnostics._0_was_declared_here, declarationName)
17491+ );
1749517492 }
1749617493 }
1749717494
0 commit comments