From 372f67c3bcd0d09f07251535007a0acd5d59df47 Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 13:26:41 +0200 Subject: [PATCH 1/9] Remove NamespaceSniff, we are way pasy PHPUnit 6 --- src/Hostnet/Sniffs/PhpUnit/NamespaceSniff.php | 101 ------------------ .../Tests/PhpUnit/NamespaceUnitTest.0.inc | 31 ------ .../PhpUnit/NamespaceUnitTest.0.inc.fixed | 33 ------ .../Tests/PhpUnit/NamespaceUnitTest.1.inc | 8 -- .../PhpUnit/NamespaceUnitTest.1.inc.fixed | 9 -- .../Tests/PhpUnit/NamespaceUnitTest.2.inc | 6 -- .../PhpUnit/NamespaceUnitTest.2.inc.fixed | 8 -- .../Tests/PhpUnit/NamespaceUnitTest.3.inc | 12 --- .../PhpUnit/NamespaceUnitTest.3.inc.fixed | 14 --- .../Tests/PhpUnit/NamespaceUnitTest.php | 55 ---------- 10 files changed, 277 deletions(-) delete mode 100644 src/Hostnet/Sniffs/PhpUnit/NamespaceSniff.php delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.0.inc delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.0.inc.fixed delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.1.inc delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.1.inc.fixed delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.2.inc delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.2.inc.fixed delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.3.inc delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.3.inc.fixed delete mode 100644 test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.php diff --git a/src/Hostnet/Sniffs/PhpUnit/NamespaceSniff.php b/src/Hostnet/Sniffs/PhpUnit/NamespaceSniff.php deleted file mode 100644 index 221a5cf..0000000 --- a/src/Hostnet/Sniffs/PhpUnit/NamespaceSniff.php +++ /dev/null @@ -1,101 +0,0 @@ -getTokens(); - - // Find the parent class - $class_ptr = $phpcs_file->findNext(T_STRING, $stack_ptr + 1, null, false, null, true); - - if (false === $class_ptr) { - return $stack_ptr; - } - - $class = $tokens[$class_ptr]['content']; - - if (strtolower(self::NON_NAMESPACE_TEST_CLASS) === strtolower($class)) { - if ($phpcs_file->addFixableWarning(self::WARNING, $class_ptr, 'phpunitNs')) { - $this->fix($phpcs_file, $class_ptr); - } - } - - return $class_ptr; - } - - private function fix(File $phpcs_file, int $class_ptr): void - { - $tokens = $phpcs_file->getTokens(); - $stack_ptr = $phpcs_file->findNext([T_CLASS, T_USE], 0); - - // If there are no use statements yet, we have to add a newline afterwards. - if (T_CLASS === $tokens[$stack_ptr]['code']) { - $previous = $phpcs_file->findPrevious(T_WHITESPACE, $stack_ptr - 1, $stack_ptr - 2, true); - - $previous = $phpcs_file->findPrevious( - [ - T_DOC_COMMENT_OPEN_TAG, - T_DOC_COMMENT, - T_DOC_COMMENT_CLOSE_TAG, - T_DOC_COMMENT_STAR, - T_DOC_COMMENT_STRING, - T_DOC_COMMENT_TAG, - T_DOC_COMMENT_WHITESPACE, - T_COMMENT, - ], - false !== $previous ? $previous - 1 : $stack_ptr - 1, - 0, - true - ); - - $phpcs_file->fixer->addContent( - false !== $previous ? $previous : $stack_ptr - 1, - 'use ' . TestCase::class . ';' . PHP_EOL . PHP_EOL - ); - } else { - // Add use statement - $phpcs_file->fixer->addContentBefore($stack_ptr, 'use ' . TestCase::class . ';' . PHP_EOL); - } - - // Remove the \ before PHPUnit_Framework_TestCase - if (T_NS_SEPARATOR === $tokens[$class_ptr - 1]['code']) { - $phpcs_file->fixer->replaceToken($class_ptr - 1, ''); - } - - // Replace PHPUnit_Framework_TestCase and with TestCase - $phpcs_file->fixer->replaceToken($class_ptr, self::PARENT_TEST_CLASS); - } -} diff --git a/test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.0.inc b/test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.0.inc deleted file mode 100644 index effe241..0000000 --- a/test/Hostnet/Tests/PhpUnit/NamespaceUnitTest.0.inc +++ /dev/null @@ -1,31 +0,0 @@ - int) - */ - public function getErrorList(): array - { - return []; - } - - /** - * Returns the lines where warnings should occur. - * - * The key of the array should represent the line number and the value - * should represent the number of warnings that should occur on that line. - * - * @param string $filename - */ - public function getWarningList($filename = null): array - { - $warnings = [ - 'NamespaceUnitTest.0.inc' => [ - 3 => 1, - 8 => 1, - ], - 'NamespaceUnitTest.1.inc' => [ - 5 => 1, - ], - 'NamespaceUnitTest.2.inc' => [ - 3 => 1, - ], - 'NamespaceUnitTest.3.inc' => [ - 2 => 1, - 9 => 1, - ], - ]; - - return $warnings[$filename] ?? []; - } -} From d567707a876f55b5e01c8344a4103a99161d195e Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 13:40:53 +0200 Subject: [PATCH 2/9] Remove AtCovers sniffs --- .../Commenting/AtCoversCounterPartSniff.php | 145 ------------------ .../AtCoversFullyQualifiedNameSniff.php | 68 -------- .../AtCoversCounterPartUnitTest.php | 72 --------- .../AtCoversCounterPartUnitTest.php.0.inc | 9 -- .../AtCoversCounterPartUnitTest.php.1.inc | 9 -- .../AtCoversCounterPartUnitTest.php.10.inc | 12 -- ...CoversCounterPartUnitTest.php.10.inc.fixed | 12 -- .../AtCoversCounterPartUnitTest.php.11.inc | 12 -- ...CoversCounterPartUnitTest.php.11.inc.fixed | 12 -- .../AtCoversCounterPartUnitTest.php.12.inc | 12 -- ...CoversCounterPartUnitTest.php.12.inc.fixed | 13 -- .../AtCoversCounterPartUnitTest.php.2.inc | 6 - ...tCoversCounterPartUnitTest.php.2.inc.fixed | 9 -- .../AtCoversCounterPartUnitTest.php.3.inc | 6 - ...tCoversCounterPartUnitTest.php.3.inc.fixed | 9 -- .../AtCoversCounterPartUnitTest.php.4.inc | 9 -- ...tCoversCounterPartUnitTest.php.4.inc.fixed | 10 -- .../AtCoversCounterPartUnitTest.php.5.inc | 9 -- ...tCoversCounterPartUnitTest.php.5.inc.fixed | 10 -- .../AtCoversCounterPartUnitTest.php.6.inc | 10 -- ...tCoversCounterPartUnitTest.php.6.inc.fixed | 11 -- .../AtCoversCounterPartUnitTest.php.7.inc | 8 - ...tCoversCounterPartUnitTest.php.7.inc.fixed | 9 -- .../AtCoversCounterPartUnitTest.php.8.inc | 11 -- ...tCoversCounterPartUnitTest.php.8.inc.fixed | 12 -- .../AtCoversCounterPartUnitTest.php.9.inc | 9 -- ...tCoversCounterPartUnitTest.php.9.inc.fixed | 12 -- .../AtCoversFullyQualifiedNameUnitTest.php | 52 ------- ...CoversFullyQualifiedNameUnitTest.php.0.inc | 31 ---- ...FullyQualifiedNameUnitTest.php.0.inc.fixed | 31 ---- 30 files changed, 640 deletions(-) delete mode 100644 src/Hostnet/Sniffs/Commenting/AtCoversCounterPartSniff.php delete mode 100644 src/Hostnet/Sniffs/Commenting/AtCoversFullyQualifiedNameSniff.php delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.0.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.1.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.10.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.10.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.11.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.11.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.12.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.12.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.2.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.2.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.3.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.3.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.4.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.4.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.5.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.5.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.6.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.6.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.7.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.7.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.8.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.8.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.9.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.9.inc.fixed delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversFullyQualifiedNameUnitTest.php delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversFullyQualifiedNameUnitTest.php.0.inc delete mode 100644 test/Hostnet/Tests/Commenting/AtCoversFullyQualifiedNameUnitTest.php.0.inc.fixed diff --git a/src/Hostnet/Sniffs/Commenting/AtCoversCounterPartSniff.php b/src/Hostnet/Sniffs/Commenting/AtCoversCounterPartSniff.php deleted file mode 100644 index 2e25c8f..0000000 --- a/src/Hostnet/Sniffs/Commenting/AtCoversCounterPartSniff.php +++ /dev/null @@ -1,145 +0,0 @@ -getTokens(); - - if (false === strpos($phpcs_file->getFilename(), 'Test.php')) { - return count($tokens) + 1; - } - - $start_of_class = $phpcs_file->findNext([T_CLASS, T_TRAIT], 0); - $end_of_header_doc = $phpcs_file->findPrevious(T_DOC_COMMENT_CLOSE_TAG, $start_of_class); - $namespaces = []; - if ($end_of_header_doc !== false) { - $namespaces = $this->extractCoverageNamespaces($phpcs_file, $end_of_header_doc); - } - - $test_namespace = $this->getNamespaceFromFile($phpcs_file->getFilename()); - $counter_part_namespace = str_replace('Tests\\', '', $test_namespace); - $counter_part_namespace = \substr($counter_part_namespace, 0, \strrpos($counter_part_namespace, 'Test')); - $expected_covers_namespace = "\\$counter_part_namespace"; - if (!\class_exists($counter_part_namespace) || \in_array($expected_covers_namespace, $namespaces, true)) { - return count($tokens) + 1; - } - - $fix = sprintf("/**\n * @covers %s\n */\n", $expected_covers_namespace); - $fix_position = $start_of_class; - // The class doc should be within +/- 5 tokens of the class token. - if ($end_of_header_doc !== false && $end_of_header_doc > ($start_of_class - 5)) { - $fix = sprintf("* @covers %s\n ", $expected_covers_namespace); - $fix_position = $end_of_header_doc; - } - - if ($phpcs_file->addFixableError( - sprintf('Test class is missing "@covers %s".', $expected_covers_namespace), - $start_of_class, - 'MissingAtCoversForCounterPart' - )) { - $expected_namespace_length = \strlen($expected_covers_namespace); - foreach ($namespaces as $position => $namespace) { - if (stripos($namespace, $expected_covers_namespace) === false) { - continue; - } - - if (\strlen($namespace) > $expected_namespace_length - && $namespace[$expected_namespace_length] === '\\') { - continue; - } - - $phpcs_file->fixer->replaceToken($position, $expected_covers_namespace); - - return count($tokens) + 1; - } - - $phpcs_file->fixer->addContentBefore($fix_position, $fix); - } - - return count($tokens) + 1; - } - - private function extractCoverageNamespaces(File $phpcs_file, int $close_tag_position): array - { - $coverage_namespaces = []; - $tokens = $phpcs_file->getTokens(); - $open_tag_position = $phpcs_file->findPrevious(T_DOC_COMMENT_OPEN_TAG, $close_tag_position); - - for ($i = $open_tag_position; $i < $close_tag_position; $i++) { - if ($tokens[$i]['content'] !== '@covers') { - continue; - } - - $coverage_namespaces[$i + 2] = $tokens[$i + 2]['content']; - } - - return $coverage_namespaces; - } - - private function getNamespaceFromFile(string $path_to_file): string - { - // PHP 8.0 forward compatibility @see https://www.php.net/manual/en/migration80.incompatible.php - if (!defined('T_NAME_QUALIFIED')) { - define('T_NAME_QUALIFIED', T_NS_SEPARATOR); - } - - $namespace = ''; - $class = ''; - - $getting_namespace = false; - $getting_class = false; - - foreach (token_get_all(file_get_contents($path_to_file)) as $token) { - // If this token is the namespace declaring, then flag that the next tokens will be the namespace name. - if (\is_array($token) && $token[0] === T_NAMESPACE) { - $getting_namespace = true; - } - - // If this token is the class declaring, then flag that the next tokens will be the class name. - if (\is_array($token) && ($token[0] === T_CLASS || $token[0] === T_TRAIT)) { - $getting_class = true; - } - - if ($getting_namespace) { - // If the token is a string or the namespace separator. - if (\is_array($token) && \in_array($token[0], [T_STRING, T_NS_SEPARATOR, T_NAME_QUALIFIED], true)) { - // Append the token's value to the name of the namespace. - $namespace .= $token[1]; - } elseif ($token === ';') { - $getting_namespace = false; - } - } - - if (!$getting_class) { - continue; - } - - // If the token is a string, it's the name of the class. - if (!\is_array($token) || $token[0] !== T_STRING) { - continue; - } - - // Store the token's value as the class name. - $class = $token[1]; - break; - } - - return $namespace ? $namespace . '\\' . $class : $class; - } -} diff --git a/src/Hostnet/Sniffs/Commenting/AtCoversFullyQualifiedNameSniff.php b/src/Hostnet/Sniffs/Commenting/AtCoversFullyQualifiedNameSniff.php deleted file mode 100644 index 8e6d978..0000000 --- a/src/Hostnet/Sniffs/Commenting/AtCoversFullyQualifiedNameSniff.php +++ /dev/null @@ -1,68 +0,0 @@ -getTokens(); - - // Is it a unit test? - if (false === strpos($phpcs_file->getFilename(), 'Test.php')) { - // No, skip the rest of it - return count($tokens) + 1; - } - - // The tag i found is it a @covers tag? - if ('@covers' !== $tokens[$stack_ptr]['content']) { - return $stack_ptr; - } - - $class_name_ptr = $phpcs_file->findNext(T_DOC_COMMENT_STRING, $stack_ptr + 1, null, false, null, true); - - // Did i find a string after the @covers tag? - if (false === $class_name_ptr) { - return $stack_ptr; - } - - $class_name = $tokens[$class_name_ptr]['content']; - - // Does the class name start with a backslash? - if ('\\' === $class_name[0]) { - return $stack_ptr; - } - - // Handle error - if ($phpcs_file->addFixableError(self::ERROR_MESSAGE, $class_name_ptr, self::ERROR_TYPE)) { - $phpcs_file->fixer->addContentBefore($class_name_ptr, '\\'); - } - - return $stack_ptr; - } -} diff --git a/test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php b/test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php deleted file mode 100644 index 7de0f3f..0000000 --- a/test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php +++ /dev/null @@ -1,72 +0,0 @@ - [], - 'AtCoversCounterPartUnitTest.php.1.inc' => [], - 'AtCoversCounterPartUnitTest.php.2.inc' => [ - 4 => 1, - ], - 'AtCoversCounterPartUnitTest.php.3.inc' => [ - 4 => 1, - ], - 'AtCoversCounterPartUnitTest.php.4.inc' => [ - 7 => 1, - ], - 'AtCoversCounterPartUnitTest.php.5.inc' => [ - 7 => 1, - ], - 'AtCoversCounterPartUnitTest.php.6.inc' => [ - 8 => 1, - ], - 'AtCoversCounterPartUnitTest.php.7.inc' => [ - 6 => 1, - ], - 'AtCoversCounterPartUnitTest.php.8.inc' => [ - 9 => 1, - ], - 'AtCoversCounterPartUnitTest.php.9.inc' => [ - 7 => 1, - ], - 'AtCoversCounterPartUnitTest.php.10.inc' => [ - 10 => 1, - ], - 'AtCoversCounterPartUnitTest.php.11.inc' => [ - 10 => 1, - ], - 'AtCoversCounterPartUnitTest.php.12.inc' => [ - 10 => 1, - ], - ]; - - if (! isset($list[$filename])) { - return []; - } - return $list[$filename]; - } - - /** - * {@inheritdoc} - */ - public function getWarningList() - { - return []; - } -} diff --git a/test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.0.inc b/test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.0.inc deleted file mode 100644 index 42840c2..0000000 --- a/test/Hostnet/Tests/Commenting/AtCoversCounterPartUnitTest.php.0.inc +++ /dev/null @@ -1,9 +0,0 @@ - int) - */ - public function getErrorList($filename = ''): array - { - $list = [ - 'AtCoversFullyQualifiedNameUnitTest.php.0.inc' => [ - 3 => 1, - 11 => 1, - 16 => 1, - ], - ]; - - if (! isset($list[$filename])) { - return []; - } - return $list[$filename]; - } - - /** - * Returns the lines where warnings should occur. - * - * The key of the array should represent the line number and the value - * should represent the number of warnings that should occur on that line. - * - * @return array(int => int) - */ - public function getWarningList(): array - { - return []; - } -} diff --git a/test/Hostnet/Tests/Commenting/AtCoversFullyQualifiedNameUnitTest.php.0.inc b/test/Hostnet/Tests/Commenting/AtCoversFullyQualifiedNameUnitTest.php.0.inc deleted file mode 100644 index 3ec2ccd..0000000 --- a/test/Hostnet/Tests/Commenting/AtCoversFullyQualifiedNameUnitTest.php.0.inc +++ /dev/null @@ -1,31 +0,0 @@ - Date: Tue, 28 Apr 2026 13:42:08 +0200 Subject: [PATCH 3/9] Add typehints to const --- .../Sniffs/Classes/CopyrightMustBeBeforeDeclareSniff.php | 2 +- .../Classes/VariableAndPropertyMustBeInSnakeCaseSniff.php | 2 +- src/Hostnet/Sniffs/Declares/StrictSniff.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Hostnet/Sniffs/Classes/CopyrightMustBeBeforeDeclareSniff.php b/src/Hostnet/Sniffs/Classes/CopyrightMustBeBeforeDeclareSniff.php index 3a00c14..c280d77 100644 --- a/src/Hostnet/Sniffs/Classes/CopyrightMustBeBeforeDeclareSniff.php +++ b/src/Hostnet/Sniffs/Classes/CopyrightMustBeBeforeDeclareSniff.php @@ -11,7 +11,7 @@ class CopyrightMustBeBeforeDeclareSniff implements Sniff { - private const ERROR = 'declare(strict_types=1) should be after the copyright statement'; + private const string ERROR = 'declare(strict_types=1) should be after the copyright statement'; /** * {@inheritdoc} diff --git a/src/Hostnet/Sniffs/Classes/VariableAndPropertyMustBeInSnakeCaseSniff.php b/src/Hostnet/Sniffs/Classes/VariableAndPropertyMustBeInSnakeCaseSniff.php index faad7b4..7b270d6 100644 --- a/src/Hostnet/Sniffs/Classes/VariableAndPropertyMustBeInSnakeCaseSniff.php +++ b/src/Hostnet/Sniffs/Classes/VariableAndPropertyMustBeInSnakeCaseSniff.php @@ -14,7 +14,7 @@ */ class VariableAndPropertyMustBeInSnakeCaseSniff implements Sniff { - private const SUPER_GLOBALS = [ + private const array SUPER_GLOBALS = [ 'GLOBALS', '_SERVER', '_GET', diff --git a/src/Hostnet/Sniffs/Declares/StrictSniff.php b/src/Hostnet/Sniffs/Declares/StrictSniff.php index 806c505..585c096 100644 --- a/src/Hostnet/Sniffs/Declares/StrictSniff.php +++ b/src/Hostnet/Sniffs/Declares/StrictSniff.php @@ -15,9 +15,9 @@ */ class StrictSniff implements Sniff { - private const ERROR = 'declare(strict_types = 1) not found'; + private const string ERROR = 'declare(strict_types = 1) not found'; - private const R_VALUE = [ + private const array R_VALUE = [ T_LNUMBER, //integers T_STRING, //identifiers T_NUM_STRING, // numeric array index inside string From 62669360e21f0adec423fddcd52d96ae5a8593fa Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 13:47:07 +0200 Subject: [PATCH 4/9] Drop PHP 8.1 and 8.2 support, add 8.4 and 8.5 --- .github/workflows/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index f6fedad..ae6a514 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - php-versions: ['8.1','8.2','8.3'] + php-versions: ['8.3','8.4','8.5'] name: PHP ${{ matrix.php-versions }} steps: - uses: actions/checkout@v2 From 610cd5b484a06a10fe7483c311b02b7f8af7264f Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 14:07:15 +0200 Subject: [PATCH 5/9] Upgrade tot PHPUnit 11 --- composer.json | 2 +- phpunit.xml.dist | 2 ++ test/Hostnet/Tests/AbstractSniffUnitTest.php | 5 +---- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index a77ee7f..9f583b3 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ }, "require-dev": { "composer/composer": "^2.1.14", - "phpunit/phpunit": "^9.5.10" + "phpunit/phpunit": "^11.5.55" }, "autoload": { "psr-0": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 5ce5b30..7c6d749 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -8,6 +8,8 @@ ./test/ + ./test/Hostnet/Tests/AbstractSniffUnitTest.php + ./test/Hostnet/Tests/CopiedAbstractSniffUnitTest.php diff --git a/test/Hostnet/Tests/AbstractSniffUnitTest.php b/test/Hostnet/Tests/AbstractSniffUnitTest.php index 94ff51c..5d6eea0 100644 --- a/test/Hostnet/Tests/AbstractSniffUnitTest.php +++ b/test/Hostnet/Tests/AbstractSniffUnitTest.php @@ -32,10 +32,7 @@ protected function setUp(): void $GLOBALS['PHP_CODESNIFFER_FIXABLE_CODES'] = []; parent::setUp(); - } - public function doesNotPerformAssertions(): bool - { - return true; + $this->expectNotToPerformAssertions(); } } From 50e95e066e98f1730d0de121f353d125b8ff5046 Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 14:20:55 +0200 Subject: [PATCH 6/9] Updated deprecated syntax --- src/Hostnet/ruleset.xml | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/Hostnet/ruleset.xml b/src/Hostnet/ruleset.xml index fd75997..cd3cdf8 100644 --- a/src/Hostnet/ruleset.xml +++ b/src/Hostnet/ruleset.xml @@ -122,13 +122,10 @@ - + + + + @@ -175,20 +172,17 @@ - + + + + + + + + + + /> From 3bdfd1c7586d529d118c782f71c129693fe66453 Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 14:28:17 +0200 Subject: [PATCH 7/9] Remove referenced deprecated sniffs --- src/Hostnet/ruleset.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Hostnet/ruleset.xml b/src/Hostnet/ruleset.xml index cd3cdf8..33dc73f 100644 --- a/src/Hostnet/ruleset.xml +++ b/src/Hostnet/ruleset.xml @@ -22,7 +22,6 @@ - @@ -240,9 +239,6 @@ - - - @@ -298,7 +294,7 @@ - + From 950dff046b49a056ffb161a9472bfaa5f045dc85 Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 15:28:57 +0200 Subject: [PATCH 8/9] Replace @covers --- .../AbstractClassMustBePrefixedWithAbstractUnitTest.php | 5 ++--- .../ClassAndNamespaceMustBeInPascalCaseUnitTest.php | 5 ++--- .../Tests/Classes/CopyrightMustBeBeforeDeclareUnitTest.php | 5 ++--- .../InterfaceMustBePostfixedWithInterfaceUnitTest.php | 5 ++--- .../NoVerticalWhitespaceBetweenUseStatementsUnitTest.php | 5 ++--- .../Tests/Classes/OnlyOneUseStatementPerLineUnitTest.php | 6 ++---- .../Classes/ProtectedPropertiesAreNotAllowedUnitTest.php | 7 ++----- .../Classes/TraitMustBePostfixedWithTraitUnitTest.php | 5 ++--- .../Classes/UseStatementsAlphabeticallyOrderedUnitTest.php | 5 ++--- .../VariableAndPropertyMustBeInSnakeCaseUnitTest.php | 5 ++--- 10 files changed, 20 insertions(+), 33 deletions(-) diff --git a/test/Hostnet/Tests/Classes/AbstractClassMustBePrefixedWithAbstractUnitTest.php b/test/Hostnet/Tests/Classes/AbstractClassMustBePrefixedWithAbstractUnitTest.php index 447021b..77f9f1c 100644 --- a/test/Hostnet/Tests/Classes/AbstractClassMustBePrefixedWithAbstractUnitTest.php +++ b/test/Hostnet/Tests/Classes/AbstractClassMustBePrefixedWithAbstractUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\AbstractClassMustBePrefixedWithAbstractSniff - */ +#[CoversClass(\Hostnet\Sniffs\Classes\AbstractClassMustBePrefixedWithAbstractSniff::class)] class AbstractClassMustBePrefixedWithAbstractUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/ClassAndNamespaceMustBeInPascalCaseUnitTest.php b/test/Hostnet/Tests/Classes/ClassAndNamespaceMustBeInPascalCaseUnitTest.php index 5dce720..79977f1 100644 --- a/test/Hostnet/Tests/Classes/ClassAndNamespaceMustBeInPascalCaseUnitTest.php +++ b/test/Hostnet/Tests/Classes/ClassAndNamespaceMustBeInPascalCaseUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\ClassAndNamespaceMustBeInPascalCaseSniff - */ +#[CoversClass(\Hostnet\Sniffs\Classes\ClassAndNamespaceMustBeInPascalCaseSniff::class)] class ClassAndNamespaceMustBeInPascalCaseUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/CopyrightMustBeBeforeDeclareUnitTest.php b/test/Hostnet/Tests/Classes/CopyrightMustBeBeforeDeclareUnitTest.php index c58a761..0cd2a12 100644 --- a/test/Hostnet/Tests/Classes/CopyrightMustBeBeforeDeclareUnitTest.php +++ b/test/Hostnet/Tests/Classes/CopyrightMustBeBeforeDeclareUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\CopyrightMustBeBeforeDeclareSniff - */ +#[CoversClass(\Hostnet\Sniffs\Classes\CopyrightMustBeBeforeDeclareSniff::class)] class CopyrightMustBeBeforeDeclareUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/InterfaceMustBePostfixedWithInterfaceUnitTest.php b/test/Hostnet/Tests/Classes/InterfaceMustBePostfixedWithInterfaceUnitTest.php index d60c104..d81a342 100644 --- a/test/Hostnet/Tests/Classes/InterfaceMustBePostfixedWithInterfaceUnitTest.php +++ b/test/Hostnet/Tests/Classes/InterfaceMustBePostfixedWithInterfaceUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\InterfaceMustBePostfixedWithInterfaceSniff - */ +#[CoversClass(\Hostnet\Sniffs\Classes\InterfaceMustBePostfixedWithInterfaceSniff::class)] class InterfaceMustBePostfixedWithInterfaceUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/NoVerticalWhitespaceBetweenUseStatementsUnitTest.php b/test/Hostnet/Tests/Classes/NoVerticalWhitespaceBetweenUseStatementsUnitTest.php index 2caa910..19e166b 100644 --- a/test/Hostnet/Tests/Classes/NoVerticalWhitespaceBetweenUseStatementsUnitTest.php +++ b/test/Hostnet/Tests/Classes/NoVerticalWhitespaceBetweenUseStatementsUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\NoVerticalWhitespaceBetweenUseStatementsUnitTest - */ +#[CoversClass(\Hostnet\Sniffs\Classes\NoVerticalWhitespaceBetweenUseStatementsUnitTest::class)] class NoVerticalWhitespaceBetweenUseStatementsUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/OnlyOneUseStatementPerLineUnitTest.php b/test/Hostnet/Tests/Classes/OnlyOneUseStatementPerLineUnitTest.php index 95e4e3a..18fc3a2 100644 --- a/test/Hostnet/Tests/Classes/OnlyOneUseStatementPerLineUnitTest.php +++ b/test/Hostnet/Tests/Classes/OnlyOneUseStatementPerLineUnitTest.php @@ -7,11 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * Unit test for ProtectedPropertiesAreNotAllowedSniff - * @covers \Hostnet\Sniffs\Classes\OnlyOneUseStatementPerLineUnitTest - */ +#[CoversClass(\Hostnet\Sniffs\Classes\OnlyOneUseStatementPerLineUnitTest::class)] class OnlyOneUseStatementPerLineUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/ProtectedPropertiesAreNotAllowedUnitTest.php b/test/Hostnet/Tests/Classes/ProtectedPropertiesAreNotAllowedUnitTest.php index 3204bf4..ec590a1 100644 --- a/test/Hostnet/Tests/Classes/ProtectedPropertiesAreNotAllowedUnitTest.php +++ b/test/Hostnet/Tests/Classes/ProtectedPropertiesAreNotAllowedUnitTest.php @@ -7,12 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * Unit test for ProtectedPropertiesAreNotAllowedSniff - * - * @covers \Hostnet\Sniffs\Classes\ProtectedPropertiesAreNotAllowedUnitTest - */ +#[CoversClass(\Hostnet\Sniffs\Classes\ProtectedPropertiesAreNotAllowedUnitTest::class)] class ProtectedPropertiesAreNotAllowedUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/TraitMustBePostfixedWithTraitUnitTest.php b/test/Hostnet/Tests/Classes/TraitMustBePostfixedWithTraitUnitTest.php index 5c1e1ec..7c57253 100644 --- a/test/Hostnet/Tests/Classes/TraitMustBePostfixedWithTraitUnitTest.php +++ b/test/Hostnet/Tests/Classes/TraitMustBePostfixedWithTraitUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\TraitMustBePostfixedWithTraitSniff - */ +#[CoversClass(\Hostnet\Sniffs\Classes\TraitMustBePostfixedWithTraitSniff::class)] class TraitMustBePostfixedWithTraitUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/UseStatementsAlphabeticallyOrderedUnitTest.php b/test/Hostnet/Tests/Classes/UseStatementsAlphabeticallyOrderedUnitTest.php index 65bee2e..48db490 100644 --- a/test/Hostnet/Tests/Classes/UseStatementsAlphabeticallyOrderedUnitTest.php +++ b/test/Hostnet/Tests/Classes/UseStatementsAlphabeticallyOrderedUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\UseStatementsAlphabeticallyOrderedUnitTest - */ +#[CoversClass(\Hostnet\Sniffs\Classes\UseStatementsAlphabeticallyOrderedUnitTest::class)] class UseStatementsAlphabeticallyOrderedUnitTest extends AbstractSniffUnitTest { /** diff --git a/test/Hostnet/Tests/Classes/VariableAndPropertyMustBeInSnakeCaseUnitTest.php b/test/Hostnet/Tests/Classes/VariableAndPropertyMustBeInSnakeCaseUnitTest.php index d560859..f260f0c 100644 --- a/test/Hostnet/Tests/Classes/VariableAndPropertyMustBeInSnakeCaseUnitTest.php +++ b/test/Hostnet/Tests/Classes/VariableAndPropertyMustBeInSnakeCaseUnitTest.php @@ -7,10 +7,9 @@ namespace Hostnet\Tests\Classes; use Hostnet\Tests\AbstractSniffUnitTest; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Hostnet\Sniffs\Classes\VariableAndPropertyMustBeInSnakeCaseSniff - */ +#[CoversClass(\Hostnet\Sniffs\Classes\VariableAndPropertyMustBeInSnakeCaseSniff::class)] class VariableAndPropertyMustBeInSnakeCaseUnitTest extends AbstractSniffUnitTest { /** From 943ea8d91a37c1ad0a8b873b54ad2c64b884ed07 Mon Sep 17 00:00:00 2001 From: Jan Lam Date: Tue, 28 Apr 2026 15:33:07 +0200 Subject: [PATCH 9/9] phpunit.xml.dist --- composer.json | 2 +- phpunit.xml.dist | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 9f583b3..e6a733f 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a defined set of coding standards. Hostnet version", "license": "MIT", "require": { - "php": "^8.1", + "php": "^8.3", "composer-plugin-api": "^2.0.0", "hostnet/path-composer-plugin-lib": "^1.0.5", "slevomat/coding-standard": "^8.6.2", diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 7c6d749..b6c183a 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,10 +1,5 @@ - - - - ./src - - + ./test/ @@ -12,4 +7,9 @@ ./test/Hostnet/Tests/CopiedAbstractSniffUnitTest.php + + + ./src + +