From 3148f1b71c7f31374c0b4ccde66f3891d86c89bb Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sun, 14 Feb 2021 14:49:52 +0100 Subject: [PATCH] PHP 8.0 | Squiz/ObjectInstantiation: prevent false positives on match/fn expressions This change ensures that when `new Class` is returned by a match control structure or an arrow function, the sniff will not throw a false positive. Includes unit tests. --- .../Squiz/Sniffs/Objects/ObjectInstantiationSniff.php | 2 ++ .../Tests/Objects/ObjectInstantiationUnitTest.inc | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/Standards/Squiz/Sniffs/Objects/ObjectInstantiationSniff.php b/src/Standards/Squiz/Sniffs/Objects/ObjectInstantiationSniff.php index fb714e16cf..ea4970dbf8 100644 --- a/src/Standards/Squiz/Sniffs/Objects/ObjectInstantiationSniff.php +++ b/src/Standards/Squiz/Sniffs/Objects/ObjectInstantiationSniff.php @@ -50,6 +50,8 @@ public function process(File $phpcsFile, $stackPtr) $allowedTokens = [ T_EQUAL => true, T_DOUBLE_ARROW => true, + T_FN_ARROW => true, + T_MATCH_ARROW => true, T_THROW => true, T_RETURN => true, T_INLINE_THEN => true, diff --git a/src/Standards/Squiz/Tests/Objects/ObjectInstantiationUnitTest.inc b/src/Standards/Squiz/Tests/Objects/ObjectInstantiationUnitTest.inc index 8a5c232319..f58af275cd 100644 --- a/src/Standards/Squiz/Tests/Objects/ObjectInstantiationUnitTest.inc +++ b/src/Standards/Squiz/Tests/Objects/ObjectInstantiationUnitTest.inc @@ -13,5 +13,16 @@ function foo() { return new MyClass(); } $doodad = $x ? new Foo : new Bar; +function returnFn() { + $fn = fn($x) => new MyClass(); +} + +function returnMatch() { + $match = match($x) { + 0 => new MyClass() + } +} + +// Intentional parse error. This must be the last test in the file. function new ?>