This PR was merged into the 3.x branch.
Discussion
----------
Add support for package/version on deprecations
Commits
-------
0ce79df5 Use trigger_deprecation() instead of trigger_error() for deprecations
* 3.x:
Introduce ChainCache and ReadOnlyFilesystemCache
Add a note about how macros can override existing functions
Fix dumping callables on Node::__toString()
This PR was squashed before being merged into the 4.x branch.
Discussion
----------
Add support for recursive loops
Fixes#3416Fixes#4144
Commits
-------
481e7f0d Prevent infinite loops
fa1a217f Add another test
036c9943 Don't unset loop when it's not defined
1b9baa76 Remove usage of the internal _parent context variable in loops
c28f68f8 Add support for Escaper and Sandbox for Generator nodes
c1933323 Simplify implementation
8c5dd39b Use loop() to recurse instead of loop.recurse()
e95d6b2f Add support for recursive loops
This PR was merged into the 3.x branch.
Discussion
----------
Deprecate NameExpression internal methods
Deprecate two methods from `Twig\Node\Expression\NameExpression`:
* `isSimple()`: did not find any usage in Twig (or even Symfony) repositories
* `isSpecial()`: inlined for better performance ($name is available in the method)
Commits
-------
3531f959 Deprecate NameExpression internal methods
Deprecate two methods from NameExpression:
* isSimple(): did not find any usage in Twig (or even Symfony) repositories
* isSpecial(): inlined for better performance ($name is available in the method)
* 3.x:
fix condition for running use_yield test with extra packages
fix the set of installed packages for TwigExtraBundle on PHP 8.0
simplify an iterable check
Fixed typo
Tweak code, tests, and docs for shuffle
Add shuffle filter
This PR was merged into the 3.x branch.
Discussion
----------
[String] Add singularize and pluralize filter
This PR follows up this one in Symfony https://github.com/symfony/symfony/pull/57245.
It adds 2 new filters `singularize` and `pluralize`. It uses the String component, especially `EnglishInflector` and `FrenchInflector`.
Examples:
```php
{{ 'person'|pluralize('en') }} // persons
{{ 'person'|pluralize('en', false) }} // ['persons', 'people']
{{ 'personne'|pluralize('fr') }} // personnes
{{ 'personne'|pluralize('fr', false) }} // ['personnes']
{{ 'persons'|singluarize('en') }} // person
{{ 'people'|singluarize('en') }} // person
{{ 'persons'|singluarize('en', false) }} // ['person']
{{ 'personnes'|singluarize('fr') }} // personne
{{ 'personnes'|singluarize('fr', false) }} // ['personne']
{{ 'persona'|pluralize('it') }} // \InvalidArgumentException('Language "it" is not supported.')
{{ 'persone'|singluarize('it') }} // \InvalidArgumentException('Language "it" is not supported.')
```
Commits
-------
8c969d40 Tweak code and docs
cb392489 feat(string-extra): Add singularize and pluralize filter
This PR was merged into the 3.x branch.
Discussion
----------
[Doc] Modernize Class name in examples
From "Project_Twig_Extension" to "CustomExtension"
Just a suggestion, feel free to close if you want to keep it like this :)
I found those namings only in "advanced"
Commits
-------
4a8e8ee1 [Doc] Modernize Class name in examples
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
[Doc] Replace http links with https
Commits
-------
ae429bd5 [Doc] Replace http links with https