Skip to content

Commit 5500880

Browse files
committed
RequireSingleLineMethodSignatureSniff: Cleanup and improved fixer
1 parent f36375f commit 5500880

File tree

4 files changed

+23
-36
lines changed

4 files changed

+23
-36
lines changed

SlevomatCodingStandard/Sniffs/Classes/RequireSingleLineMethodSignatureSniff.php

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
use PHP_CodeSniffer\Files\File;
66
use PHP_CodeSniffer\Sniffs\Sniff;
77
use SlevomatCodingStandard\Helpers\FunctionHelper;
8+
use SlevomatCodingStandard\Helpers\SniffSettingsHelper;
89
use SlevomatCodingStandard\Helpers\TokenHelper;
910
use function assert;
10-
use function in_array;
1111
use function is_bool;
1212
use function is_int;
1313
use function is_string;
@@ -42,33 +42,29 @@ public function register(): array
4242
/**
4343
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
4444
* @param \PHP_CodeSniffer\Files\File $phpcsFile
45-
* @param int $pointer
45+
* @param int $methodPointer
4646
*/
47-
public function process(File $phpcsFile, $pointer): void
47+
public function process(File $phpcsFile, $methodPointer): void
4848
{
49-
if (!FunctionHelper::isMethod($phpcsFile, $pointer)) {
49+
if (!FunctionHelper::isMethod($phpcsFile, $methodPointer)) {
5050
return;
5151
}
5252

5353
$tokens = $phpcsFile->getTokens();
5454

55-
$lineStartPointer = $phpcsFile->findFirstOnLine(T_OPEN_TAG, $pointer, true);
56-
assert(!is_bool($lineStartPointer));
55+
$signatureStartPointer = $phpcsFile->findFirstOnLine(T_OPEN_TAG, $methodPointer, true);
56+
assert(!is_bool($signatureStartPointer));
5757

58-
$methodSignatureEndPointer = $phpcsFile->findNext([T_OPEN_CURLY_BRACKET, T_SEMICOLON], $pointer);
59-
assert(is_int($methodSignatureEndPointer));
58+
$pointerAfterSignatureEnd = TokenHelper::findNext($phpcsFile, [T_OPEN_CURLY_BRACKET, T_SEMICOLON], $methodPointer + 1);
6059

61-
$signatureEndLine = $tokens[$methodSignatureEndPointer]['line'];
62-
if (in_array($tokens[$lineStartPointer]['line'], [$signatureEndLine, $signatureEndLine - 1], true)) {
63-
return;
64-
}
60+
$signatureEndPointer = TokenHelper::findPreviousEffective($phpcsFile, $pointerAfterSignatureEnd - 1);
61+
assert(is_int($signatureEndPointer));
6562

66-
$singleLineMethodSignatureEndPointer = $methodSignatureEndPointer;
67-
if ($tokens[$methodSignatureEndPointer]['code'] === T_OPEN_CURLY_BRACKET) {
68-
$singleLineMethodSignatureEndPointer--;
63+
if ($tokens[$signatureStartPointer]['line'] === $tokens[$signatureEndPointer]['line']) {
64+
return;
6965
}
7066

71-
$methodSignature = TokenHelper::getContent($phpcsFile, $lineStartPointer, $singleLineMethodSignatureEndPointer);
67+
$methodSignature = TokenHelper::getContent($phpcsFile, $signatureStartPointer, $signatureEndPointer);
7268
$methodSignature = preg_replace(sprintf('~%s[ \t]*~', $phpcsFile->eolChar), ' ', $methodSignature);
7369
assert(is_string($methodSignature));
7470

@@ -79,31 +75,25 @@ public function process(File $phpcsFile, $pointer): void
7975
return str_repeat(' ', strlen($matches[1]));
8076
}, $methodSignature);
8177

82-
if ($this->maxLineLength !== 0 && strlen($methodSignatureWithoutTabIndetation) > $this->maxLineLength) {
78+
$maxLineLength = SniffSettingsHelper::normalizeInteger($this->maxLineLength);
79+
if ($maxLineLength !== 0 && strlen($methodSignatureWithoutTabIndetation) > SniffSettingsHelper::normalizeInteger($maxLineLength)) {
8380
return;
8481
}
8582

86-
$error = sprintf('Signature of method "%s" should be placed on a single line.', FunctionHelper::getName($phpcsFile, $pointer));
87-
$fix = $phpcsFile->addFixableError($error, $pointer, self::CODE_REQUIRED_SINGLE_LINE_SIGNATURE);
83+
$error = sprintf('Signature of method "%s" should be placed on a single line.', FunctionHelper::getName($phpcsFile, $methodPointer));
84+
$fix = $phpcsFile->addFixableError($error, $methodPointer, self::CODE_REQUIRED_SINGLE_LINE_SIGNATURE);
8885
if (!$fix) {
8986
return;
9087
}
9188

92-
$whitespaceBeforeMethod = $tokens[$lineStartPointer]['content'];
93-
9489
$phpcsFile->fixer->beginChangeset();
9590

96-
for ($i = $lineStartPointer; $i <= $methodSignatureEndPointer; $i++) {
97-
$phpcsFile->fixer->replaceToken($i, '');
98-
}
91+
$phpcsFile->fixer->replaceToken($signatureStartPointer, $methodSignature);
9992

100-
$replacement = $methodSignature;
101-
if ($tokens[$methodSignatureEndPointer]['code'] === T_OPEN_CURLY_BRACKET) {
102-
$replacement = sprintf("%s\n%s{", $methodSignature, $whitespaceBeforeMethod);
93+
for ($i = $signatureStartPointer + 1; $i <= $signatureEndPointer; $i++) {
94+
$phpcsFile->fixer->replaceToken($i, '');
10395
}
10496

105-
$phpcsFile->fixer->replaceToken($lineStartPointer, $replacement);
106-
10797
$phpcsFile->fixer->endChangeset();
10898
}
10999

tests/Sniffs/Classes/data/requireSingleLineMethodSignatureAllMethodsErrors.fixed.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
class A
44
{
5-
public function someMethod(string $abcdefghijklmnopqrstuvwxyza, string $abcdefghijklmnopqrstuvwxyzb, string $abcdefghijklmnopqrstuvwxyzc, string $abcdefghijklmnopqrstuvwxyzd, string $abcdefghijklmnopqrstuvwxyze, string $abcdefghijklmnopqrstuvwxyzf, string $abcdefghijklmnopqrstuvwxyzg, string $abcdefghijklmnopqrstuvwxyzh, string $abcdefghijklmnopqrstuvwxyzi, string $abcdefghijklmnopqrstuvwxyzj, string $abcdefghijklmnopqrstuvwxyzk, string $abcdefghijklmnopqrstuvwxyzl, string $abcdefghijklmnopqrstuvwxyzm, string $abcdefghijklmnopqrstuvwxyzn, string $abcdefghijklmnopqrstuvwxyzo, string $abcdefghijklmnopqrstuvwxyzp, string $abcdefghijklmnopqrstuvwxyzq, string $abcdefghijklmnopqrstuvwxyzr, string $abcdefghijklmnopqrstuvwxyzs, string $abcdefghijklmnopqrstuvwxyzt, string $abcdefghijklmnopqrstuvwxyzu, string $abcdefghijklmnopqrstuvwxyzv, string $abcdefghijklmnopqrstuvwxyzw, string $abcdefghijklmnopqrstuvwxyzx, string $abcdefghijklmnopqrstuvwxyzy, string $abcdefghijklmnopqrstuvwxyzz) : void
6-
{
5+
public function someMethod(string $abcdefghijklmnopqrstuvwxyza, string $abcdefghijklmnopqrstuvwxyzb, string $abcdefghijklmnopqrstuvwxyzc, string $abcdefghijklmnopqrstuvwxyzd, string $abcdefghijklmnopqrstuvwxyze, string $abcdefghijklmnopqrstuvwxyzf, string $abcdefghijklmnopqrstuvwxyzg, string $abcdefghijklmnopqrstuvwxyzh, string $abcdefghijklmnopqrstuvwxyzi, string $abcdefghijklmnopqrstuvwxyzj, string $abcdefghijklmnopqrstuvwxyzk, string $abcdefghijklmnopqrstuvwxyzl, string $abcdefghijklmnopqrstuvwxyzm, string $abcdefghijklmnopqrstuvwxyzn, string $abcdefghijklmnopqrstuvwxyzo, string $abcdefghijklmnopqrstuvwxyzp, string $abcdefghijklmnopqrstuvwxyzq, string $abcdefghijklmnopqrstuvwxyzr, string $abcdefghijklmnopqrstuvwxyzs, string $abcdefghijklmnopqrstuvwxyzt, string $abcdefghijklmnopqrstuvwxyzu, string $abcdefghijklmnopqrstuvwxyzv, string $abcdefghijklmnopqrstuvwxyzw, string $abcdefghijklmnopqrstuvwxyzx, string $abcdefghijklmnopqrstuvwxyzy, string $abcdefghijklmnopqrstuvwxyzz) : void {
76
}
87
}

tests/Sniffs/Classes/data/requireSingleLineMethodSignatureErrors.fixed.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
class A
44
{
5-
public function someMethod(int $abc, string $efg) : void
6-
{
5+
public function someMethod(int $abc, string $efg) : void {
76
}
87

9-
public function someMethodWithNoReturnType(int $abc, string $efg)
10-
{
8+
public function someMethodWithNoReturnType(int $abc, string $efg) {
119
}
1210
}
1311

tests/Sniffs/Classes/data/requireSingleLineMethodSignatureNoErrors.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function multiLineWithNoReturnType(
4545
);
4646

4747
public function multiLineMethodWithPrecisely121CharsOnSingleline(
48-
$someHugeVariableNameJustToFillTheSpaceBlah
48+
$someHugeVariableNameJustToFillTheSpaceBlaah
4949
) : void;
5050
}
5151

0 commit comments

Comments
 (0)