@@ -131,63 +131,80 @@ public function processBracket($phpcsFile, $openBracket)
131
131
$ data = [$ found ];
132
132
$ fix = $ phpcsFile ->addFixableError ($ error , $ openBracket , 'SpacingBetween ' , $ data );
133
133
if ($ fix === true ) {
134
- $ phpcsFile ->fixer ->replaceToken (($ openBracket + 1 ), '' );
134
+ $ phpcsFile ->fixer ->beginChangeset ();
135
+ for ($ i = ($ openBracket + 1 ); $ tokens [$ i ]['code ' ] === T_WHITESPACE ; $ i ++) {
136
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
137
+ }
138
+
139
+ $ phpcsFile ->fixer ->endChangeset ();
135
140
}
136
141
}
137
142
138
143
// No params, so we don't check normal spacing rules.
139
144
return ;
140
- }
145
+ }//end if
141
146
}//end if
142
147
143
148
foreach ($ params as $ paramNumber => $ param ) {
144
149
if ($ param ['pass_by_reference ' ] === true ) {
145
150
$ refToken = $ param ['reference_token ' ];
146
151
147
- $ gap = 0 ;
148
152
if ($ tokens [($ refToken + 1 )]['code ' ] === T_WHITESPACE ) {
149
153
$ gap = $ tokens [($ refToken + 1 )]['length ' ];
150
- }
154
+ if ($ tokens [$ refToken ]['line ' ] !== $ tokens [($ refToken + 2 )]['line ' ]) {
155
+ $ gap = 'newline ' ;
156
+ }
151
157
152
- if ($ gap !== 0 ) {
153
158
$ error = 'Expected 0 spaces after reference operator for argument "%s"; %s found ' ;
154
159
$ data = [
155
160
$ param ['name ' ],
156
161
$ gap ,
157
162
];
158
163
$ fix = $ phpcsFile ->addFixableError ($ error , $ refToken , 'SpacingAfterReference ' , $ data );
159
164
if ($ fix === true ) {
160
- $ phpcsFile ->fixer ->replaceToken (($ refToken + 1 ), '' );
165
+ $ phpcsFile ->fixer ->beginChangeset ();
166
+ for ($ i = ($ refToken + 1 ); $ tokens [$ i ]['code ' ] === T_WHITESPACE ; $ i ++) {
167
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
168
+ }
169
+
170
+ $ phpcsFile ->fixer ->endChangeset ();
161
171
}
162
- }
172
+ }//end if
163
173
}//end if
164
174
165
175
if ($ param ['variable_length ' ] === true ) {
166
176
$ variadicToken = $ param ['variadic_token ' ];
167
177
168
- $ gap = 0 ;
169
178
if ($ tokens [($ variadicToken + 1 )]['code ' ] === T_WHITESPACE ) {
170
179
$ gap = $ tokens [($ variadicToken + 1 )]['length ' ];
171
- }
180
+ if ($ tokens [$ variadicToken ]['line ' ] !== $ tokens [($ variadicToken + 2 )]['line ' ]) {
181
+ $ gap = 'newline ' ;
182
+ }
172
183
173
- if ($ gap !== 0 ) {
174
184
$ error = 'Expected 0 spaces after variadic operator for argument "%s"; %s found ' ;
175
185
$ data = [
176
186
$ param ['name ' ],
177
187
$ gap ,
178
188
];
179
189
$ fix = $ phpcsFile ->addFixableError ($ error , $ variadicToken , 'SpacingAfterVariadic ' , $ data );
180
190
if ($ fix === true ) {
181
- $ phpcsFile ->fixer ->replaceToken (($ variadicToken + 1 ), '' );
191
+ $ phpcsFile ->fixer ->beginChangeset ();
192
+ for ($ i = ($ variadicToken + 1 ); $ tokens [$ i ]['code ' ] === T_WHITESPACE ; $ i ++) {
193
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
194
+ }
195
+
196
+ $ phpcsFile ->fixer ->endChangeset ();
182
197
}
183
- }
198
+ }//end if
184
199
}//end if
185
200
186
201
if (isset ($ param ['default_equal_token ' ]) === true ) {
187
202
$ equalToken = $ param ['default_equal_token ' ];
188
203
189
204
$ spacesBefore = 0 ;
190
- if (($ equalToken - $ param ['token ' ]) > 1 ) {
205
+ if ($ tokens [$ param ['token ' ]]['line ' ] !== $ tokens [$ equalToken ]['line ' ]) {
206
+ $ spacesBefore = 'newline ' ;
207
+ } else if ($ tokens [($ param ['token ' ] + 1 )]['code ' ] === T_WHITESPACE ) {
191
208
$ spacesBefore = $ tokens [($ param ['token ' ] + 1 )]['length ' ];
192
209
}
193
210
@@ -198,19 +215,30 @@ public function processBracket($phpcsFile, $openBracket)
198
215
$ spacesBefore ,
199
216
];
200
217
201
- $ fix = $ phpcsFile ->addFixableError ($ error , $ equalToken , 'SpaceBeforeEquals ' , $ data );
202
- if ($ fix === true ) {
203
- $ padding = str_repeat (' ' , $ this ->equalsSpacing );
204
- if ($ spacesBefore === 0 ) {
205
- $ phpcsFile ->fixer ->addContentBefore ($ equalToken , $ padding );
206
- } else {
207
- $ phpcsFile ->fixer ->replaceToken (($ equalToken - 1 ), $ padding );
218
+ $ nextNonWhitespace = $ phpcsFile ->findNext (T_WHITESPACE , ($ param ['token ' ] + 1 ), $ equalToken , true );
219
+ if ($ nextNonWhitespace !== false ) {
220
+ $ phpcsFile ->addError ($ error , $ equalToken , 'SpaceBeforeEquals ' , $ data );
221
+ } else {
222
+ $ fix = $ phpcsFile ->addFixableError ($ error , $ equalToken , 'SpaceBeforeEquals ' , $ data );
223
+ if ($ fix === true ) {
224
+ $ padding = str_repeat (' ' , $ this ->equalsSpacing );
225
+
226
+ $ phpcsFile ->fixer ->beginChangeset ();
227
+ $ phpcsFile ->fixer ->addContent ($ param ['token ' ], $ padding );
228
+
229
+ for ($ i = ($ param ['token ' ] + 1 ); $ tokens [$ i ]['code ' ] === T_WHITESPACE ; $ i ++) {
230
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
231
+ }
232
+
233
+ $ phpcsFile ->fixer ->endChangeset ();
208
234
}
209
235
}
210
236
}//end if
211
237
212
238
$ spacesAfter = 0 ;
213
- if ($ tokens [($ equalToken + 1 )]['code ' ] === T_WHITESPACE ) {
239
+ if ($ tokens [$ equalToken ]['line ' ] !== $ tokens [$ param ['default_token ' ]]['line ' ]) {
240
+ $ spacesAfter = 'newline ' ;
241
+ } else if ($ tokens [($ equalToken + 1 )]['code ' ] === T_WHITESPACE ) {
214
242
$ spacesAfter = $ tokens [($ equalToken + 1 )]['length ' ];
215
243
}
216
244
@@ -221,13 +249,22 @@ public function processBracket($phpcsFile, $openBracket)
221
249
$ spacesAfter ,
222
250
];
223
251
224
- $ fix = $ phpcsFile ->addFixableError ($ error , $ equalToken , 'SpaceAfterEquals ' , $ data );
225
- if ($ fix === true ) {
226
- $ padding = str_repeat (' ' , $ this ->equalsSpacing );
227
- if ($ spacesAfter === 0 ) {
252
+ $ nextNonWhitespace = $ phpcsFile ->findNext (T_WHITESPACE , ($ equalToken + 1 ), $ param ['default_token ' ], true );
253
+ if ($ nextNonWhitespace !== false ) {
254
+ $ phpcsFile ->addError ($ error , $ equalToken , 'SpaceAfterEquals ' , $ data );
255
+ } else {
256
+ $ fix = $ phpcsFile ->addFixableError ($ error , $ equalToken , 'SpaceAfterEquals ' , $ data );
257
+ if ($ fix === true ) {
258
+ $ padding = str_repeat (' ' , $ this ->equalsSpacing );
259
+
260
+ $ phpcsFile ->fixer ->beginChangeset ();
228
261
$ phpcsFile ->fixer ->addContent ($ equalToken , $ padding );
229
- } else {
230
- $ phpcsFile ->fixer ->replaceToken (($ equalToken + 1 ), $ padding );
262
+
263
+ for ($ i = ($ equalToken + 1 ); $ tokens [$ i ]['code ' ] === T_WHITESPACE ; $ i ++) {
264
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
265
+ }
266
+
267
+ $ phpcsFile ->fixer ->endChangeset ();
231
268
}
232
269
}
233
270
}//end if
@@ -275,18 +312,53 @@ public function processBracket($phpcsFile, $openBracket)
275
312
}
276
313
277
314
if ($ commaToken !== false ) {
278
- if ($ tokens [($ commaToken - 1 )]['code ' ] === T_WHITESPACE ) {
315
+ $ endOfPreviousParam = $ phpcsFile ->findPrevious (Tokens::$ emptyTokens , ($ commaToken - 1 ), null , true );
316
+
317
+ $ spaceBeforeComma = 0 ;
318
+ if ($ tokens [$ endOfPreviousParam ]['line ' ] !== $ tokens [$ commaToken ]['line ' ]) {
319
+ $ spaceBeforeComma = 'newline ' ;
320
+ } else if ($ tokens [($ commaToken - 1 )]['code ' ] === T_WHITESPACE ) {
321
+ $ spaceBeforeComma = $ tokens [($ commaToken - 1 )]['length ' ];
322
+ }
323
+
324
+ if ($ spaceBeforeComma !== 0 ) {
279
325
$ error = 'Expected 0 spaces between argument "%s" and comma; %s found ' ;
280
326
$ data = [
281
327
$ params [($ paramNumber - 1 )]['name ' ],
282
- $ tokens [( $ commaToken - 1 )][ ' length ' ] ,
328
+ $ spaceBeforeComma ,
283
329
];
284
330
285
331
$ fix = $ phpcsFile ->addFixableError ($ error , $ commaToken , 'SpaceBeforeComma ' , $ data );
286
332
if ($ fix === true ) {
287
- $ phpcsFile ->fixer ->replaceToken (($ commaToken - 1 ), '' );
288
- }
289
- }
333
+ $ startOfCurrentParam = $ phpcsFile ->findNext (Tokens::$ emptyTokens , ($ commaToken + 1 ), null , true );
334
+
335
+ $ phpcsFile ->fixer ->beginChangeset ();
336
+ $ phpcsFile ->fixer ->addContent ($ endOfPreviousParam , ', ' );
337
+ $ phpcsFile ->fixer ->replaceToken ($ commaToken , '' );
338
+
339
+ if ($ tokens [$ commaToken ]['line ' ] === $ tokens [$ startOfCurrentParam ]['line ' ]) {
340
+ for ($ i = ($ commaToken + 1 ); $ tokens [$ i ]['code ' ] === T_WHITESPACE ; $ i ++) {
341
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
342
+ }
343
+ } else {
344
+ for ($ i = ($ commaToken - 1 );
345
+ $ tokens [$ i ]['code ' ] === T_WHITESPACE && $ tokens [$ endOfPreviousParam ]['line ' ] !== $ tokens [$ i ]['line ' ];
346
+ $ i --
347
+ ) {
348
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
349
+ }
350
+
351
+ for ($ i = ($ commaToken + 1 );
352
+ $ tokens [$ i ]['code ' ] === T_WHITESPACE && $ tokens [$ commaToken ]['line ' ] === $ tokens [$ i ]['line ' ];
353
+ $ i ++
354
+ ) {
355
+ $ phpcsFile ->fixer ->replaceToken ($ i , '' );
356
+ }
357
+ }
358
+
359
+ $ phpcsFile ->fixer ->endChangeset ();
360
+ }//end if
361
+ }//end if
290
362
291
363
// Don't check spacing after the comma if it is the last content on the line.
292
364
$ checkComma = true ;
@@ -324,10 +396,7 @@ public function processBracket($phpcsFile, $openBracket)
324
396
}
325
397
}//end if
326
398
} else {
327
- $ hint = $ phpcsFile ->getTokensAsString ($ param ['type_hint_token ' ], (($ param ['type_hint_end_token ' ] - $ param ['type_hint_token ' ]) + 1 ));
328
- if ($ param ['nullable_type ' ] === true ) {
329
- $ hint = '? ' .$ hint ;
330
- }
399
+ $ hint = $ param ['type_hint ' ];
331
400
332
401
if ($ tokens [($ commaToken + 1 )]['code ' ] !== T_WHITESPACE ) {
333
402
$ error = 'Expected 1 space between comma and type hint "%s"; 0 found ' ;
0 commit comments