From fe9ce1356d5226e940c238b2abf8af3c4b92c258 Mon Sep 17 00:00:00 2001 From: Oskar Stark Date: Fri, 12 Sep 2025 16:36:17 +0200 Subject: [PATCH] Forbid declare strict types --- .phpstan/ForbidDeclareStrictTypesRule.php | 62 +++++++++++++++++++++++ .phpstan/extension.neon | 1 + 2 files changed, 63 insertions(+) create mode 100644 .phpstan/ForbidDeclareStrictTypesRule.php diff --git a/.phpstan/ForbidDeclareStrictTypesRule.php b/.phpstan/ForbidDeclareStrictTypesRule.php new file mode 100644 index 000000000..73ba456e2 --- /dev/null +++ b/.phpstan/ForbidDeclareStrictTypesRule.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\AI\PHPStan; + +use PhpParser\Node; +use PhpParser\Node\Stmt\Declare_; +use PhpParser\Node\Stmt\DeclareDeclare; +use PHPStan\Analyser\Scope; +use PHPStan\Rules\Rule; +use PHPStan\Rules\RuleErrorBuilder; + +/** + * PHPStan rule that forbids usage of declare(strict_types=1) statements. + * + * This rule enforces that strict_types declaration should not be used. + * + * @author Oskar Stark + * + * @implements Rule + */ +final class ForbidDeclareStrictTypesRule implements Rule +{ + public function getNodeType(): string + { + return Declare_::class; + } + + public function processNode(Node $node, Scope $scope): array + { + if (!$node instanceof Declare_) { + return []; + } + + $errors = []; + + foreach ($node->declares as $declare) { + if ($declare instanceof DeclareDeclare) { + $key = $declare->key->toString(); + if ('strict_types' === $key) { + $errors[] = RuleErrorBuilder::message( + 'Usage of declare(strict_types=1) is forbidden. Remove the declare statement.' + ) + ->line($node->getLine()) + ->identifier('symfonyAi.forbidDeclareStrictTypes') + ->tip('Remove the declare(strict_types=1) statement from the file.') + ->build(); + } + } + } + + return $errors; + } +} diff --git a/.phpstan/extension.neon b/.phpstan/extension.neon index 63bf5f836..ee6993669 100644 --- a/.phpstan/extension.neon +++ b/.phpstan/extension.neon @@ -1,2 +1,3 @@ rules: + - Symfony\AI\PHPStan\ForbidDeclareStrictTypesRule - Symfony\AI\PHPStan\ForbidNativeExceptionRule