From d8337c5560fac75cfe48590d94250c2b6496cd73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Bugy=C3=ADk?= Date: Tue, 14 Jul 2020 23:12:45 +0200 Subject: [PATCH] Generic.CodeAnalysis.UnusedFunctionParameter has now option $ignoreTypeHints --- .../UnusedFunctionParameterSniff.php | 19 ++++++++++++++++++- .../UnusedFunctionParameterUnitTest.inc | 14 ++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Standards/Generic/Sniffs/CodeAnalysis/UnusedFunctionParameterSniff.php b/src/Standards/Generic/Sniffs/CodeAnalysis/UnusedFunctionParameterSniff.php index 427f509cae..cf1a5ebc96 100644 --- a/src/Standards/Generic/Sniffs/CodeAnalysis/UnusedFunctionParameterSniff.php +++ b/src/Standards/Generic/Sniffs/CodeAnalysis/UnusedFunctionParameterSniff.php @@ -23,6 +23,13 @@ class UnusedFunctionParameterSniff implements Sniff { + /** + * The list of class type hints which will be ignored. + * + * @var array + */ + public $ignoreTypeHints = []; + /** * Returns an array of tokens this test wants to listen for. @@ -191,6 +198,10 @@ public function process(File $phpcsFile, $stackPtr) // If there is only one parameter and it is unused, no need for additional errorcode toggling logic. if ($methodParamsCount === 1) { foreach ($params as $paramName => $position) { + if (in_array($methodParams[0]['type_hint'], $this->ignoreTypeHints, true) === true) { + continue; + } + $data = [$paramName]; $phpcsFile->addWarning($error, $position, $errorCode, $data); } @@ -207,6 +218,7 @@ public function process(File $phpcsFile, $stackPtr) $errorInfo[$methodParams[$i]['name']] = [ 'position' => $params[$methodParams[$i]['name']], 'errorcode' => $errorCode.'BeforeLastUsed', + 'typehint' => $methodParams[$i]['type_hint'], ]; } } else { @@ -216,14 +228,19 @@ public function process(File $phpcsFile, $stackPtr) $errorInfo[$methodParams[$i]['name']] = [ 'position' => $params[$methodParams[$i]['name']], 'errorcode' => $errorCode.'AfterLastUsed', + 'typehint' => $methodParams[$i]['type_hint'], ]; } } - } + }//end for if (count($errorInfo) > 0) { $errorInfo = array_reverse($errorInfo); foreach ($errorInfo as $paramName => $info) { + if (in_array($info['typehint'], $this->ignoreTypeHints, true) === true) { + continue; + } + $data = [$paramName]; $phpcsFile->addWarning($error, $info['position'], $info['errorcode'], $data); } diff --git a/src/Standards/Generic/Tests/CodeAnalysis/UnusedFunctionParameterUnitTest.inc b/src/Standards/Generic/Tests/CodeAnalysis/UnusedFunctionParameterUnitTest.inc index 9997e787c5..0645ab4821 100644 --- a/src/Standards/Generic/Tests/CodeAnalysis/UnusedFunctionParameterUnitTest.inc +++ b/src/Standards/Generic/Tests/CodeAnalysis/UnusedFunctionParameterUnitTest.inc @@ -123,3 +123,17 @@ function myCallback($a, $b, $c, $d) { } fn ($a, $b, $c) => $b; + +// phpcs:set Generic.CodeAnalysis.UnusedFunctionParameter ignoreTypeHints[] Exception + +function oneParam(Exception $foo) { + return 'foobar'; +} + +function moreParamFirst(Exception $foo, LogicException $bar) { + return 'foobar' . $bar; +} + +function moreParamSecond(LogicException $bar, Exception $foo) { + return 'foobar' . $bar; +}