diff --git a/src/Files/File.php b/src/Files/File.php index 96b971d2b0..a121a2d87d 100644 --- a/src/Files/File.php +++ b/src/Files/File.php @@ -2356,10 +2356,12 @@ public function findEndOfStatement($start, $ignore=null) && ($i === $this->tokens[$i]['scope_opener'] || $i === $this->tokens[$i]['scope_condition']) ) { - if ($i === $start - && (isset(Util\Tokens::$scopeOpeners[$this->tokens[$i]['code']]) === true - || $this->tokens[$i]['code'] === T_FN) - ) { + if ($this->tokens[$i]['code'] === T_FN) { + $i = ($this->tokens[$i]['scope_closer'] - 1); + continue; + } + + if ($i === $start && isset(Util\Tokens::$scopeOpeners[$this->tokens[$i]['code']]) === true) { return $this->tokens[$i]['scope_closer']; } diff --git a/tests/Core/File/FindEndOfStatementTest.inc b/tests/Core/File/FindEndOfStatementTest.inc index 8ff59d4211..c8ec8d6ec6 100644 --- a/tests/Core/File/FindEndOfStatementTest.inc +++ b/tests/Core/File/FindEndOfStatementTest.inc @@ -35,3 +35,8 @@ $a = [ 'a' => fn() => return 1, 'b' => fn() => return 1, ]; + +/* testArrowFunctionEndOfStatement */ +static fn ($a) => $a; + +return 0; diff --git a/tests/Core/File/FindEndOfStatementTest.php b/tests/Core/File/FindEndOfStatementTest.php index 5ed3fb3874..145b2805c6 100644 --- a/tests/Core/File/FindEndOfStatementTest.php +++ b/tests/Core/File/FindEndOfStatementTest.php @@ -188,4 +188,22 @@ public function testArrowFunctionArrayValue() }//end testArrowFunctionArrayValue() + /** + * Test end of statement for fn closure. + * + * @return void + */ + public function testArrayFunctionEndOfStatement() + { + $static = (self::$phpcsFile->findNext(T_COMMENT, 0, null, false, '/* testArrowFunctionEndOfStatement */') + 2); + $fn = self::$phpcsFile->findNext(T_FN, ($static + 1)); + + $endOfStatementStatic = self::$phpcsFile->findEndOfStatement($static); + $endOfStatementFn = self::$phpcsFile->findEndOfStatement($fn); + + $this->assertSame($endOfStatementFn, $endOfStatementStatic); + + }//end testArrayFunctionEndOfStatement() + + }//end class