Skip to content

Commit f1a8e47

Browse files
committed
Merge branch 'hotfix/2411-allow-spaces-after-opening-bracket-control-structures' of https://github.com/webimpress/PHP_CodeSniffer
2 parents 113a85b + 1a984dd commit f1a8e47

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)