@@ -42,28 +42,22 @@ namespace ts.codefix {
42
42
43
43
function doChange ( changes : textChanges . ChangeTracker , sourceFile : SourceFile , decl : DeclarationWithType ) : void {
44
44
if ( isFunctionLikeDeclaration ( decl ) && ( getJSDocReturnType ( decl ) || decl . parameters . some ( p => ! ! getJSDocType ( p ) ) ) ) {
45
- const typeParameters = getJSDocTypeParameterDeclarations ( decl ) ;
46
- const returnType = getJSDocReturnType ( decl ) ;
47
- const returnTypeNode = returnType && transformJSDocType ( returnType ) ;
48
-
49
- if ( isArrowFunction ( decl ) && ! findChildOfKind ( decl , SyntaxKind . OpenParenToken , sourceFile ) ) {
50
- const params = decl . parameters . map ( p => {
51
- const paramType = getJSDocType ( p ) ;
52
- return paramType && ! p . type ? updateParameter ( p , p . decorators , p . modifiers , p . dotDotDotToken , p . name , p . questionToken , transformJSDocType ( paramType ) , p . initializer ) : p ;
53
- } ) ;
54
- changes . replaceNode ( sourceFile , decl , updateArrowFunction ( decl , decl . modifiers , decl . typeParameters || typeParameters , params , decl . type || returnTypeNode , decl . equalsGreaterThanToken , decl . body ) ) ;
45
+ if ( ! decl . typeParameters ) {
46
+ const typeParameters = getJSDocTypeParameterDeclarations ( decl ) ;
47
+ if ( typeParameters ) changes . insertTypeParameters ( sourceFile , decl , typeParameters ) ;
55
48
}
56
- else {
57
- if ( typeParameters && ! decl . typeParameters ) {
58
- changes . insertTypeParameters ( sourceFile , decl , typeParameters ) ;
49
+ const needParens = isArrowFunction ( decl ) && ! findChildOfKind ( decl , SyntaxKind . OpenParenToken , sourceFile ) ;
50
+ if ( needParens ) changes . insertNodeBefore ( sourceFile , first ( decl . parameters ) , createToken ( SyntaxKind . OpenParenToken ) ) ;
51
+ for ( const param of decl . parameters ) {
52
+ if ( ! param . type ) {
53
+ const paramType = getJSDocType ( param ) ;
54
+ if ( paramType ) changes . insertTypeAnnotation ( sourceFile , param , transformJSDocType ( paramType ) ) ;
59
55
}
60
- for ( const param of decl . parameters ) {
61
- if ( ! param . type ) {
62
- const paramType = getJSDocType ( param ) ;
63
- if ( paramType ) changes . insertTypeAnnotation ( sourceFile , param , transformJSDocType ( paramType ) ) ;
64
- }
65
- }
66
- if ( returnTypeNode && ! decl . type ) changes . insertTypeAnnotation ( sourceFile , decl , returnTypeNode ) ;
56
+ }
57
+ if ( needParens ) changes . insertNodeAfter ( sourceFile , last ( decl . parameters ) , createToken ( SyntaxKind . CloseParenToken ) ) ;
58
+ if ( ! decl . type ) {
59
+ const returnType = getJSDocReturnType ( decl ) ;
60
+ if ( returnType ) changes . insertTypeAnnotation ( sourceFile , decl , transformJSDocType ( returnType ) ) ;
67
61
}
68
62
}
69
63
else {
0 commit comments