@@ -92,54 +92,36 @@ namespace ts.codefix {
92
92
newSignatureDeclaration . parent = enclosingDeclaration ;
93
93
newSignatureDeclaration . name = signatures [ 0 ] . getDeclaration ( ) . name ;
94
94
95
- let maxArgs = - 1 ;
95
+ let maxNonRestArgs = - 1 ;
96
96
let minArgumentCount = signatures [ 0 ] . minArgumentCount ;
97
97
let hasRestParameter = false ;
98
- let allMaxArgsAreRest = true ;
99
98
for ( let i = 0 ; i < signatures . length ; i ++ ) {
100
99
const sig = signatures [ i ] ;
101
100
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
- }
109
101
hasRestParameter = hasRestParameter || sig . hasRestParameter ;
102
+ const nonRestLength = sig . parameters . length - ( sig . hasRestParameter ? 1 : 0 ) ;
103
+ if ( nonRestLength > maxNonRestArgs ) {
104
+ maxNonRestArgs = nonRestLength ;
105
+ }
110
106
}
111
107
112
108
const anyTypeNode : TypeNode = createNode ( SyntaxKind . AnyKeyword ) as TypeNode ;
113
109
const optionalToken = createToken ( SyntaxKind . QuestionToken ) ;
114
110
115
111
newSignatureDeclaration . parameters = createNodeArray < ParameterDeclaration > ( ) ;
116
- for ( let i = 0 ; i < maxArgs - 1 ; i ++ ) {
112
+ for ( let i = 0 ; i < maxNonRestArgs ; i ++ ) {
117
113
const newParameter = createParameterDeclaration ( i , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
118
114
newSignatureDeclaration . parameters . push ( newParameter ) ;
119
115
}
120
116
121
- let lastParameter : ParameterDeclaration ;
122
117
if ( hasRestParameter ) {
123
-
124
118
const anyArrayTypeNode = createNode ( SyntaxKind . ArrayType ) as ArrayTypeNode ;
125
119
anyArrayTypeNode . elementType = anyTypeNode ;
126
120
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 ) ;
137
124
}
138
- else {
139
- lastParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
140
- }
141
-
142
- newSignatureDeclaration . parameters . push ( lastParameter ) ;
143
125
144
126
newSignatureDeclaration . type = anyTypeNode ;
145
127
newSignatureDeclaration . type . parent = newSignatureDeclaration ;
0 commit comments