diff --git a/config/sets/symfony/composer-based.php b/config/sets/symfony/composer-based.php index 98d44931..297c0a15 100644 --- a/config/sets/symfony/composer-based.php +++ b/config/sets/symfony/composer-based.php @@ -330,7 +330,7 @@ // symfony/validator 8.1 ConstraintValidatorValidateToValidateInContextRector::class, - // twig/twig 3.21 + // twig/twig 3.21 + symfony/twig-bridge 7.3 GetFiltersAndFunctionsToAsTwigAttributeRector::class, // jms/serializer 3.14 diff --git a/rules-tests/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector/config/composer.json b/rules-tests/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector/config/composer.json index 26b1296f..d1dbb7ec 100644 --- a/rules-tests/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector/config/composer.json +++ b/rules-tests/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector/config/composer.json @@ -1,5 +1,6 @@ { "require": { - "twig/twig": "^3.21" + "twig/twig": "^3.21", + "symfony/twig-bridge": "^7.3" } } diff --git a/rules/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector.php b/rules/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector.php index a826b6d5..f14141d8 100644 --- a/rules/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector.php +++ b/rules/Symfony73/Rector/Class_/GetFiltersAndFunctionsToAsTwigAttributeRector.php @@ -27,9 +27,17 @@ public function __construct( ) { } - public function provideComposerPackageConstraint(): ComposerPackageConstraint + /** + * @return ComposerPackageConstraint[] + */ + public function provideComposerPackageConstraint(): array { - return new ComposerPackageConstraint('twig/twig', '>=3.21'); + // the #[AsTwig*] attributes exist in twig/twig 3.21, but Symfony only autoregisters extension-less + // classes from them in symfony/twig-bridge 7.3; without both, the stripped TwigExtension is silently lost + return [ + new ComposerPackageConstraint('twig/twig', '>=3.21'), + new ComposerPackageConstraint('symfony/twig-bridge', '>=7.3'), + ]; } public function getRuleDefinition(): RuleDefinition