This PR was merged into the 3.x branch.
Discussion
----------
Add support for named arguments on special functions
Commits
-------
0c30e78b Add support for named arguments on special functions
This PR was merged into the 3.x branch.
Discussion
----------
Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments
When using named arguments, a compilation error is thrown when some required arguments are missing.
But when not using arguments, the error was thrown at runtime. This PR fixed this.
Commits
-------
0823d234 Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments
This PR was merged into the 3.x branch.
Discussion
----------
Extract a new CallableArgumentsExtractor class
Commits
-------
e1705f88 Extract a new CallableArgumentsExtractor class
This PR was merged into the 3.x branch.
Discussion
----------
Make Node::__toString() more readable
Commits
-------
b431ecad Make Node::__toString() more readable
This PR was merged into the 3.x branch.
Discussion
----------
Remove remaining const optimizations
After #4198, some Token:: constant optimizations remained.
This PR removes them.. **in case** this was not intended
Commits
-------
c662e0ce Remove remaining const optimizations
* 3.x:
Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time
Cleanup the implementation of the defined test for constants
This PR was merged into the 3.x branch.
Discussion
----------
Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time
Closes#3895
Opened early to gather feedback.
Commits
-------
3156d809 Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time
This PR was merged into the 3.x branch.
Discussion
----------
Cleanup the implementation of the defined test for constants
Let's avoid modifying the `TwigFunction`.
Commits
-------
6ecd1f13 Cleanup the implementation of the defined test for constants
This PR was merged into the 4.x branch.
Discussion
----------
Disable the drupal integration tests in the 4.x branch
Drupal uses the AbstractNodeVisitor which is deprecated in 3.x and removed in 4.x, so the job fails all the time. This should be re-enabled once Drupal can be tested against Twig 4.x.
Commits
-------
1d71e28a Disable the drupal integration tests in the 4.x branch
Drupal uses the AbstractNodeVisitor which is deprecated in 3.x and removed in 4.x, so the job fails all the time.
This should be re-enabled once Drupal can be tested against Twig 4.x.
This PR was merged into the 3.x branch.
Discussion
----------
Make various optimizations for dynamic Twig callables
Commits
-------
148d3e07 Make various optimization for dynamic Twig callables
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Optimize stripcslashes
See https://github.com/twigphp/Twig/pull/4176#issuecomment-2283168241 by `@smnandre`
```
# Old
Benchmark 1: php bench.php
Time (mean ± σ): 1.192 s ± 0.004 s [User: 1.163 s, System: 0.009 s]
Range (min … max): 1.186 s … 1.198 s 10 runs
# New
Benchmark 1: php bench.php
Time (mean ± σ): 356.5 ms ± 1.1 ms [User: 342.0 ms, System: 7.6 ms]
Range (min … max): 354.6 ms … 358.2 ms 10 runs
```
Using bench.php:
```php
<?php
require_once __DIR__.'/vendor/autoload.php';
$string = str_repeat("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a tincidunt turpis. \\App\\Entity\\Product \World \065 App\#{var} \'quoted\' Donec pharetra enim quis erat pharetra, dignissim molestie erat laoreet. Vivamus auctor purus sed lorem vestibulum rhoncus.", 10);
$loader = new Twig\Loader\ArrayLoader([
'index.twig' => <<<EOF
{{ "$string" }}
EOF
,
]);
$twig = new Twig\Environment($loader);
for ($i = 0; $i < 10000; $i++) {
$twig->tokenize(new Twig\Source($twig->getLoader()->getSourceContext('index.twig')->getCode(), 'index.twig'));
}
```
Commits
-------
bc6e36de Optimize stripcslashes
This PR was merged into the 3.x branch.
Discussion
----------
(minor) Prefer `className` over `classname`
For consistency with how it's written in the tested classes.
Commits
-------
03012f19 (minor) Prefer `className` over `classname`
This PR was merged into the 3.x branch.
Discussion
----------
Remove escape
Interestingly this didn’t fail on the branch that introduced the change. Are we sure the integration tests work at all?
See [failing job](https://github.com/twigphp/Twig/actions/runs/10341129793) on merge to main.
Commits
-------
8ef12588 Remove escape