@@ -459,6 +459,42 @@ public function testNullableNamespace()
459
459
}//end testNullableNamespace()
460
460
461
461
462
+ /**
463
+ * Test arrow functions that use self/parent/callable return types.
464
+ *
465
+ * @covers PHP_CodeSniffer\Tokenizers\PHP::processAdditional
466
+ *
467
+ * @return void
468
+ */
469
+ public function testKeywordReturnTypes ()
470
+ {
471
+ $ tokens = self ::$ phpcsFile ->getTokens ();
472
+
473
+ $ testMarkers = [
474
+ 'Self ' ,
475
+ 'Parent ' ,
476
+ 'Callable ' ,
477
+ ];
478
+
479
+ foreach ($ testMarkers as $ marker ) {
480
+ $ token = $ this ->getTargetToken ('/* test ' .$ marker .'ReturnType */ ' , T_FN );
481
+ $ this ->backfillHelper ($ token );
482
+
483
+ $ this ->assertSame ($ tokens [$ token ]['scope_opener ' ], ($ token + 11 ), "Scope opener is not the arrow token (for $ marker) " );
484
+ $ this ->assertSame ($ tokens [$ token ]['scope_closer ' ], ($ token + 14 ), "Scope closer is not the semicolon token(for $ marker) " );
485
+
486
+ $ opener = $ tokens [$ token ]['scope_opener ' ];
487
+ $ this ->assertSame ($ tokens [$ opener ]['scope_opener ' ], ($ token + 11 ), "Opener scope opener is not the arrow token(for $ marker) " );
488
+ $ this ->assertSame ($ tokens [$ opener ]['scope_closer ' ], ($ token + 14 ), "Opener scope closer is not the semicolon token(for $ marker) " );
489
+
490
+ $ closer = $ tokens [$ token ]['scope_opener ' ];
491
+ $ this ->assertSame ($ tokens [$ closer ]['scope_opener ' ], ($ token + 11 ), "Closer scope opener is not the arrow token(for $ marker) " );
492
+ $ this ->assertSame ($ tokens [$ closer ]['scope_closer ' ], ($ token + 14 ), "Closer scope closer is not the semicolon token(for $ marker) " );
493
+ }
494
+
495
+ }//end testKeywordReturnTypes()
496
+
497
+
462
498
/**
463
499
* Test that anonymous class tokens without parenthesis do not get assigned a parenthesis owner.
464
500
*
0 commit comments