From 90549196ed7ffc668c76c4de9d84d3ce1ce72bbe Mon Sep 17 00:00:00 2001 From: Oliver Klee Date: Fri, 27 Feb 2026 16:39:15 +0100 Subject: [PATCH 1/4] [BUGFIX] Avoid double autoloading of class aliases --- CHANGELOG.md | 2 ++ class-aliases/Rule/Rule.php | 17 +++++++++++++++++ class-aliases/RuleSet/RuleContainer.php | 14 ++++++++++++++ composer.json | 14 +++++++------- config/phpstan.neon | 1 + config/rector.php | 1 + src/Rule/Rule.php | 14 -------------- src/RuleSet/RuleContainer.php | 12 ------------ 8 files changed, 42 insertions(+), 33 deletions(-) create mode 100644 class-aliases/Rule/Rule.php create mode 100644 class-aliases/RuleSet/RuleContainer.php delete mode 100644 src/Rule/Rule.php delete mode 100644 src/RuleSet/RuleContainer.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 151d0ac1..befaf3c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ Please also have a look at our ### Fixed +- Avoid double autoloading of class aliases (#1552) + ### Documentation ## 9.2.0: New features and deprecations diff --git a/class-aliases/Rule/Rule.php b/class-aliases/Rule/Rule.php new file mode 100644 index 00000000..67c4acd7 --- /dev/null +++ b/class-aliases/Rule/Rule.php @@ -0,0 +1,17 @@ +withPaths( [ __DIR__ . '/../bin', + __DIR__ . '/../class-aliases', __DIR__ . '/../config', __DIR__ . '/../src', __DIR__ . '/../tests', diff --git a/src/Rule/Rule.php b/src/Rule/Rule.php deleted file mode 100644 index bed19cf2..00000000 --- a/src/Rule/Rule.php +++ /dev/null @@ -1,14 +0,0 @@ - Date: Sun, 1 Mar 2026 16:55:14 +0100 Subject: [PATCH 2/4] Also check with `interface_exists` --- class-aliases/Rule/Rule.php | 2 +- class-aliases/RuleSet/RuleContainer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/class-aliases/Rule/Rule.php b/class-aliases/Rule/Rule.php index 67c4acd7..a1bfeeda 100644 --- a/class-aliases/Rule/Rule.php +++ b/class-aliases/Rule/Rule.php @@ -8,7 +8,7 @@ use function Safe\class_alias; -if (!\class_exists(Rule::class)) { +if (!\class_exists(Rule::class) && !\interface_exists(Rule::class)) { /** * @deprecated in v9.2, will be removed in v10.0. Use `Property\Declaration` instead, which is a direct * replacement. diff --git a/class-aliases/RuleSet/RuleContainer.php b/class-aliases/RuleSet/RuleContainer.php index ee833b43..8e51026c 100644 --- a/class-aliases/RuleSet/RuleContainer.php +++ b/class-aliases/RuleSet/RuleContainer.php @@ -6,7 +6,7 @@ use function Safe\class_alias; -if (!\class_exists(RuleContainer::class)) { +if (!\class_exists(RuleContainer::class) && !\interface_exists(RuleContainer::class)) { /** * @deprecated in v9.2, will be removed in v10.0. Use `DeclarationList` instead, which is a direct replacement. */ From 76da236b383b48df41d709a8dd90f64fb96384cd Mon Sep 17 00:00:00 2001 From: Oliver Klee Date: Tue, 3 Mar 2026 09:46:08 +0100 Subject: [PATCH 3/4] Move back into `src/` --- composer.json | 14 +++++++------- config/phpstan.neon | 1 - config/rector.php | 1 - {class-aliases => src}/Rule/Rule.php | 0 {class-aliases => src}/RuleSet/RuleContainer.php | 0 5 files changed, 7 insertions(+), 9 deletions(-) rename {class-aliases => src}/Rule/Rule.php (100%) rename {class-aliases => src}/RuleSet/RuleContainer.php (100%) diff --git a/composer.json b/composer.json index 50457441..4d5285ea 100644 --- a/composer.json +++ b/composer.json @@ -48,8 +48,8 @@ "Sabberworm\\CSS\\": "src/" }, "files": [ - "class-aliases/Rule/Rule.php", - "class-aliases/RuleSet/RuleContainer.php" + "src/Rule/Rule.php", + "src/RuleSet/RuleContainer.php" ] }, "autoload-dev": { @@ -80,9 +80,9 @@ "check:dynamic": [ "@check:tests" ], - "check:php:codesniffer": "phpcs --standard=config/phpcs.xml bin class-aliases config src tests", - "check:php:fixer": "\"./.phive/php-cs-fixer\" --config=config/php-cs-fixer.php fix --dry-run -v --show-progress=dots --diff bin class-aliases config src tests", - "check:php:lint": "parallel-lint bin class-aliases config src tests", + "check:php:codesniffer": "phpcs --standard=config/phpcs.xml bin config src tests", + "check:php:fixer": "\"./.phive/php-cs-fixer\" --config=config/php-cs-fixer.php fix --dry-run -v --show-progress=dots --diff bin config src tests", + "check:php:lint": "parallel-lint bin config src tests", "check:php:rector": "rector process --no-progress-bar --dry-run --config=config/rector.php", "check:php:stan": "phpstan --no-progress --configuration=config/phpstan.neon", "check:static": [ @@ -109,8 +109,8 @@ "@fix:php:codesniffer", "@fix:php:fixer" ], - "fix:php:codesniffer": "phpcbf --standard=config/phpcs.xml bin class-aliases config src tests", - "fix:php:fixer": "\"./.phive/php-cs-fixer\" --config=config/php-cs-fixer.php fix bin class-aliases config src tests", + "fix:php:codesniffer": "phpcbf --standard=config/phpcs.xml bin config src tests", + "fix:php:fixer": "\"./.phive/php-cs-fixer\" --config=config/php-cs-fixer.php fix bin config src tests", "fix:php:rector": "rector process --config=config/rector.php", "phpstan:baseline": "phpstan --configuration=config/phpstan.neon --generate-baseline=config/phpstan-baseline.neon --allow-empty-baseline", "phpstan:clearcache": "phpstan clear-result-cache" diff --git a/config/phpstan.neon b/config/phpstan.neon index 381faeef..ec625a44 100644 --- a/config/phpstan.neon +++ b/config/phpstan.neon @@ -8,7 +8,6 @@ parameters: paths: - %currentWorkingDirectory%/bin/ - - %currentWorkingDirectory%/class-aliases/ - %currentWorkingDirectory%/src/ - %currentWorkingDirectory%/tests/ diff --git a/config/rector.php b/config/rector.php index dfdf6f6f..cf501b19 100644 --- a/config/rector.php +++ b/config/rector.php @@ -11,7 +11,6 @@ ->withPaths( [ __DIR__ . '/../bin', - __DIR__ . '/../class-aliases', __DIR__ . '/../config', __DIR__ . '/../src', __DIR__ . '/../tests', diff --git a/class-aliases/Rule/Rule.php b/src/Rule/Rule.php similarity index 100% rename from class-aliases/Rule/Rule.php rename to src/Rule/Rule.php diff --git a/class-aliases/RuleSet/RuleContainer.php b/src/RuleSet/RuleContainer.php similarity index 100% rename from class-aliases/RuleSet/RuleContainer.php rename to src/RuleSet/RuleContainer.php From 396495548e6d4284f2ebba18abb6d36d7fd5f50b Mon Sep 17 00:00:00 2001 From: Oliver Klee Date: Tue, 3 Mar 2026 09:46:53 +0100 Subject: [PATCH 4/4] Avoid automatic autoloading --- src/Rule/Rule.php | 2 +- src/RuleSet/RuleContainer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Rule/Rule.php b/src/Rule/Rule.php index a1bfeeda..ee97121d 100644 --- a/src/Rule/Rule.php +++ b/src/Rule/Rule.php @@ -8,7 +8,7 @@ use function Safe\class_alias; -if (!\class_exists(Rule::class) && !\interface_exists(Rule::class)) { +if (!\class_exists(Rule::class, false) && !\interface_exists(Rule::class, false)) { /** * @deprecated in v9.2, will be removed in v10.0. Use `Property\Declaration` instead, which is a direct * replacement. diff --git a/src/RuleSet/RuleContainer.php b/src/RuleSet/RuleContainer.php index 8e51026c..fa82b492 100644 --- a/src/RuleSet/RuleContainer.php +++ b/src/RuleSet/RuleContainer.php @@ -6,7 +6,7 @@ use function Safe\class_alias; -if (!\class_exists(RuleContainer::class) && !\interface_exists(RuleContainer::class)) { +if (!\class_exists(RuleContainer::class, false) && !\interface_exists(RuleContainer::class, false)) { /** * @deprecated in v9.2, will be removed in v10.0. Use `DeclarationList` instead, which is a direct replacement. */