diff --git a/src/Standards/Squiz/Sniffs/WhiteSpace/ScopeKeywordSpacingSniff.php b/src/Standards/Squiz/Sniffs/WhiteSpace/ScopeKeywordSpacingSniff.php index 9ba69dcf14..abf05dc17e 100644 --- a/src/Standards/Squiz/Sniffs/WhiteSpace/ScopeKeywordSpacingSniff.php +++ b/src/Standards/Squiz/Sniffs/WhiteSpace/ScopeKeywordSpacingSniff.php @@ -44,7 +44,9 @@ public function process(File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); - if (isset($tokens[($stackPtr + 1)]) === false) { + $nextNonWhitespace = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true); + if ($nextNonWhitespace === false) { + // Parse error/live coding. Bow out. return; } @@ -126,9 +128,6 @@ public function process(File $phpcsFile, $stackPtr) if ($tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE) { $spacing = 0; - } else if (isset($tokens[($stackPtr + 2)]) === false) { - // Parse error/live coding. Bow out. - return; } else { if ($tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line']) { $spacing = 'newline'; diff --git a/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc b/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc index 9f871c0e77..9a74addc41 100644 --- a/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc +++ b/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc @@ -77,27 +77,27 @@ class MyOtherClass $varQ = 'string', $varR = 123; - // Intentionally missing a semicolon for testing. public $varS, - $varT -} + $varT, + $varU; -// Issue #3188 - static as return type. -public static function fCreate($attributes = []): static -{ - return static::factory()->create($attributes); -} + // Issue #3188 - static as return type. + public static function staticAsReturnType($attributes = []): static + { + return static::factory()->create($attributes); + } -public static function fCreate($attributes = []): ?static -{ - return static::factory()->create($attributes); -} + public static function nullableStaticReturnType($attributes = []): ?static + { + return static::factory()->create($attributes); + } -// Also account for static used within union types. -public function staticLast($attributes = []): object|static {} -public function staticMiddle(): string|static|object {} -public function staticFirst(): static|object {} + // Also account for static used within union types. + public function staticLast($attributes = []): object|static {} + public function staticMiddle(): string|static|object {} + public function staticFirst(): static|object {} +} // Ensure that static as a scope keyword when preceeded by a colon which is not for a type declaration is still handled. $callback = $cond ? get_fn_name() : static function ($a) { return $a * 10; }; @@ -174,3 +174,16 @@ final class FinalSpacingCorrect { abstract class AbstractSpacingCorrect { public abstract function spacingCorrect() {} } + +$closure = static function() { return 'spacing correct'; }; +$closure = static function() { return 'spacing incorrect'; }; + +class ConstantVisibility { + public const PUBLIC_SPACING_CORRECT = true; + protected const PROTECTED_SPACING_CORRECT = true; + private const PRIVATE_SPACING_CORRECT = true; + + public const PUBLIC_SPACING_INCORRECT = true; + protected const PROTECTED_SPACING_INCORRECT = true; + private const PRIVATE_SPACING_INCORRECT = true; +} diff --git a/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc.fixed b/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc.fixed index bf284b6188..c18bda5c76 100644 --- a/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc.fixed +++ b/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.1.inc.fixed @@ -72,27 +72,27 @@ class MyOtherClass $varQ = 'string', $varR = 123; - // Intentionally missing a semicolon for testing. public $varS, - $varT -} + $varT, + $varU; -// Issue #3188 - static as return type. -public static function fCreate($attributes = []): static -{ - return static::factory()->create($attributes); -} + // Issue #3188 - static as return type. + public static function staticAsReturnType($attributes = []): static + { + return static::factory()->create($attributes); + } -public static function fCreate($attributes = []): ?static -{ - return static::factory()->create($attributes); -} + public static function nullableStaticReturnType($attributes = []): ?static + { + return static::factory()->create($attributes); + } -// Also account for static used within union types. -public function staticLast($attributes = []): object|static {} -public function staticMiddle(): string|static|object {} -public function staticFirst(): static|object {} + // Also account for static used within union types. + public function staticLast($attributes = []): object|static {} + public function staticMiddle(): string|static|object {} + public function staticFirst(): static|object {} +} // Ensure that static as a scope keyword when preceeded by a colon which is not for a type declaration is still handled. $callback = $cond ? get_fn_name() : static function ($a) { return $a * 10; }; @@ -167,3 +167,16 @@ final class FinalSpacingCorrect { abstract class AbstractSpacingCorrect { public abstract function spacingCorrect() {} } + +$closure = static function() { return 'spacing correct'; }; +$closure = static function() { return 'spacing incorrect'; }; + +class ConstantVisibility { + public const PUBLIC_SPACING_CORRECT = true; + protected const PROTECTED_SPACING_CORRECT = true; + private const PRIVATE_SPACING_CORRECT = true; + + public const PUBLIC_SPACING_INCORRECT = true; + protected const PROTECTED_SPACING_INCORRECT = true; + private const PRIVATE_SPACING_INCORRECT = true; +} diff --git a/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.4.inc b/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.4.inc new file mode 100644 index 0000000000..0459433549 --- /dev/null +++ b/src/Standards/Squiz/Tests/WhiteSpace/ScopeKeywordSpacingUnitTest.4.inc @@ -0,0 +1,11 @@ + 1, 166 => 1, 167 => 1, + 179 => 1, + 186 => 1, + 187 => 1, + 188 => 1, ]; case 'ScopeKeywordSpacingUnitTest.3.inc':