diff --git a/.docker/Dockerfile b/.docker/Dockerfile
index f0ea7a2..7f90aa9 100644
--- a/.docker/Dockerfile
+++ b/.docker/Dockerfile
@@ -2,12 +2,11 @@
ARG PHP_VERSION=8.4
ARG COMPOSER_VERSION=2.10
-ARG CS_BRANCH=3.13.5
+ARG CS_BRANCH=4.0.1
FROM composer:${COMPOSER_VERSION} AS composer_image
FROM php:${PHP_VERSION}-cli-alpine AS dev_image
-ARG CS_BRANCH
COPY --from=ghcr.io/mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN set -eu; \
apk upgrade --no-cache --quiet; \
@@ -20,7 +19,8 @@ RUN set -eu; \
# xdebug code coverage requires more memory than default amount.
COPY --from=composer_image --link /usr/bin/composer /usr/local/bin/composer
WORKDIR /usr/src/cs-test/
-RUN set -eu; \
+ARG CS_BRANCH
+RUN set -eux; \
git clone https://github.com/PHPCSStandards/PHP_CodeSniffer.git --branch ${CS_BRANCH} --single-branch . \
&& composer install \
&& composer require --dev --no-scripts --no-plugins max-antipin/php-code-sniffs
@@ -34,5 +34,5 @@ RUN --mount=type=bind,from=git-files,source=.,target=.git,readonly \
composer validate; \
composer install --no-autoloader --no-progress; \
composer dump-autoload --classmap-authoritative --strict-psr --strict-ambiguous
-COPY phpunit.9.xml /usr/src/cs-test/phpunit.xml
-COPY --from=source ./AntipinCS/ /usr/src/cs-test/src/Standards/AntipinCS/
\ No newline at end of file
+COPY --link phpunit.cs.xml /usr/src/cs-test/phpunit.xml
+COPY --from=source --link ./AntipinCS/ /usr/src/cs-test/src/Standards/AntipinCS/
\ No newline at end of file
diff --git a/.docker/compose.yaml b/.docker/compose.yaml
index b65eb0c..89f6a73 100644
--- a/.docker/compose.yaml
+++ b/.docker/compose.yaml
@@ -40,6 +40,6 @@ services:
volumes: *volumes
configs:
phpunit-cs:
- file: ./phpunit.9.xml
+ file: ./phpunit.cs.xml
xdebug:
file: ./xdebug.ini
diff --git a/.docker/phpunit.9.xml b/.docker/phpunit.9.xml
deleted file mode 100644
index 0b83210..0000000
--- a/.docker/phpunit.9.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
- tests/Standards/AllSniffs.php
-
-
-
-
- src/Standards/AntipinCS/
-
-
- src/Standards/AntipinCS/Tests/
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.docker/phpunit.cs.xml b/.docker/phpunit.cs.xml
new file mode 100644
index 0000000..d0c18d2
--- /dev/null
+++ b/.docker/phpunit.cs.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ src/Standards/AntipinCS/Tests/
+
+
+
+
+ src/Standards/AntipinCS/
+
+
+ src/Standards/AntipinCS/Tests/
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AntipinCS/Sniffs/Functions/ParameterTypeDeclarationSniff.php b/AntipinCS/Sniffs/Functions/ParameterTypeDeclarationSniff.php
index a21f70d..a079a3a 100644
--- a/AntipinCS/Sniffs/Functions/ParameterTypeDeclarationSniff.php
+++ b/AntipinCS/Sniffs/Functions/ParameterTypeDeclarationSniff.php
@@ -57,38 +57,7 @@ public function process(File $phpcsFile, int $stackPtr): void
);
return;
}
- $this->processBracket($phpcsFile, $token['parenthesis_opener']);
- if ($token['code'] === T_CLOSURE) {
- $use = $phpcsFile->findNext(T_USE, ($token['parenthesis_closer'] + 1), $token['scope_opener']);
- if ($use !== false) {
- $openBracket = $phpcsFile->findNext(T_OPEN_PARENTHESIS, ($use + 1));
- if (false === $openBracket) {
- throw new RuntimeException('Parse error');
- }
- $this->processBracket($phpcsFile, $openBracket);
- }
- }
- }
-
- protected function processBracket(File $phpcsFile, int $openBracket): void
- {
- $tokens = $phpcsFile->getTokens();
- if (isset($tokens[$openBracket]['parenthesis_owner'])) {
- $stackPtr = $tokens[$openBracket]['parenthesis_owner'];
- } else {
- $stackPtr = $phpcsFile->findPrevious(T_USE, ($openBracket - 1));
- if (false === $stackPtr) {
- $phpcsFile->addError(
- 'Unknown error',
- $openBracket,
- 'Unknown',
- [],
- 9
- );
- }
- # else: use condition found, skip it.
- return;
- }
+ $stackPtr = $token['parenthesis_owner'];
$params = $phpcsFile->getMethodParameters($stackPtr);
if (empty($params)) {
return;
@@ -163,7 +132,7 @@ private function ignoreMethod(File $phpcsFile, int $stackPtr): bool
* use ValueError;
* use \ErrorException;
* use PHP_CodeSniffer\Files\File;
- * use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest as SomeKindOfTests;
+ * use PHP_CodeSniffer\Tests\Standards\AbstractSniffTestCase as SomeKindOfTests;
* use PHPstan\Command\{AnalyseCommand,AnalyserResult as TmpResult,AnalyseApplication\TestApp};
* use function file_get_contents;
* use const JSON_BIGINT_AS_STRING;
diff --git a/AntipinCS/Sniffs/Functions/ReturnTypeDeclarationSniff.php b/AntipinCS/Sniffs/Functions/ReturnTypeDeclarationSniff.php
index 51eb48b..ae81f92 100644
--- a/AntipinCS/Sniffs/Functions/ReturnTypeDeclarationSniff.php
+++ b/AntipinCS/Sniffs/Functions/ReturnTypeDeclarationSniff.php
@@ -40,8 +40,7 @@ public function process(File $phpcsFile, int $stackPtr): void
static $skipMethods = ['__construct' => true, '__destruct' => true];
if (
!isset($skipTypes[$token['type']])
- && ($methodName = $phpcsFile->getDeclarationName($stackPtr)) !== null
- && isset($skipMethods[$methodName])
+ && isset($skipMethods[$phpcsFile->getDeclarationName($stackPtr)])
) {
return;
}
diff --git a/AntipinCS/Tests/Classes/PropertyTypeDeclarationUnitTest.php b/AntipinCS/Tests/Classes/PropertyTypeDeclarationUnitTest.php
index e77a347..d8dd1d8 100644
--- a/AntipinCS/Tests/Classes/PropertyTypeDeclarationUnitTest.php
+++ b/AntipinCS/Tests/Classes/PropertyTypeDeclarationUnitTest.php
@@ -10,14 +10,12 @@
namespace MaxAntipin\PHPCS\Standards\AntipinCS\Tests\Classes;
-use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest;
+use MaxAntipin\PHPCS\Standards\AntipinCS\Sniffs\Classes\PropertyTypeDeclarationSniff;
+use PHP_CodeSniffer\Tests\Standards\AbstractSniffTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
-/**
- * Unit test class for the PropertyTypeDeclaration sniff.
- *
- * @covers \MaxAntipin\PHPCS\Standards\AntipinCS\Sniffs\Classes\PropertyTypeDeclarationSniff
- */
-final class PropertyTypeDeclarationUnitTest extends AbstractSniffUnitTest
+#[CoversClass(PropertyTypeDeclarationSniff::class)]
+final class PropertyTypeDeclarationUnitTest extends AbstractSniffTestCase
{
/**
* Returns the lines where errors should occur.
diff --git a/AntipinCS/Tests/Functions/ParameterTypeDeclarationUnitTest.php b/AntipinCS/Tests/Functions/ParameterTypeDeclarationUnitTest.php
index a24164a..4bc29ce 100644
--- a/AntipinCS/Tests/Functions/ParameterTypeDeclarationUnitTest.php
+++ b/AntipinCS/Tests/Functions/ParameterTypeDeclarationUnitTest.php
@@ -10,14 +10,12 @@
namespace MaxAntipin\PHPCS\Standards\AntipinCS\Tests\Functions;
-use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest;
+use MaxAntipin\PHPCS\Standards\AntipinCS\Sniffs\Functions\ParameterTypeDeclarationSniff;
+use PHP_CodeSniffer\Tests\Standards\AbstractSniffTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
-/**
- * Unit test class for the ParameterTypeDeclaration sniff.
- *
- * @covers \MaxAntipin\PHPCS\Standards\AntipinCS\Sniffs\Functions\ParameterTypeDeclarationSniff
- */
-final class ParameterTypeDeclarationUnitTest extends AbstractSniffUnitTest
+#[CoversClass(ParameterTypeDeclarationSniff::class)]
+final class ParameterTypeDeclarationUnitTest extends AbstractSniffTestCase
{
/**
* Get a list of all test files to check.
diff --git a/AntipinCS/Tests/Functions/ReturnTypeDeclarationUnitTest.php b/AntipinCS/Tests/Functions/ReturnTypeDeclarationUnitTest.php
index d0cf003..41cda81 100644
--- a/AntipinCS/Tests/Functions/ReturnTypeDeclarationUnitTest.php
+++ b/AntipinCS/Tests/Functions/ReturnTypeDeclarationUnitTest.php
@@ -10,12 +10,12 @@
namespace MaxAntipin\PHPCS\Standards\AntipinCS\Tests\Functions;
-use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest;
+use MaxAntipin\PHPCS\Standards\AntipinCS\Sniffs\Functions\ReturnTypeDeclarationSniff;
+use PHP_CodeSniffer\Tests\Standards\AbstractSniffTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
-/**
- * @covers \MaxAntipin\PHPCS\Standards\AntipinCS\Sniffs\Functions\ReturnTypeDeclarationSniff
- */
-final class ReturnTypeDeclarationUnitTest extends AbstractSniffUnitTest
+#[CoversClass(ReturnTypeDeclarationSniff::class)]
+final class ReturnTypeDeclarationUnitTest extends AbstractSniffTestCase
{
/**
* Get a list of all test files to check.
diff --git a/Makefile b/Makefile
index 56f9240..7383013 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ fix-lint:
php ./vendor/bin/phpcbf
test-cs:
- cd ../cs-test/ && php ./vendor/bin/phpunit --no-coverage --filter AntipinCS
+ cd ../cs-test/ && php ./vendor/bin/phpunit --no-coverage -v -s --filter AntipinCS
test-coverage:
cd ../cs-test/ && XDEBUG_MODE=coverage php ./vendor/bin/phpunit --filter AntipinCS
diff --git a/README.md b/README.md
index 023f3ab..48438cc 100644
--- a/README.md
+++ b/README.md
@@ -83,3 +83,11 @@ Run test containers with all PHP versions and code coverage:
```Shell
docker compose -f .docker/compose-test.yaml up --quiet-build
```
+
+Two errors with property hooks:
+- There must not be more than one property declared per statement
+- Missing type declaration for property "$this"
+
+```Shell
+cat AntipinCS/Tests/Functions/ReturnTypeDeclarationUnitTest.2.inc | ./vendor/bin/phpcs --stdin-path=/php-code-sniffs/AntipinCS/Tests/Functions/ReturnTypeDeclarationUnitTest.2.php -v -s -
+```
\ No newline at end of file
diff --git a/composer.json b/composer.json
index ae4c395..fd3cd28 100644
--- a/composer.json
+++ b/composer.json
@@ -26,7 +26,8 @@
"require-dev": {
"phpstan/phpstan": "^2.1",
"phpcsstandards/phpcsdevtools": "^1.2",
- "max-antipin/packagist-export-ignore": "^1"
+ "max-antipin/packagist-export-ignore": "^1",
+ "phpunit/phpunit": "^11"
},
"autoload": {
"psr-4": {
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
index 45dd243..ecab15f 100644
--- a/phpcs.xml.dist
+++ b/phpcs.xml.dist
@@ -10,7 +10,7 @@
-
+