From d3535ebbce3a3c8efebd94bf0a4708cc884f382e Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 8 Sep 2020 03:22:26 +0200 Subject: [PATCH] Operators::isUnaryPlusMinus(): bug fix - unary after arrow in arrow function Just like after the `return` keyword, a plus/minus after the `=>` arrow in an arrow function is unary. Includes unit test. Refs: * squizlabs/PHP_CodeSniffer 3043 --- PHPCSUtils/Utils/Operators.php | 1 + Tests/Utils/Operators/IsUnaryPlusMinusTest.inc | 3 +++ Tests/Utils/Operators/IsUnaryPlusMinusTest.php | 6 +++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/PHPCSUtils/Utils/Operators.php b/PHPCSUtils/Utils/Operators.php index 041c39d2..42541849 100644 --- a/PHPCSUtils/Utils/Operators.php +++ b/PHPCSUtils/Utils/Operators.php @@ -408,6 +408,7 @@ public static function isUnaryPlusMinus(File $phpcsFile, $stackPtr) || isset(BCTokens::assignmentTokens()[$tokens[$prev]['code']]) === true || isset(Tokens::$castTokens[$tokens[$prev]['code']]) === true || isset(self::$extraUnaryIndicators[$tokens[$prev]['code']]) === true + || $tokens[$prev]['type'] === 'T_FN_ARROW' ) { return true; } diff --git a/Tests/Utils/Operators/IsUnaryPlusMinusTest.inc b/Tests/Utils/Operators/IsUnaryPlusMinusTest.inc index 85926d7e..a12a4dd7 100644 --- a/Tests/Utils/Operators/IsUnaryPlusMinusTest.inc +++ b/Tests/Utils/Operators/IsUnaryPlusMinusTest.inc @@ -138,6 +138,9 @@ switch ($a) { break +1; } +/* testUnaryMinusArrowFunction */ +$fn = static fn(DateTime $a, DateTime $b): int => -($a->getTimestamp() <=> $b->getTimestamp()); + // Testing `$a = -+-+10`; $a = /* testSequenceNonUnary1 */ diff --git a/Tests/Utils/Operators/IsUnaryPlusMinusTest.php b/Tests/Utils/Operators/IsUnaryPlusMinusTest.php index 760fcda7..3bbe204b 100644 --- a/Tests/Utils/Operators/IsUnaryPlusMinusTest.php +++ b/Tests/Utils/Operators/IsUnaryPlusMinusTest.php @@ -268,10 +268,14 @@ public function dataIsUnaryPlusMinus() '/* testUnaryMinusCase */', true, ], - 'unary-minus-break' => [ + 'unary-plus-break' => [ '/* testUnaryPlusBreak */', true, ], + 'unary-minus-arrow-function' => [ + '/* testUnaryMinusArrowFunction */', + true, + ], 'operator-sequence-non-unary-1' => [ '/* testSequenceNonUnary1 */', false,