@@ -92,54 +92,36 @@ namespace ts.codefix {
9292 newSignatureDeclaration . parent = enclosingDeclaration ;
9393 newSignatureDeclaration . name = signatures [ 0 ] . getDeclaration ( ) . name ;
9494
95- let maxArgs = - 1 ;
95+ let maxNonRestArgs = - 1 ;
9696 let minArgumentCount = signatures [ 0 ] . minArgumentCount ;
9797 let hasRestParameter = false ;
98- let allMaxArgsAreRest = true ;
9998 for ( let i = 0 ; i < signatures . length ; i ++ ) {
10099 const sig = signatures [ i ] ;
101100 minArgumentCount = Math . min ( sig . minArgumentCount , minArgumentCount ) ;
102- if ( sig . parameters . length > maxArgs ) {
103- maxArgs = sig . parameters . length ;
104- allMaxArgsAreRest = sig . hasRestParameter ;
105- }
106- else if ( sig . parameters . length === maxArgs ) {
107- allMaxArgsAreRest = allMaxArgsAreRest && sig . hasRestParameter ;
108- }
109101 hasRestParameter = hasRestParameter || sig . hasRestParameter ;
102+ const nonRestLength = sig . parameters . length - ( sig . hasRestParameter ? 1 : 0 ) ;
103+ if ( nonRestLength > maxNonRestArgs ) {
104+ maxNonRestArgs = nonRestLength ;
105+ }
110106 }
111107
112108 const anyTypeNode : TypeNode = createNode ( SyntaxKind . AnyKeyword ) as TypeNode ;
113109 const optionalToken = createToken ( SyntaxKind . QuestionToken ) ;
114110
115111 newSignatureDeclaration . parameters = createNodeArray < ParameterDeclaration > ( ) ;
116- for ( let i = 0 ; i < maxArgs - 1 ; i ++ ) {
112+ for ( let i = 0 ; i < maxNonRestArgs ; i ++ ) {
117113 const newParameter = createParameterDeclaration ( i , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
118114 newSignatureDeclaration . parameters . push ( newParameter ) ;
119115 }
120116
121- let lastParameter : ParameterDeclaration ;
122117 if ( hasRestParameter ) {
123-
124118 const anyArrayTypeNode = createNode ( SyntaxKind . ArrayType ) as ArrayTypeNode ;
125119 anyArrayTypeNode . elementType = anyTypeNode ;
126120
127- if ( ! allMaxArgsAreRest ) {
128- const newParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
129- newSignatureDeclaration . parameters . push ( newParameter ) ;
130- lastParameter = createParameterDeclaration ( maxArgs , minArgumentCount , anyArrayTypeNode , newSignatureDeclaration ) ;
131- }
132- else {
133- lastParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyArrayTypeNode , newSignatureDeclaration ) ;
134- }
135-
136- lastParameter . dotDotDotToken = createToken ( SyntaxKind . DotDotDotToken ) ;
121+ const restParameter = createParameterDeclaration ( maxNonRestArgs , minArgumentCount , anyArrayTypeNode , newSignatureDeclaration ) ;
122+ restParameter . dotDotDotToken = createToken ( SyntaxKind . DotDotDotToken ) ;
123+ newSignatureDeclaration . parameters . push ( restParameter ) ;
137124 }
138- else {
139- lastParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
140- }
141-
142- newSignatureDeclaration . parameters . push ( lastParameter ) ;
143125
144126 newSignatureDeclaration . type = anyTypeNode ;
145127 newSignatureDeclaration . type . parent = newSignatureDeclaration ;
0 commit comments