From ba081094e8ec26f7d7d5b7b3468c735dc35c3aae Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sun, 15 Oct 2017 05:27:32 +0200 Subject: [PATCH] Squiz/FunctionDeclarationArgumentSpacing: fix fixer conflict When a function declaration contains comments, the `FunctionDeclarationArgumentSpacing` sniff would mistakingly see them as type hints, causing a fixer conflict between that sniff and the `PEAR.Functions.FunctionDeclaration`/`Squiz.Functions.MultiLineFunctionDeclaration` sniff. Includes unit test demonstrating the issue. --- .../FunctionDeclarationArgumentSpacingSniff.php | 5 +++-- .../FunctionDeclarationArgumentSpacingUnitTest.inc | 9 +++++++++ .../FunctionDeclarationArgumentSpacingUnitTest.inc.fixed | 9 +++++++++ .../FunctionDeclarationArgumentSpacingUnitTest.php | 1 + 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Standards/Squiz/Sniffs/Functions/FunctionDeclarationArgumentSpacingSniff.php b/src/Standards/Squiz/Sniffs/Functions/FunctionDeclarationArgumentSpacingSniff.php index 67eb63588b..41f2ffd2a6 100644 --- a/src/Standards/Squiz/Sniffs/Functions/FunctionDeclarationArgumentSpacingSniff.php +++ b/src/Standards/Squiz/Sniffs/Functions/FunctionDeclarationArgumentSpacingSniff.php @@ -11,6 +11,7 @@ use PHP_CodeSniffer\Sniffs\Sniff; use PHP_CodeSniffer\Files\File; +use PHP_CodeSniffer\Util\Tokens; class FunctionDeclarationArgumentSpacingSniff implements Sniff { @@ -203,7 +204,7 @@ public function processBracket($phpcsFile, $openBracket) // Before we throw an error, make sure there is no type hint. $comma = $phpcsFile->findPrevious(T_COMMA, ($nextParam - 1)); - $nextToken = $phpcsFile->findNext(T_WHITESPACE, ($comma + 1), null, true); + $nextToken = $phpcsFile->findNext(Tokens::$emptyTokens, ($comma + 1), null, true); if ($phpcsFile->isReference($nextToken) === true) { $nextToken++; } @@ -292,7 +293,7 @@ public function processBracket($phpcsFile, $openBracket) // Before we throw an error, make sure there is no type hint. $bracket = $phpcsFile->findPrevious(T_OPEN_PARENTHESIS, ($nextParam - 1)); - $nextToken = $phpcsFile->findNext(T_WHITESPACE, ($bracket + 1), null, true); + $nextToken = $phpcsFile->findNext(Tokens::$emptyTokens, ($bracket + 1), null, true); if ($phpcsFile->isReference($nextToken) === true) { $nextToken++; } diff --git a/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc b/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc index aa361153d8..1978a631f1 100644 --- a/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc +++ b/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc @@ -75,3 +75,12 @@ function MissingParamTypeInDocBlock(array$a = null, callable$c, \ArrayObject$o, function myFunc(...$args) {} function myFunc( ...$args) {} function myFunc(... $args) {} + +function foo( // comment + $bar, + \NS\ClassName $nsTypeHint, + /* not a type hint */ $baz, + string $withTypeHint +) { // comment + // ... +} diff --git a/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc.fixed b/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc.fixed index e8c26c6562..85aa332192 100644 --- a/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc.fixed +++ b/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.inc.fixed @@ -75,3 +75,12 @@ function MissingParamTypeInDocBlock(array $a=null, callable $c, \ArrayObject $o, function myFunc(...$args) {} function myFunc(...$args) {} function myFunc(... $args) {} + +function foo( // comment + $bar, + \NS\ClassName $nsTypeHint, + /* not a type hint */ $baz, + string $withTypeHint +) { // comment + // ... +} diff --git a/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.php b/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.php index dd1619ccd1..566489c4e4 100644 --- a/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.php +++ b/src/Standards/Squiz/Tests/Functions/FunctionDeclarationArgumentSpacingUnitTest.php @@ -49,6 +49,7 @@ public function getErrorList() 58 => 1, 73 => 7, 76 => 1, + 81 => 1, ]; }//end getErrorList()