Skip to content

Commit 0a9c30f

Browse files
committed
ClassMemberSpacingSniff: Improved for invalid comments
1 parent 1a99907 commit 0a9c30f

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

SlevomatCodingStandard/Sniffs/Classes/ClassMemberSpacingSniff.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44

55
use PHP_CodeSniffer\Files\File;
66
use PHP_CodeSniffer\Sniffs\Sniff;
7+
use PHP_CodeSniffer\Util\Tokens;
78
use SlevomatCodingStandard\Helpers\CommentHelper;
8-
use SlevomatCodingStandard\Helpers\DocCommentHelper;
99
use SlevomatCodingStandard\Helpers\FunctionHelper;
1010
use SlevomatCodingStandard\Helpers\ScopeHelper;
1111
use SlevomatCodingStandard\Helpers\SniffSettingsHelper;
1212
use SlevomatCodingStandard\Helpers\TokenHelper;
1313
use SlevomatCodingStandard\Helpers\UseStatementHelper;
14+
use function array_key_exists;
1415
use function array_merge;
1516
use function in_array;
1617
use function sprintf;
@@ -182,8 +183,24 @@ private function findNextMember(File $phpcsFile, int $classPointer, int $previou
182183

183184
private function getMemberStartPointer(File $phpcsFile, int $memberPointer): int
184185
{
185-
return DocCommentHelper::findDocCommentOpenToken($phpcsFile, $memberPointer)
186-
?? $this->getMemberFirstCodePointer($phpcsFile, $memberPointer);
186+
$tokens = $phpcsFile->getTokens();
187+
188+
$memberFirstCodePointer = $this->getMemberFirstCodePointer($phpcsFile, $memberPointer);
189+
$pointerBefore = TokenHelper::findPreviousExcluding($phpcsFile, T_WHITESPACE, $memberFirstCodePointer - 1);
190+
191+
if (
192+
in_array($tokens[$pointerBefore]['code'], Tokens::$commentTokens, true)
193+
&& $tokens[$pointerBefore]['line'] + 1 === $tokens[$memberFirstCodePointer]['line']
194+
) {
195+
$pointerBeforeComment = TokenHelper::findPreviousEffective($phpcsFile, $pointerBefore - 1);
196+
if ($tokens[$pointerBeforeComment]['line'] !== $tokens[$pointerBefore]['line']) {
197+
return array_key_exists('comment_opener', $tokens[$pointerBefore])
198+
? $tokens[$pointerBefore]['comment_opener']
199+
: CommentHelper::getMultilineCommentStartPointer($phpcsFile, $pointerBefore);
200+
}
201+
}
202+
203+
return $memberFirstCodePointer;
187204
}
188205

189206
private function getMemberFirstCodePointer(File $phpcsFile, int $memberPointer): int

tests/Sniffs/Classes/data/classMemberSpacingNoErrors.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,14 @@ public function forth()
9696
{
9797
}
9898

99+
// Invalid comment
100+
public const THIRD = [3];
101+
102+
/*
103+
Invalid comment
104+
*/
105+
public function fifth()
106+
{
107+
}
108+
99109
}

0 commit comments

Comments
 (0)