* 3.x:
Deprecate using Node directly, introduce EmptyNode and Nodes
Add support for inline comments
Update plural.rst: Fixing(?) broken links
Fix CS
Add support for accessing class constants with the dot operator
Fix getting a property on an object casted to an array
Replace strtr() by strtolower()
Improve escape deprecation message
Remove useless assign in compiled code
Add fixture filename as key
Be more precise about double-escaping
Fix template name in error for an unknown dynamic extends called from an include
This PR was merged into the 3.x branch.
Discussion
----------
Update plural.rst: Fixing(?) broken links
More important question: Is the filter's name `plural` or `pluralize`??
Commits
-------
cc3a2b7bac Update plural.rst: Fixing(?) broken links
This PR was merged into the 3.x branch.
Discussion
----------
Add support for inline comments
Closes#4001
Commits
-------
d9d8bb0df3 Add support for inline comments
This PR was merged into the 4.x branch.
Discussion
----------
Add generics for LoopIterator
/cc `@stof`
Commits
-------
a4dc388c62 Add generics for LoopIterator
This PR was merged into the 3.x branch.
Discussion
----------
Fix template name in error for an unknown dynamic extends called from an include
Closes#3265
The code was introduced in #1529, but removing it nowadays does not break any existing test.
Review ignoring whitespace.
Commits
-------
4824f2a4a3 Fix template name in error for an unknown dynamic extends called from an include
This PR was squashed before being merged into the 4.x branch.
Discussion
----------
Simplify compiled `for` loop code
**Do not pass closure as reference**
It's not needed.
**Do not use same var names in loop function**
These variables are passed in when the loop function is invoked when yielding.
Giving them the same internal var names complicates things for no good reason.
Commits
-------
a096c202e3 Do not use same var names in loop function
fcb16a0f86 Do not pass closure as reference
This PR was merged into the 3.x branch.
Discussion
----------
Add support for accessing class constants with the dot operator
This PR allows accessing class constants from objects: `{{ foo.SOME_CONSTANT }}`. This should nicely replace the `constant()` function when an object is at hand, and is actually needed to make the `enum` function work in #4352.
Commits
-------
1ea0452323 Add support for accessing class constants with the dot operator
This PR was merged into the 3.x branch.
Discussion
----------
Fix getting a property on an object casted to an array
Closes#3371
Commits
-------
7d5269e100 Fix getting a property on an object casted to an array
This PR was merged into the 3.x branch.
Discussion
----------
Replace strtr() by strtolower()
The performance of `strtolower()` has been fixed in PHP 8.
Commits
-------
04471ab8cd Replace strtr() by strtolower()
These variables are passed in when the loop function is invoked when yielding.
Giving them the same internal var names complicates things for no good reason.
This PR was merged into the 4.x branch.
Discussion
----------
Remove useless Closure::bind in for loop
This has no effect. The returned value is not used.
https://www.php.net/manual/en/closure.bind.php
Commits
-------
c48aa4649f Remove useless Closure::bind in for loop
This PR was merged into the 4.x branch.
Discussion
----------
Replace `return; yield` with yield from `[]`
See #4259
Commits
-------
317c69d0ff Replace `return; yield` with yield from `[]`
This PR was merged into the 3.x branch.
Discussion
----------
Add fixture filename as key
This way, it's easier to see which test failed and what the file was.
In PHPStorm this is visualized very nice.

Commits
-------
633d70103d Add fixture filename as key
This PR was merged into the 3.x branch.
Discussion
----------
Remove useless assign in compiled code
It's already unset / initialized on catch.
Having it this way, is a bit easier for me when analyzing this in TwigStan.
Commits
-------
5c73c6695c Remove useless assign in compiled code
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Improve escape deprecation message
This was introduced in https://github.com/twigphp/Twig/pull/4176
According to #4343 the message can be improved.
I made a few changes to the test to make it easier to work with. Best to review this PR **commit by commit**.
/cc `@stof`
Commits
-------
7256713c86 Improve escape deprecation message
This PR was merged into the 3.x branch.
Discussion
----------
Be more precise about double-escaping
Closes#3918
Commits
-------
fe3d615aa4 Be more precise about double-escaping
* 3.x:
Add start/end time accessors on Profile
Fix 'ignore missing' when used on an 'embed' tag
Fix the possibility to override an aliased block (via use)
Add test
Add hot cache reload for templates
Add RemovableCacheInterface
Add some tests
Optimize compiled code for "set" tag
Improve how trim behaves
Add more tests
Add return types in FileystemLoader
Add compile-time checks for the "matches" operator
This PR was merged into the 3.x branch.
Discussion
----------
Add start/end time accessors on Profile
Closes#3418
Commits
-------
f83c844b7d Add start/end time accessors on Profile
This PR was merged into the 3.x branch.
Discussion
----------
Fix 'ignore missing' when used on an 'embed' tag
Closes#3085
Commits
-------
09790a7542 Fix 'ignore missing' when used on an 'embed' tag
This PR was merged into the 3.x branch.
Discussion
----------
Fix the possibility to override an aliased block (via use)
Closes#3709
Commits
-------
955611d5bb Fix the possibility to override an aliased block (via use)
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Add template cache hot reload
Closes#3880
This PR achieves 2 things in the minimum amount of code (in 2 commits):
* It adds a new `RemovableCacheInterface` that allows cache to be removed.
* It adds a memory cache to allow updating existing templates in the same process (think FrakenPHP for instance) without polluting the permanent cache.
Commits
-------
00ba8046b0 Add test
dca5099aad Add hot cache reload for templates
786a67b1a9 Add RemovableCacheInterface
This PR was merged into the 3.x branch.
Discussion
----------
Add some tests
Closes#3691
The bug described in #3691 has been fixed via #3999.
This PR adds tests to prove it works now and to avoid future regressions.
Commits
-------
85c2ba5147 Add some tests
This PR was merged into the 3.x branch.
Discussion
----------
Optimize compiled code for "set" tag
Commits
-------
9855e35d44 Optimize compiled code for "set" tag