@@ -1053,18 +1053,29 @@ namespace ts.textChanges {
1053
1053
break ;
1054
1054
1055
1055
case SyntaxKind . TypeParameter : {
1056
- const typeParameters = getEffectiveTypeParameterDeclarations ( < DeclarationWithTypeParameters > node . parent ) ;
1057
- if ( typeParameters . length === 1 ) {
1058
- const { pos, end } = cast ( typeParameters , isNodeArray ) ;
1059
- const previousToken = getTokenAtPosition ( sourceFile , pos - 1 ) ;
1060
- const nextToken = getTokenAtPosition ( sourceFile , end ) ;
1061
- Debug . assert ( previousToken . kind === SyntaxKind . LessThanToken ) ;
1062
- Debug . assert ( nextToken . kind === SyntaxKind . GreaterThanToken ) ;
1063
-
1064
- changes . deleteNodeRange ( sourceFile , previousToken , nextToken ) ;
1065
- }
1066
- else {
1067
- deleteNodeInList ( changes , deletedNodesInLists , sourceFile , node ) ;
1056
+ const typeParam = node as TypeParameterDeclaration ;
1057
+ switch ( typeParam . parent . kind ) {
1058
+ case SyntaxKind . JSDocTemplateTag :
1059
+ changes . deleteRange ( sourceFile , getRangeToDeleteJsDocTag ( typeParam . parent , sourceFile ) ) ;
1060
+ break ;
1061
+ case SyntaxKind . InferType :
1062
+ // TODO: GH#25594
1063
+ break ;
1064
+ default : {
1065
+ const typeParameters = getEffectiveTypeParameterDeclarations ( typeParam . parent ) ;
1066
+ if ( typeParameters . length === 1 ) {
1067
+ const { pos, end } = cast ( typeParameters , isNodeArray ) ;
1068
+ const previousToken = getTokenAtPosition ( sourceFile , pos - 1 ) ;
1069
+ const nextToken = getTokenAtPosition ( sourceFile , end ) ;
1070
+ Debug . assert ( previousToken . kind === SyntaxKind . LessThanToken ) ;
1071
+ Debug . assert ( nextToken . kind === SyntaxKind . GreaterThanToken ) ;
1072
+
1073
+ changes . deleteNodeRange ( sourceFile , previousToken , nextToken ) ;
1074
+ }
1075
+ else {
1076
+ deleteNodeInList ( changes , deletedNodesInLists , sourceFile , node ) ;
1077
+ }
1078
+ }
1068
1079
}
1069
1080
break ;
1070
1081
}
@@ -1166,6 +1177,12 @@ namespace ts.textChanges {
1166
1177
Debug . assertNever ( gp ) ;
1167
1178
}
1168
1179
}
1180
+
1181
+ function getRangeToDeleteJsDocTag ( node : JSDocTag , sourceFile : SourceFile ) : TextRange {
1182
+ const { parent } = node ;
1183
+ const toDelete = parent . kind === SyntaxKind . JSDocComment && parent . comment === undefined && parent . tags ! . length === 1 ? parent : node ;
1184
+ return createTextRangeFromNode ( toDelete , sourceFile ) ;
1185
+ }
1169
1186
}
1170
1187
1171
1188
/** Warning: This deletes comments too. See `copyComments` in `convertFunctionToEs6Class`. */
0 commit comments