@@ -130,25 +130,53 @@ public function testFunctionName()
130
130
*
131
131
* @return void
132
132
*/
133
- public function testNested ()
133
+ public function testNestedOuter ()
134
134
{
135
135
$ tokens = self ::$ phpcsFile ->getTokens ();
136
136
137
- $ token = $ this ->getTargetToken ('/* testNested */ ' , T_FN );
137
+ $ token = $ this ->getTargetToken ('/* testNestedOuter */ ' , T_FN );
138
138
$ this ->backfillHelper ($ token );
139
139
140
140
$ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 5 ), 'Scope opener is not the arrow token ' );
141
- $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 23 ), 'Scope closer is not the semicolon token ' );
141
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 25 ), 'Scope closer is not the semicolon token ' );
142
142
143
143
$ opener = $ tokens [$ token ]['scope_opener ' ];
144
144
$ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 5 ), 'Opener scope opener is not the arrow token ' );
145
- $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 23 ), 'Opener scope closer is not the semicolon token ' );
145
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 25 ), 'Opener scope closer is not the semicolon token ' );
146
146
147
147
$ closer = $ tokens [$ token ]['scope_opener ' ];
148
148
$ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 5 ), 'Closer scope opener is not the arrow token ' );
149
- $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 23 ), 'Closer scope closer is not the semicolon token ' );
149
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 25 ), 'Closer scope closer is not the semicolon token ' );
150
150
151
- }//end testNested()
151
+ }//end testNestedOuter()
152
+
153
+
154
+ /**
155
+ * Test nested arrow functions.
156
+ *
157
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
158
+ *
159
+ * @return void
160
+ */
161
+ public function testNestedInner ()
162
+ {
163
+ $ tokens = self ::$ phpcsFile ->getTokens ();
164
+
165
+ $ token = $ this ->getTargetToken ('/* testNestedInner */ ' , T_FN );
166
+ $ this ->backfillHelper ($ token );
167
+
168
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 5 ), 'Scope opener is not the arrow token ' );
169
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 16 ), 'Scope closer is not the semicolon token ' );
170
+
171
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
172
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 5 ), 'Opener scope opener is not the arrow token ' );
173
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 16 ), 'Opener scope closer is not the semicolon token ' );
174
+
175
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
176
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 5 ), 'Closer scope opener is not the arrow token ' );
177
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 16 ), 'Closer scope closer is not the semicolon token ' );
178
+
179
+ }//end testNestedInner()
152
180
153
181
154
182
/**
@@ -179,6 +207,62 @@ public function testFunctionCall()
179
207
}//end testFunctionCall()
180
208
181
209
210
+ /**
211
+ * Test arrow functions that are included in chained calls.
212
+ *
213
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
214
+ *
215
+ * @return void
216
+ */
217
+ public function testChainedFunctionCall ()
218
+ {
219
+ $ tokens = self ::$ phpcsFile ->getTokens ();
220
+
221
+ $ token = $ this ->getTargetToken ('/* testChainedFunctionCall */ ' , T_FN );
222
+ $ this ->backfillHelper ($ token );
223
+
224
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 5 ), 'Scope opener is not the arrow token ' );
225
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 12 ), 'Scope closer is not the bracket token ' );
226
+
227
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
228
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 5 ), 'Opener scope opener is not the arrow token ' );
229
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 12 ), 'Opener scope closer is not the bracket token ' );
230
+
231
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
232
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 5 ), 'Closer scope opener is not the arrow token ' );
233
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 12 ), 'Closer scope closer is not the bracket token ' );
234
+
235
+ }//end testChainedFunctionCall()
236
+
237
+
238
+ /**
239
+ * Test arrow functions that are used as function arguments.
240
+ *
241
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
242
+ *
243
+ * @return void
244
+ */
245
+ public function testFunctionArgument ()
246
+ {
247
+ $ tokens = self ::$ phpcsFile ->getTokens ();
248
+
249
+ $ token = $ this ->getTargetToken ('/* testFunctionArgument */ ' , T_FN );
250
+ $ this ->backfillHelper ($ token );
251
+
252
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 8 ), 'Scope opener is not the arrow token ' );
253
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 15 ), 'Scope closer is not the comma token ' );
254
+
255
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
256
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 8 ), 'Opener scope opener is not the arrow token ' );
257
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 15 ), 'Opener scope closer is not the comma token ' );
258
+
259
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
260
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 8 ), 'Closer scope opener is not the arrow token ' );
261
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 15 ), 'Closer scope closer is not the comma token ' );
262
+
263
+ }//end testFunctionArgument()
264
+
265
+
182
266
/**
183
267
* Test arrow functions that use closures.
184
268
*
@@ -194,15 +278,15 @@ public function testClosure()
194
278
$ this ->backfillHelper ($ token );
195
279
196
280
$ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 5 ), 'Scope opener is not the arrow token ' );
197
- $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 60 ), 'Scope closer is not the semicolon token ' );
281
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 60 ), 'Scope closer is not the comma token ' );
198
282
199
283
$ opener = $ tokens [$ token ]['scope_opener ' ];
200
284
$ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 5 ), 'Opener scope opener is not the arrow token ' );
201
- $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 60 ), 'Opener scope closer is not the semicolon token ' );
285
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 60 ), 'Opener scope closer is not the comma token ' );
202
286
203
287
$ closer = $ tokens [$ token ]['scope_opener ' ];
204
288
$ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 5 ), 'Closer scope opener is not the arrow token ' );
205
- $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 60 ), 'Closer scope closer is not the semicolon token ' );
289
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 60 ), 'Closer scope closer is not the comma token ' );
206
290
207
291
}//end testClosure()
208
292
@@ -235,6 +319,62 @@ public function testReturnType()
235
319
}//end testReturnType()
236
320
237
321
322
+ /**
323
+ * Test arrow functions that return a reference.
324
+ *
325
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
326
+ *
327
+ * @return void
328
+ */
329
+ public function testReference ()
330
+ {
331
+ $ tokens = self ::$ phpcsFile ->getTokens ();
332
+
333
+ $ token = $ this ->getTargetToken ('/* testReference */ ' , T_FN );
334
+ $ this ->backfillHelper ($ token );
335
+
336
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 6 ), 'Scope opener is not the arrow token ' );
337
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 9 ), 'Scope closer is not the semicolon token ' );
338
+
339
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
340
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 6 ), 'Opener scope opener is not the arrow token ' );
341
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 9 ), 'Opener scope closer is not the semicolon token ' );
342
+
343
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
344
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 6 ), 'Closer scope opener is not the arrow token ' );
345
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 9 ), 'Closer scope closer is not the semicolon token ' );
346
+
347
+ }//end testReference()
348
+
349
+
350
+ /**
351
+ * Test arrow functions that are grouped by parenthesis.
352
+ *
353
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
354
+ *
355
+ * @return void
356
+ */
357
+ public function testGrouped ()
358
+ {
359
+ $ tokens = self ::$ phpcsFile ->getTokens ();
360
+
361
+ $ token = $ this ->getTargetToken ('/* testGrouped */ ' , T_FN );
362
+ $ this ->backfillHelper ($ token );
363
+
364
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 5 ), 'Scope opener is not the arrow token ' );
365
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 8 ), 'Scope closer is not the semicolon token ' );
366
+
367
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
368
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 5 ), 'Opener scope opener is not the arrow token ' );
369
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 8 ), 'Opener scope closer is not the semicolon token ' );
370
+
371
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
372
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 5 ), 'Closer scope opener is not the arrow token ' );
373
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 8 ), 'Closer scope closer is not the semicolon token ' );
374
+
375
+ }//end testGrouped()
376
+
377
+
238
378
/**
239
379
* Test that anonymous class tokens without parenthesis do not get assigned a parenthesis owner.
240
380
*
0 commit comments