Skip to content

Commit 0f1c898

Browse files
committed
PSR2/ClassDeclaration: fix sniff to work with the PHP 8 identifier tokens
The existing unit tests already contain tests covering this change. By extension, this also fixes the `PSR12.Classes.AnonClassDeclaration` and the `Squiz.Classes.ClassDeclaration` sniffs. Includes some updated tests for those sniffs.
1 parent e9f74a6 commit 0f1c898

File tree

5 files changed

+19
-41
lines changed

5 files changed

+19
-41
lines changed

src/Standards/PSR12/Tests/Classes/AnonClassDeclarationUnitTest.inc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ $instance6 = new class extends \Foo
5050
};
5151

5252
$instance7 = new class extends \Foo implements
53-
\One, \Two,
54-
\Three,
53+
\One, Two,
54+
Partially\Three,
5555
\Four,
56-
\Five {
56+
namespace\Five {
5757
// Class content
5858
};
5959

6060
if ($foo) {
61-
$instance8 = new class extends \Foo implements
61+
$instance8 = new class extends namespace\Foo implements
6262
\One,
6363
\Five {
6464
// Class content
@@ -68,7 +68,7 @@ if ($foo) {
6868
$instance9 = new class (
6969
$one,
7070
$two
71-
) extends \Foo implements \One {
71+
) extends Partially\Foo implements \One {
7272
// Class content
7373
};
7474

src/Standards/PSR12/Tests/Classes/AnonClassDeclarationUnitTest.inc.fixed

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,16 @@ $instance6 = new class extends \Foo implements \HandleableInterface {
5050

5151
$instance7 = new class extends \Foo implements
5252
\One,
53-
\Two,
54-
\Three,
53+
Two,
54+
Partially\Three,
5555
\Four,
56-
\Five
56+
namespace\Five
5757
{
5858
// Class content
5959
};
6060

6161
if ($foo) {
62-
$instance8 = new class extends \Foo implements
62+
$instance8 = new class extends namespace\Foo implements
6363
\One,
6464
\Five
6565
{
@@ -70,7 +70,7 @@ if ($foo) {
7070
$instance9 = new class (
7171
$one,
7272
$two
73-
) extends \Foo implements \One {
73+
) extends Partially\Foo implements \One {
7474
// Class content
7575
};
7676

src/Standards/PSR2/Sniffs/Classes/ClassDeclarationSniff.php

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -280,10 +280,8 @@ public function processOpen(File $phpcsFile, $stackPtr)
280280
}
281281
}
282282

283-
$find = [
284-
T_STRING,
285-
$keywordTokenType,
286-
];
283+
$find = Tokens::$nameTokens;
284+
$find[$keywordTokenType] = $keywordTokenType;
287285

288286
if ($className !== null) {
289287
$start = $className;
@@ -311,17 +309,9 @@ public function processOpen(File $phpcsFile, $stackPtr)
311309
continue;
312310
}
313311

314-
if ($checkingImplements === true
315-
&& $multiLineImplements === true
316-
&& ($tokens[($className - 1)]['code'] !== T_NS_SEPARATOR
317-
|| ($tokens[($className - 2)]['code'] !== T_STRING
318-
&& $tokens[($className - 2)]['code'] !== T_NAMESPACE))
319-
) {
312+
if ($checkingImplements === true && $multiLineImplements === true) {
320313
$prev = $phpcsFile->findPrevious(
321-
[
322-
T_NS_SEPARATOR,
323-
T_WHITESPACE,
324-
],
314+
T_WHITESPACE,
325315
($className - 1),
326316
$implements,
327317
true
@@ -400,27 +390,16 @@ public function processOpen(File $phpcsFile, $stackPtr)
400390
}
401391
}
402392
}//end if
403-
} else if ($tokens[($className - 1)]['code'] !== T_NS_SEPARATOR
404-
|| ($tokens[($className - 2)]['code'] !== T_STRING
405-
&& $tokens[($className - 2)]['code'] !== T_NAMESPACE)
406-
) {
407-
// Not part of a longer fully qualified or namespace relative class name.
408-
if ($tokens[($className - 1)]['code'] === T_COMMA
409-
|| ($tokens[($className - 1)]['code'] === T_NS_SEPARATOR
410-
&& $tokens[($className - 2)]['code'] === T_COMMA)
411-
) {
393+
} else {
394+
if ($tokens[($className - 1)]['code'] === T_COMMA) {
412395
$error = 'Expected 1 space before "%s"; 0 found';
413396
$data = [$tokens[$className]['content']];
414397
$fix = $phpcsFile->addFixableError($error, ($nextComma + 1), 'NoSpaceBeforeName', $data);
415398
if ($fix === true) {
416399
$phpcsFile->fixer->addContentBefore(($nextComma + 1), ' ');
417400
}
418401
} else {
419-
if ($tokens[($className - 1)]['code'] === T_NS_SEPARATOR) {
420-
$prev = ($className - 2);
421-
} else {
422-
$prev = ($className - 1);
423-
}
402+
$prev = ($className - 1);
424403

425404
$last = $phpcsFile->findPrevious(T_WHITESPACE, $prev, null, true);
426405
$content = $phpcsFile->getTokensAsString(($last + 1), ($prev - $last));
@@ -452,7 +431,6 @@ public function processOpen(File $phpcsFile, $stackPtr)
452431
}//end if
453432

454433
if ($checkingImplements === true
455-
&& $tokens[($className + 1)]['code'] !== T_NS_SEPARATOR
456434
&& $tokens[($className + 1)]['code'] !== T_COMMA
457435
) {
458436
if ($n !== ($classCount - 1)) {

src/Standards/Squiz/Tests/Classes/ClassDeclarationUnitTest.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class ClassOne implements ClassTwo, ClassThree
5656
{
5757
}//end class
5858

59-
class ClassOne implements ClassFour ,ClassFive, ClassSix
59+
class ClassOne implements ClassFour ,\ClassFive, namespace\ClassSix
6060
{
6161
}//end class
6262

src/Standards/Squiz/Tests/Classes/ClassDeclarationUnitTest.inc.fixed

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ClassOne implements ClassTwo, ClassThree
6565
{
6666
}//end class
6767

68-
class ClassOne implements ClassFour, ClassFive, ClassSix
68+
class ClassOne implements ClassFour, \ClassFive, namespace\ClassSix
6969
{
7070
}//end class
7171

0 commit comments

Comments
 (0)