Skip to content

Commit

Permalink
Generic/IncrementDecrementSpacing: handle more situations
Browse files Browse the repository at this point in the history
The `Generic.WhiteSpace.IncrementDecrementSpacing` sniff, so far, only handled incrementors/decrementors when they were directly before/after the variable they apply to.

This commit enhances the sniff to also allow for finding superfluous whitespace when incrementing/decrementing a property or an array item.

Includes unit tests.
  • Loading branch information
jrfnl committed Mar 2, 2023
1 parent ed8e00d commit 80a2d06
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ public function process(File $phpcsFile, $stackPtr)
// Is this a pre-increment/decrement ?
$nextNonEmpty = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true);
if ($nextNonEmpty !== false
&& (($phpcsFile->tokenizerType === 'PHP' && $tokens[$nextNonEmpty]['code'] === T_VARIABLE)
&& (($phpcsFile->tokenizerType === 'PHP'
&& ($tokens[$nextNonEmpty]['code'] === T_VARIABLE || $tokens[$nextNonEmpty]['code'] === T_STRING))
|| ($phpcsFile->tokenizerType === 'JS' && $tokens[$nextNonEmpty]['code'] === T_STRING))
) {
if ($nextNonEmpty === ($stackPtr + 1)) {
Expand Down Expand Up @@ -116,7 +117,10 @@ public function process(File $phpcsFile, $stackPtr)
// Is this a post-increment/decrement ?
$prevNonEmpty = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true);
if ($prevNonEmpty !== false
&& (($phpcsFile->tokenizerType === 'PHP' && $tokens[$prevNonEmpty]['code'] === T_VARIABLE)
&& (($phpcsFile->tokenizerType === 'PHP'
&& ($tokens[$prevNonEmpty]['code'] === T_VARIABLE
|| $tokens[$prevNonEmpty]['code'] === T_STRING
|| $tokens[$prevNonEmpty]['code'] === T_CLOSE_SQUARE_BRACKET))
|| ($phpcsFile->tokenizerType === 'JS' && $tokens[$prevNonEmpty]['code'] === T_STRING))
) {
if ($prevNonEmpty === ($stackPtr - 1)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,23 @@ $i /*comment*/ --;
$i++;
$i ++;
$i /*comment*/ ++;

// Handle properties and array access too.
$i['key']++;
$i['key'] ++;
$i['key']['id']++;
$i['key']['id'] ++;

$obj->prop++;
$obj->prop ++;
$obj?->prop ++;

$obj->obj->prop++;
$obj->obj->prop ++;
$obj?->obj->prop ++;

$obj->prop['key']++;
$obj->prop['key'] ++;

--ClassName::$prop;
-- ClassName::$prop;
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,23 @@ $i /*comment*/ --;
$i++;
$i++;
$i /*comment*/ ++;

// Handle properties and array access too.
$i['key']++;
$i['key']++;
$i['key']['id']++;
$i['key']['id']++;

$obj->prop++;
$obj->prop++;
$obj?->prop++;

$obj->obj->prop++;
$obj->obj->prop++;
$obj?->obj->prop++;

$obj->prop['key']++;
$obj->prop['key']++;

--ClassName::$prop;
--ClassName::$prop;
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,32 @@ class IncrementDecrementSpacingUnitTest extends AbstractSniffUnitTest
*/
public function getErrorList($testFile='IncrementDecrementSpacingUnitTest.inc')
{
$errors = [
5 => 1,
6 => 1,
8 => 1,
10 => 1,
13 => 1,
14 => 1,
16 => 1,
17 => 1,
];

switch ($testFile) {
case 'IncrementDecrementSpacingUnitTest.inc':
$errors[21] = 1;
$errors[23] = 1;
$errors[26] = 1;
$errors[27] = 1;
$errors[30] = 1;
$errors[31] = 1;
$errors[34] = 1;
$errors[37] = 1;

return $errors;

case 'IncrementDecrementSpacingUnitTest.js':
return [
5 => 1,
6 => 1,
8 => 1,
10 => 1,
13 => 1,
14 => 1,
16 => 1,
17 => 1,
];
return $errors;

default:
return [];
Expand Down

0 comments on commit 80a2d06

Please sign in to comment.