Skip to content

Commit 1a984dd

Browse files
committed
Consistency fix to allow space after opening parenthesis in control structures
For the consistency with other sniffs we should allow spaces after opening parenthesis in control structures when the next content is a comment. Fixes #2411
1 parent 8c8c4ff commit 1a984dd

File tree

4 files changed

+55
-29
lines changed

4 files changed

+55
-29
lines changed

src/Standards/PSR2/Sniffs/ControlStructures/ControlStructureSpacingSniff.php

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
use PHP_CodeSniffer\Sniffs\Sniff;
1313
use PHP_CodeSniffer\Files\File;
14+
use PHP_CodeSniffer\Util\Tokens;
1415

1516
class ControlStructureSpacingSniff implements Sniff
1617
{
@@ -75,37 +76,42 @@ public function process(File $phpcsFile, $stackPtr)
7576
return;
7677
}
7778

78-
$parenOpener = $tokens[$stackPtr]['parenthesis_opener'];
79-
$parenCloser = $tokens[$stackPtr]['parenthesis_closer'];
80-
$spaceAfterOpen = 0;
81-
if ($tokens[($parenOpener + 1)]['code'] === T_WHITESPACE) {
82-
if (strpos($tokens[($parenOpener + 1)]['content'], $phpcsFile->eolChar) !== false) {
83-
$spaceAfterOpen = 'newline';
84-
} else {
85-
$spaceAfterOpen = $tokens[($parenOpener + 1)]['length'];
79+
$parenOpener = $tokens[$stackPtr]['parenthesis_opener'];
80+
$parenCloser = $tokens[$stackPtr]['parenthesis_closer'];
81+
$nextContent = $phpcsFile->findNext(T_WHITESPACE, ($parenOpener + 1), null, true);
82+
if (false === in_array($tokens[$nextContent]['code'], Tokens::$commentTokens, true)) {
83+
$spaceAfterOpen = 0;
84+
if ($tokens[($parenOpener + 1)]['code'] === T_WHITESPACE) {
85+
if (strpos($tokens[($parenOpener + 1)]['content'], $phpcsFile->eolChar) !== false) {
86+
$spaceAfterOpen = 'newline';
87+
} else {
88+
$spaceAfterOpen = $tokens[($parenOpener + 1)]['length'];
89+
}
8690
}
87-
}
8891

89-
$phpcsFile->recordMetric($stackPtr, 'Spaces after control structure open parenthesis', $spaceAfterOpen);
90-
91-
if ($spaceAfterOpen !== $this->requiredSpacesAfterOpen) {
92-
$error = 'Expected %s spaces after opening bracket; %s found';
93-
$data = [
94-
$this->requiredSpacesAfterOpen,
95-
$spaceAfterOpen,
96-
];
97-
$fix = $phpcsFile->addFixableError($error, ($parenOpener + 1), 'SpacingAfterOpenBrace', $data);
98-
if ($fix === true) {
99-
$padding = str_repeat(' ', $this->requiredSpacesAfterOpen);
100-
if ($spaceAfterOpen === 0) {
101-
$phpcsFile->fixer->addContent($parenOpener, $padding);
102-
} else if ($spaceAfterOpen === 'newline') {
103-
$phpcsFile->fixer->replaceToken(($parenOpener + 1), '');
104-
} else {
105-
$phpcsFile->fixer->replaceToken(($parenOpener + 1), $padding);
92+
$phpcsFile->recordMetric($stackPtr, 'Spaces after control structure open parenthesis', $spaceAfterOpen);
93+
94+
if ($spaceAfterOpen !== $this->requiredSpacesAfterOpen) {
95+
$error = 'Expected %s spaces after opening bracket; %s found';
96+
$data = [
97+
$this->requiredSpacesAfterOpen,
98+
$spaceAfterOpen,
99+
];
100+
$fix = $phpcsFile->addFixableError($error, ($parenOpener + 1), 'SpacingAfterOpenBrace', $data);
101+
if ($fix === true) {
102+
$padding = str_repeat(' ', $this->requiredSpacesAfterOpen);
103+
if ($spaceAfterOpen === 0) {
104+
$phpcsFile->fixer->addContent($parenOpener, $padding);
105+
} else {
106+
if ($spaceAfterOpen === 'newline') {
107+
$phpcsFile->fixer->replaceToken(($parenOpener + 1), '');
108+
} else {
109+
$phpcsFile->fixer->replaceToken(($parenOpener + 1), $padding);
110+
}
111+
}
106112
}
107113
}
108-
}
114+
}//end if
109115

110116
if ($tokens[$parenOpener]['line'] === $tokens[$parenCloser]['line']) {
111117
$spaceBeforeClose = 0;

src/Standards/PSR2/Tests/ControlStructures/ControlStructureSpacingUnitTest.inc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ if (
3636
$settingsUpdated = FALSE;
3737
}
3838

39+
if ( // comment
40+
$something
41+
) {
42+
}
43+
44+
while ( /* comment */
45+
true
46+
) {
47+
}
48+
3949
// phpcs:set PSR2.ControlStructures.ControlStructureSpacing requiredSpacesAfterOpen 1
4050
// phpcs:set PSR2.ControlStructures.ControlStructureSpacing requiredSpacesBeforeClose 1
4151
foreach ($something as $blah => $that) {}

src/Standards/PSR2/Tests/ControlStructures/ControlStructureSpacingUnitTest.inc.fixed

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ if ($defaultPageDesign === 0
3535
$settingsUpdated = FALSE;
3636
}
3737

38+
if ( // comment
39+
$something
40+
) {
41+
}
42+
43+
while ( /* comment */
44+
true
45+
) {
46+
}
47+
3848
// phpcs:set PSR2.ControlStructures.ControlStructureSpacing requiredSpacesAfterOpen 1
3949
// phpcs:set PSR2.ControlStructures.ControlStructureSpacing requiredSpacesBeforeClose 1
4050
foreach ( $something as $blah => $that ) {}

src/Standards/PSR2/Tests/ControlStructures/ControlStructureSpacingUnitTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public function getErrorList()
3131
26 => 2,
3232
27 => 2,
3333
31 => 1,
34-
41 => 2,
35-
43 => 2,
34+
51 => 2,
35+
53 => 2,
3636
];
3737

3838
}//end getErrorList()

0 commit comments

Comments
 (0)