mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Merge pull request #25359 from Microsoft/useBeforeDeclareRelatedSpans
Related error spans on "used before declared" error messages
This commit is contained in:
+26
-7
@@ -1655,14 +1655,25 @@ namespace ts {
|
||||
if (declaration === undefined) return Debug.fail("Declaration to checkResolvedBlockScopedVariable is undefined");
|
||||
|
||||
if (!(declaration.flags & NodeFlags.Ambient) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
|
||||
let diagnosticMessage;
|
||||
const declarationName = declarationNameToString(getNameOfDeclaration(declaration));
|
||||
if (result.flags & SymbolFlags.BlockScopedVariable) {
|
||||
error(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationNameToString(getNameOfDeclaration(declaration)));
|
||||
diagnosticMessage = error(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
|
||||
}
|
||||
else if (result.flags & SymbolFlags.Class) {
|
||||
error(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationNameToString(getNameOfDeclaration(declaration)));
|
||||
diagnosticMessage = error(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationName);
|
||||
}
|
||||
else if (result.flags & SymbolFlags.RegularEnum) {
|
||||
error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationNameToString(getNameOfDeclaration(declaration)));
|
||||
diagnosticMessage = error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName);
|
||||
}
|
||||
else {
|
||||
Debug.assert(!!(result.flags & SymbolFlags.ConstEnum));
|
||||
}
|
||||
|
||||
if (diagnosticMessage) {
|
||||
addRelatedInfo(diagnosticMessage,
|
||||
createDiagnosticForNode(declaration, Diagnostics._0_was_declared_here, declarationName)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17460,16 +17471,24 @@ namespace ts {
|
||||
return;
|
||||
}
|
||||
|
||||
let diagnosticMessage;
|
||||
const declarationName = idText(right);
|
||||
if (isInPropertyInitializer(node) &&
|
||||
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
|
||||
&& !isPropertyDeclaredInAncestorClass(prop)) {
|
||||
error(right, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, idText(right));
|
||||
diagnosticMessage = error(right, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
|
||||
}
|
||||
else if (valueDeclaration.kind === SyntaxKind.ClassDeclaration &&
|
||||
node.parent.kind !== SyntaxKind.TypeReference &&
|
||||
!(valueDeclaration.flags & NodeFlags.Ambient) &&
|
||||
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
|
||||
error(right, Diagnostics.Class_0_used_before_its_declaration, idText(right));
|
||||
diagnosticMessage = error(right, Diagnostics.Class_0_used_before_its_declaration, declarationName);
|
||||
}
|
||||
|
||||
if (diagnosticMessage) {
|
||||
addRelatedInfo(diagnosticMessage,
|
||||
createDiagnosticForNode(valueDeclaration, Diagnostics._0_was_declared_here, declarationName)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19083,8 +19102,8 @@ namespace ts {
|
||||
if (importNode && !isImportCall(importNode)) {
|
||||
const sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target!), kind);
|
||||
if (!sigs || !sigs.length) return;
|
||||
diagnostic.relatedInformation = diagnostic.relatedInformation || [];
|
||||
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));
|
||||
Debug.assert(!diagnostic.relatedInformation);
|
||||
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)];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2397,6 +2397,10 @@
|
||||
"category": "Error",
|
||||
"code": 2727
|
||||
},
|
||||
"'{0}' was declared here.": {
|
||||
"category": "Error",
|
||||
"code": 2728
|
||||
},
|
||||
|
||||
"Import declaration '{0}' is using private name '{1}'.": {
|
||||
"category": "Error",
|
||||
|
||||
Reference in New Issue
Block a user