@@ -4526,6 +4526,7 @@ var ts;
4526
4526
_0_is_declared_but_never_used: diag(6196, ts.DiagnosticCategory.Error, "_0_is_declared_but_never_used_6196", "'{0}' is declared but never used.", true),
4527
4527
Include_modules_imported_with_json_extension: diag(6197, ts.DiagnosticCategory.Message, "Include_modules_imported_with_json_extension_6197", "Include modules imported with '.json' extension"),
4528
4528
All_destructured_elements_are_unused: diag(6198, ts.DiagnosticCategory.Error, "All_destructured_elements_are_unused_6198", "All destructured elements are unused.", true),
4529
+ All_variables_are_unused: diag(6199, ts.DiagnosticCategory.Error, "All_variables_are_unused_6199", "All variables are unused.", true),
4529
4530
Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
4530
4531
Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
4531
4532
Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0: diag(6202, ts.DiagnosticCategory.Error, "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202", "Project references may not form a circular graph. Cycle detected: {0}"),
@@ -4634,6 +4635,7 @@ var ts;
4634
4635
Implement_inherited_abstract_class: diag(90007, ts.DiagnosticCategory.Message, "Implement_inherited_abstract_class_90007", "Implement inherited abstract class"),
4635
4636
Add_0_to_unresolved_variable: diag(90008, ts.DiagnosticCategory.Message, "Add_0_to_unresolved_variable_90008", "Add '{0}.' to unresolved variable"),
4636
4637
Remove_destructuring: diag(90009, ts.DiagnosticCategory.Message, "Remove_destructuring_90009", "Remove destructuring"),
4638
+ Remove_variable_statement: diag(90010, ts.DiagnosticCategory.Message, "Remove_variable_statement_90010", "Remove variable statement"),
4637
4639
Import_0_from_module_1: diag(90013, ts.DiagnosticCategory.Message, "Import_0_from_module_1_90013", "Import '{0}' from module \"{1}\""),
4638
4640
Change_0_to_1: diag(90014, ts.DiagnosticCategory.Message, "Change_0_to_1_90014", "Change '{0}' to '{1}'"),
4639
4641
Add_0_to_existing_import_declaration_from_1: diag(90015, ts.DiagnosticCategory.Message, "Add_0_to_existing_import_declaration_from_1_90015", "Add '{0}' to existing import declaration from \"{1}\""),
@@ -38935,13 +38937,6 @@ var ts;
38935
38937
}
38936
38938
function errorUnusedLocal(declaration, name, addDiagnostic) {
38937
38939
var node = ts.getNameOfDeclaration(declaration) || declaration;
38938
- if (isIdentifierThatStartsWithUnderScore(node)) {
38939
- var declaration_2 = ts.getRootDeclaration(node.parent);
38940
- if ((declaration_2.kind === 231 && ts.isForInOrOfStatement(declaration_2.parent.parent)) ||
38941
- declaration_2.kind === 147) {
38942
- return;
38943
- }
38944
- }
38945
38940
var message = isTypeDeclaration(declaration) ? ts.Diagnostics._0_is_declared_but_never_used : ts.Diagnostics._0_is_declared_but_its_value_is_never_read;
38946
38941
addDiagnostic(0, ts.createDiagnosticForNodeSpan(ts.getSourceFileOfNode(declaration), declaration, node, message, name));
38947
38942
}
@@ -39014,6 +39009,7 @@ var ts;
39014
39009
return;
39015
39010
var unusedImports = ts.createMap();
39016
39011
var unusedDestructures = ts.createMap();
39012
+ var unusedVariables = ts.createMap();
39017
39013
nodeWithLocals.locals.forEach(function (local) {
39018
39014
if (local.flags & 262144 ? !(local.flags & 3 && !(local.isReferenced & 3)) : local.isReferenced || local.exportSymbol) {
39019
39015
return;
@@ -39031,6 +39027,11 @@ var ts;
39031
39027
addToGroup(unusedDestructures, declaration.parent, declaration, getNodeId);
39032
39028
}
39033
39029
}
39030
+ else if (ts.isVariableDeclaration(declaration)) {
39031
+ if (!isIdentifierThatStartsWithUnderScore(declaration.name) || !ts.isForInOrOfStatement(declaration.parent.parent)) {
39032
+ addToGroup(unusedVariables, declaration.parent, declaration, getNodeId);
39033
+ }
39034
+ }
39034
39035
else {
39035
39036
var parameter = local.valueDeclaration && tryGetRootParameterDeclaration(local.valueDeclaration);
39036
39037
if (parameter) {
@@ -39048,47 +39049,74 @@ var ts;
39048
39049
unusedImports.forEach(function (_a) {
39049
39050
var importClause = _a[0], unuseds = _a[1];
39050
39051
var importDecl = importClause.parent;
39051
- if (forEachImportedDeclaration(importClause, function (d) { return !ts.contains(unuseds, d); })) {
39052
+ var nDeclarations = (importClause.name ? 1 : 0) +
39053
+ (importClause.namedBindings ?
39054
+ (importClause.namedBindings.kind === 245 ? 1 : importClause.namedBindings.elements.length)
39055
+ : 0);
39056
+ if (nDeclarations === unuseds.length) {
39057
+ addDiagnostic(0, unuseds.length === 1
39058
+ ? ts.createDiagnosticForNode(importDecl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.first(unuseds).name))
39059
+ : ts.createDiagnosticForNode(importDecl, ts.Diagnostics.All_imports_in_import_declaration_are_unused));
39060
+ }
39061
+ else {
39052
39062
for (var _i = 0, unuseds_1 = unuseds; _i < unuseds_1.length; _i++) {
39053
39063
var unused = unuseds_1[_i];
39054
39064
errorUnusedLocal(unused, ts.idText(unused.name), addDiagnostic);
39055
39065
}
39056
39066
}
39057
- else if (unuseds.length === 1) {
39058
- addDiagnostic(0, ts.createDiagnosticForNode(importDecl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.first(unuseds).name)));
39059
- }
39060
- else {
39061
- addDiagnostic(0, ts.createDiagnosticForNode(importDecl, ts.Diagnostics.All_imports_in_import_declaration_are_unused));
39062
- }
39063
39067
});
39064
39068
unusedDestructures.forEach(function (_a) {
39065
39069
var bindingPattern = _a[0], bindingElements = _a[1];
39066
39070
var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 : 0;
39067
- if (!bindingPattern.elements.every(function (e) { return ts.contains(bindingElements, e); })) {
39071
+ if (bindingPattern.elements.length === bindingElements.length) {
39072
+ if (bindingElements.length === 1 && bindingPattern.parent.kind === 231 && bindingPattern.parent.parent.kind === 232) {
39073
+ addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
39074
+ }
39075
+ else {
39076
+ addDiagnostic(kind, bindingElements.length === 1
39077
+ ? ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(ts.first(bindingElements).name, ts.isIdentifier)))
39078
+ : ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics.All_destructured_elements_are_unused));
39079
+ }
39080
+ }
39081
+ else {
39068
39082
for (var _i = 0, bindingElements_1 = bindingElements; _i < bindingElements_1.length; _i++) {
39069
39083
var e = bindingElements_1[_i];
39070
39084
addDiagnostic(kind, ts.createDiagnosticForNode(e, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(e.name, ts.isIdentifier))));
39071
39085
}
39072
39086
}
39073
- else if (bindingElements.length === 1) {
39074
- addDiagnostic(kind, ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(ts.first(bindingElements).name, ts.isIdentifier))));
39087
+ });
39088
+ unusedVariables.forEach(function (_a) {
39089
+ var declarationList = _a[0], declarations = _a[1];
39090
+ if (declarationList.declarations.length === declarations.length) {
39091
+ addDiagnostic(0, declarations.length === 1
39092
+ ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
39093
+ : ts.createDiagnosticForNode(declarationList.parent.kind === 213 ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
39075
39094
}
39076
39095
else {
39077
- addDiagnostic(kind, ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics.All_destructured_elements_are_unused));
39096
+ for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
39097
+ var decl = declarations_5[_i];
39098
+ addDiagnostic(0, ts.createDiagnosticForNode(decl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(decl.name, ts.isIdentifier))));
39099
+ }
39078
39100
}
39079
39101
});
39080
39102
}
39103
+ function bindingNameText(name) {
39104
+ switch (name.kind) {
39105
+ case 71:
39106
+ return ts.idText(name);
39107
+ case 180:
39108
+ case 179:
39109
+ return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
39110
+ default:
39111
+ return ts.Debug.assertNever(name);
39112
+ }
39113
+ }
39081
39114
function isImportedDeclaration(node) {
39082
39115
return node.kind === 244 || node.kind === 247 || node.kind === 245;
39083
39116
}
39084
39117
function importClauseFromImported(decl) {
39085
39118
return decl.kind === 244 ? decl : decl.kind === 245 ? decl.parent : decl.parent.parent;
39086
39119
}
39087
- function forEachImportedDeclaration(importClause, cb) {
39088
- var defaultName = importClause.name, namedBindings = importClause.namedBindings;
39089
- return (defaultName && cb(importClause)) ||
39090
- namedBindings && (namedBindings.kind === 245 ? cb(namedBindings) : ts.forEach(namedBindings.elements, cb));
39091
- }
39092
39120
function checkBlock(node) {
39093
39121
if (node.kind === 212) {
39094
39122
checkGrammarStatementInAmbientContext(node);
@@ -39983,8 +40011,8 @@ var ts;
39983
40011
var type = getDeclaredTypeOfSymbol(symbol);
39984
40012
if (!areTypeParametersIdentical(declarations, type.localTypeParameters)) {
39985
40013
var name = symbolToString(symbol);
39986
- for (var _i = 0, declarations_5 = declarations; _i < declarations_5 .length; _i++) {
39987
- var declaration = declarations_5 [_i];
40014
+ for (var _i = 0, declarations_6 = declarations; _i < declarations_6 .length; _i++) {
40015
+ var declaration = declarations_6 [_i];
39988
40016
error(declaration.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters, name);
39989
40017
}
39990
40018
}
@@ -39993,8 +40021,8 @@ var ts;
39993
40021
function areTypeParametersIdentical(declarations, targetParameters) {
39994
40022
var maxTypeArgumentCount = ts.length(targetParameters);
39995
40023
var minTypeArgumentCount = getMinTypeArgumentCount(targetParameters);
39996
- for (var _i = 0, declarations_6 = declarations; _i < declarations_6 .length; _i++) {
39997
- var declaration = declarations_6 [_i];
40024
+ for (var _i = 0, declarations_7 = declarations; _i < declarations_7 .length; _i++) {
40025
+ var declaration = declarations_7 [_i];
39998
40026
var sourceParameters = ts.getEffectiveTypeParameterDeclarations(declaration);
39999
40027
var numTypeParameters = sourceParameters.length;
40000
40028
if (numTypeParameters < minTypeArgumentCount || numTypeParameters > maxTypeArgumentCount) {
@@ -40527,8 +40555,8 @@ var ts;
40527
40555
}
40528
40556
function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
40529
40557
var declarations = symbol.declarations;
40530
- for (var _i = 0, declarations_7 = declarations; _i < declarations_7 .length; _i++) {
40531
- var declaration = declarations_7 [_i];
40558
+ for (var _i = 0, declarations_8 = declarations; _i < declarations_8 .length; _i++) {
40559
+ var declaration = declarations_8 [_i];
40532
40560
if ((declaration.kind === 234 ||
40533
40561
(declaration.kind === 233 && ts.nodeIsPresent(declaration.body))) &&
40534
40562
!(declaration.flags & 4194304)) {
@@ -40917,8 +40945,8 @@ var ts;
40917
40945
return;
40918
40946
}
40919
40947
if (exportedDeclarationsCount > 1) {
40920
- for (var _i = 0, declarations_8 = declarations; _i < declarations_8 .length; _i++) {
40921
- var declaration = declarations_8 [_i];
40948
+ for (var _i = 0, declarations_9 = declarations; _i < declarations_9 .length; _i++) {
40949
+ var declaration = declarations_9 [_i];
40922
40950
if (isNotOverload(declaration)) {
40923
40951
diagnostics.add(ts.createDiagnosticForNode(declaration, ts.Diagnostics.Cannot_redeclare_exported_variable_0, ts.unescapeLeadingUnderscores(id)));
40924
40952
}
0 commit comments