(node, addDiagnostic)
| 82044 | } |
| 82045 | } |
| 82046 | function checkUnusedTypeParameters(node, addDiagnostic) { |
| 82047 | // Only report errors on the last declaration for the type parameter container; |
| 82048 | // this ensures that all uses have been accounted for. |
| 82049 | var declarations = getSymbolOfNode(node).declarations; |
| 82050 | if (!declarations || ts.last(declarations) !== node) |
| 82051 | return; |
| 82052 | var typeParameters = ts.getEffectiveTypeParameterDeclarations(node); |
| 82053 | var seenParentsWithEveryUnused = new ts.Set(); |
| 82054 | for (var _i = 0, typeParameters_3 = typeParameters; _i < typeParameters_3.length; _i++) { |
| 82055 | var typeParameter = typeParameters_3[_i]; |
| 82056 | if (!isTypeParameterUnused(typeParameter)) |
| 82057 | continue; |
| 82058 | var name = ts.idText(typeParameter.name); |
| 82059 | var parent = typeParameter.parent; |
| 82060 | if (parent.kind !== 190 /* SyntaxKind.InferType */ && parent.typeParameters.every(isTypeParameterUnused)) { |
| 82061 | if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) { |
| 82062 | var sourceFile = ts.getSourceFileOfNode(parent); |
| 82063 | var range = ts.isJSDocTemplateTag(parent) |
| 82064 | // Whole @template tag |
| 82065 | ? ts.rangeOfNode(parent) |
| 82066 | // Include the `<>` in the error message |
| 82067 | : ts.rangeOfTypeParameters(sourceFile, parent.typeParameters); |
| 82068 | var only = parent.typeParameters.length === 1; |
| 82069 | //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag |
| 82070 | var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused; |
| 82071 | var arg0 = only ? name : undefined; |
| 82072 | addDiagnostic(typeParameter, 1 /* UnusedKind.Parameter */, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0)); |
| 82073 | } |
| 82074 | } |
| 82075 | else { |
| 82076 | //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag |
| 82077 | addDiagnostic(typeParameter, 1 /* UnusedKind.Parameter */, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name)); |
| 82078 | } |
| 82079 | } |
| 82080 | } |
| 82081 | function isTypeParameterUnused(typeParameter) { |
| 82082 | return !(getMergedSymbol(typeParameter.symbol).isReferenced & 262144 /* SymbolFlags.TypeParameter */) && !isIdentifierThatStartsWithUnderscore(typeParameter.name); |
| 82083 | } |
no test coverage detected