Skip to content

Commit 50d025d

Browse files
Merge branch '6.4' into 7.1
* 6.4: initialize RedisAdapter cursor to 0 do not skip tests from data providers ensure compatibility with Twig 3.15 [Mime] fix encoding issue with UTF-8 addresses containing doubles spaces fix translation file syntax [Notifier] Improve Telegrams markdown escaping [Validator] [Choice] Fix callback option if not array returned [DependencyInjection] Fix linting factories implemented via __callStatic [DependencyInjection] Fix replacing abstract arguments with bindings Minor fixes around parse_url() checks Ensure compatibility with mongodb v2 Add missing translations for Turkish (tr)
2 parents 155ac0d + 948f55e commit 50d025d

36 files changed

+219
-104
lines changed

src/Symfony/Bridge/Twig/Command/DebugCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ private function getRelativePath(string $path): string
550550

551551
private function isAbsolutePath(string $file): bool
552552
{
553-
return strspn($file, '/\\', 0, 1) || (\strlen($file) > 3 && ctype_alpha($file[0]) && ':' === $file[1] && strspn($file, '/\\', 2, 1)) || null !== parse_url($file, \PHP_URL_SCHEME);
553+
return strspn($file, '/\\', 0, 1) || (\strlen($file) > 3 && ctype_alpha($file[0]) && ':' === $file[1] && strspn($file, '/\\', 2, 1)) || parse_url($file, \PHP_URL_SCHEME);
554554
}
555555

556556
/**

src/Symfony/Bridge/Twig/Node/DumpNode.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Twig\Attribute\FirstClassTwigCallableReady;
1515
use Twig\Attribute\YieldReady;
1616
use Twig\Compiler;
17+
use Twig\Node\Expression\Variable\LocalVariable;
1718
use Twig\Node\Node;
1819

1920
/**
@@ -23,7 +24,7 @@
2324
final class DumpNode extends Node
2425
{
2526
public function __construct(
26-
private string $varPrefix,
27+
private LocalVariable|string $varPrefix,
2728
?Node $values,
2829
int $lineno,
2930
?string $tag = null,
@@ -44,25 +45,31 @@ public function __construct(
4445

4546
public function compile(Compiler $compiler): void
4647
{
48+
if ($this->varPrefix instanceof LocalVariable) {
49+
$varPrefix = $this->varPrefix->getAttribute('name');
50+
} else {
51+
$varPrefix = $this->varPrefix;
52+
}
53+
4754
$compiler
4855
->write("if (\$this->env->isDebug()) {\n")
4956
->indent();
5057

5158
if (!$this->hasNode('values')) {
5259
// remove embedded templates (macros) from the context
5360
$compiler
54-
->write(sprintf('$%svars = [];'."\n", $this->varPrefix))
55-
->write(sprintf('foreach ($context as $%1$skey => $%1$sval) {'."\n", $this->varPrefix))
61+
->write(sprintf('$%svars = [];'."\n", $varPrefix))
62+
->write(sprintf('foreach ($context as $%1$skey => $%1$sval) {'."\n", $varPrefix))
5663
->indent()
57-
->write(sprintf('if (!$%sval instanceof \Twig\Template) {'."\n", $this->varPrefix))
64+
->write(sprintf('if (!$%sval instanceof \Twig\Template) {'."\n", $varPrefix))
5865
->indent()
59-
->write(sprintf('$%1$svars[$%1$skey] = $%1$sval;'."\n", $this->varPrefix))
66+
->write(sprintf('$%1$svars[$%1$skey] = $%1$sval;'."\n", $varPrefix))
6067
->outdent()
6168
->write("}\n")
6269
->outdent()
6370
->write("}\n")
6471
->addDebugInfo($this)
65-
->write(sprintf('\Symfony\Component\VarDumper\VarDumper::dump($%svars);'."\n", $this->varPrefix));
72+
->write(sprintf('\Symfony\Component\VarDumper\VarDumper::dump($%svars);'."\n", $varPrefix));
6673
} elseif (($values = $this->getNode('values')) && 1 === $values->count()) {
6774
$compiler
6875
->addDebugInfo($this)

src/Symfony/Bridge/Twig/Node/StopwatchNode.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Twig\Attribute\YieldReady;
1616
use Twig\Compiler;
1717
use Twig\Node\Expression\AssignNameExpression;
18+
use Twig\Node\Expression\Variable\LocalVariable;
1819
use Twig\Node\Node;
1920

2021
/**
@@ -25,8 +26,15 @@
2526
#[YieldReady]
2627
final class StopwatchNode extends Node
2728
{
28-
public function __construct(Node $name, Node $body, AssignNameExpression $var, int $lineno = 0, ?string $tag = null)
29+
/**
30+
* @param AssignNameExpression|LocalVariable $var
31+
*/
32+
public function __construct(Node $name, Node $body, $var, int $lineno = 0, ?string $tag = null)
2933
{
34+
if (!$var instanceof AssignNameExpression && !$var instanceof LocalVariable) {
35+
throw new \TypeError(sprintf('Expected an instance of "%s" or "%s", but got "%s".', AssignNameExpression::class, LocalVariable::class, get_debug_type($var)));
36+
}
37+
3038
if (class_exists(FirstClassTwigCallableReady::class)) {
3139
parent::__construct(['body' => $body, 'name' => $name, 'var' => $var], [], $lineno);
3240
} else {

src/Symfony/Bridge/Twig/Node/TransNode.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Twig\Node\Expression\ArrayExpression;
1919
use Twig\Node\Expression\ConstantExpression;
2020
use Twig\Node\Expression\NameExpression;
21+
use Twig\Node\Expression\Variable\ContextVariable;
2122
use Twig\Node\Node;
2223
use Twig\Node\TextNode;
2324

@@ -124,7 +125,7 @@ private function compileString(Node $body, ArrayExpression $vars, bool $ignoreSt
124125
if ('count' === $var && $this->hasNode('count')) {
125126
$vars->addElement($this->getNode('count'), $key);
126127
} else {
127-
$varExpr = new NameExpression($var, $body->getTemplateLine());
128+
$varExpr = class_exists(ContextVariable::class) ? new ContextVariable($var, $body->getTemplateLine()) : new NameExpression($var, $body->getTemplateLine());
128129
$varExpr->setAttribute('ignore_strict_check', $ignoreStrictCheck);
129130
$vars->addElement($varExpr, $key);
130131
}

src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use Twig\Node\Expression\ConstantExpression;
2121
use Twig\Node\Expression\FilterExpression;
2222
use Twig\Node\Expression\NameExpression;
23+
use Twig\Node\Expression\Variable\AssignContextVariable;
24+
use Twig\Node\Expression\Variable\ContextVariable;
2325
use Twig\Node\ModuleNode;
2426
use Twig\Node\Node;
2527
use Twig\Node\Nodes;
@@ -51,8 +53,8 @@ public function enterNode(Node $node, Environment $env): Node
5153
return $node;
5254
} else {
5355
$var = $this->getVarName();
54-
$name = new AssignNameExpression($var, $node->getTemplateLine());
55-
$this->scope->set('domain', new NameExpression($var, $node->getTemplateLine()));
56+
$name = class_exists(AssignContextVariable::class) ? new AssignContextVariable($var, $node->getTemplateLine()) : new AssignNameExpression($var, $node->getTemplateLine());
57+
$this->scope->set('domain', class_exists(ContextVariable::class) ? new ContextVariable($var, $node->getTemplateLine()) : new NameExpression($var, $node->getTemplateLine()));
5658

5759
if (class_exists(Nodes::class)) {
5860
return new SetNode(false, new Nodes([$name]), new Nodes([$node->getNode('expr')]), $node->getTemplateLine());

src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Twig\Environment;
1818
use Twig\Loader\LoaderInterface;
1919
use Twig\Node\Expression\NameExpression;
20+
use Twig\Node\Expression\Variable\ContextVariable;
2021
use Twig\Node\Node;
2122
use Twig\Node\Nodes;
2223

@@ -74,7 +75,7 @@ public function testOneVar()
7475
{
7576
if (class_exists(Nodes::class)) {
7677
$vars = new Nodes([
77-
new NameExpression('foo', 7),
78+
new ContextVariable('foo', 7),
7879
]);
7980
} else {
8081
$vars = new Node([
@@ -104,8 +105,8 @@ public function testMultiVars()
104105
{
105106
if (class_exists(Nodes::class)) {
106107
$vars = new Nodes([
107-
new NameExpression('foo', 7),
108-
new NameExpression('bar', 7),
108+
new ContextVariable('foo', 7),
109+
new ContextVariable('bar', 7),
109110
]);
110111
} else {
111112
$vars = new Node([

src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Twig\Node\Expression\ArrayExpression;
2323
use Twig\Node\Expression\ConstantExpression;
2424
use Twig\Node\Expression\NameExpression;
25+
use Twig\Node\Expression\Variable\ContextVariable;
2526
use Twig\Node\Node;
2627
use Twig\Node\Nodes;
2728

@@ -31,7 +32,7 @@ class FormThemeTest extends TestCase
3132

3233
public function testConstructor()
3334
{
34-
$form = new NameExpression('form', 0);
35+
$form = class_exists(ContextVariable::class) ? new ContextVariable('form', 0) : new NameExpression('form', 0);
3536
if (class_exists(Nodes::class)) {
3637
$resources = new Nodes([
3738
new ConstantExpression('tpl1', 0),
@@ -53,7 +54,7 @@ public function testConstructor()
5354

5455
public function testCompile()
5556
{
56-
$form = new NameExpression('form', 0);
57+
$form = class_exists(ContextVariable::class) ? new ContextVariable('form', 0) : new NameExpression('form', 0);
5758
$resources = new ArrayExpression([
5859
new ConstantExpression(1, 0),
5960
new ConstantExpression('tpl1', 0),

src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Twig\Node\Expression\ConditionalExpression;
2323
use Twig\Node\Expression\ConstantExpression;
2424
use Twig\Node\Expression\NameExpression;
25+
use Twig\Node\Expression\Variable\ContextVariable;
2526
use Twig\Node\Node;
2627
use Twig\Node\Nodes;
2728
use Twig\TwigFunction;
@@ -32,7 +33,7 @@ public function testCompileWidget()
3233
{
3334
if (class_exists(Nodes::class)) {
3435
$arguments = new Nodes([
35-
new NameExpression('form', 0),
36+
new ContextVariable('form', 0),
3637
]);
3738
} else {
3839
$arguments = new Node([
@@ -61,7 +62,7 @@ public function testCompileWidgetWithVariables()
6162
{
6263
if (class_exists(Nodes::class)) {
6364
$arguments = new Nodes([
64-
new NameExpression('form', 0),
65+
new ContextVariable('form', 0),
6566
new ArrayExpression([
6667
new ConstantExpression('foo', 0),
6768
new ConstantExpression('bar', 0),
@@ -98,7 +99,7 @@ public function testCompileLabelWithLabel()
9899
{
99100
if (class_exists(Nodes::class)) {
100101
$arguments = new Nodes([
101-
new NameExpression('form', 0),
102+
new ContextVariable('form', 0),
102103
new ConstantExpression('my label', 0),
103104
]);
104105
} else {
@@ -129,7 +130,7 @@ public function testCompileLabelWithNullLabel()
129130
{
130131
if (class_exists(Nodes::class)) {
131132
$arguments = new Nodes([
132-
new NameExpression('form', 0),
133+
new ContextVariable('form', 0),
133134
new ConstantExpression(null, 0),
134135
]);
135136
} else {
@@ -162,7 +163,7 @@ public function testCompileLabelWithEmptyStringLabel()
162163
{
163164
if (class_exists(Nodes::class)) {
164165
$arguments = new Nodes([
165-
new NameExpression('form', 0),
166+
new ContextVariable('form', 0),
166167
new ConstantExpression('', 0),
167168
]);
168169
} else {
@@ -195,7 +196,7 @@ public function testCompileLabelWithDefaultLabel()
195196
{
196197
if (class_exists(Nodes::class)) {
197198
$arguments = new Nodes([
198-
new NameExpression('form', 0),
199+
new ContextVariable('form', 0),
199200
]);
200201
} else {
201202
$arguments = new Node([
@@ -224,7 +225,7 @@ public function testCompileLabelWithAttributes()
224225
{
225226
if (class_exists(Nodes::class)) {
226227
$arguments = new Nodes([
227-
new NameExpression('form', 0),
228+
new ContextVariable('form', 0),
228229
new ConstantExpression(null, 0),
229230
new ArrayExpression([
230231
new ConstantExpression('foo', 0),
@@ -266,7 +267,7 @@ public function testCompileLabelWithLabelAndAttributes()
266267
{
267268
if (class_exists(Nodes::class)) {
268269
$arguments = new Nodes([
269-
new NameExpression('form', 0),
270+
new ContextVariable('form', 0),
270271
new ConstantExpression('value in argument', 0),
271272
new ArrayExpression([
272273
new ConstantExpression('foo', 0),
@@ -309,7 +310,7 @@ public function testCompileLabelWithLabelThatEvaluatesToNull()
309310
{
310311
if (class_exists(Nodes::class)) {
311312
$arguments = new Nodes([
312-
new NameExpression('form', 0),
313+
new ContextVariable('form', 0),
313314
new ConditionalExpression(
314315
// if
315316
new ConstantExpression(true, 0),
@@ -360,7 +361,7 @@ public function testCompileLabelWithLabelThatEvaluatesToNullAndAttributes()
360361
{
361362
if (class_exists(Nodes::class)) {
362363
$arguments = new Nodes([
363-
new NameExpression('form', 0),
364+
new ContextVariable('form', 0),
364365
new ConditionalExpression(
365366
// if
366367
new ConstantExpression(true, 0),

src/Symfony/Bridge/Twig/Tests/Node/TransNodeTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Twig\Environment;
1818
use Twig\Loader\LoaderInterface;
1919
use Twig\Node\Expression\NameExpression;
20+
use Twig\Node\Expression\Variable\ContextVariable;
2021
use Twig\Node\TextNode;
2122

2223
/**
@@ -27,7 +28,7 @@ class TransNodeTest extends TestCase
2728
public function testCompileStrict()
2829
{
2930
$body = new TextNode('trans %var%', 0);
30-
$vars = new NameExpression('foo', 0);
31+
$vars = class_exists(ContextVariable::class) ? new ContextVariable('foo', 0) : new NameExpression('foo', 0);
3132
$node = new TransNode($body, null, null, $vars);
3233

3334
$env = new Environment($this->createMock(LoaderInterface::class), ['strict_variables' => true]);

src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Twig\Node\Expression\ConstantExpression;
2121
use Twig\Node\Expression\FilterExpression;
2222
use Twig\Node\Expression\NameExpression;
23+
use Twig\Node\Expression\Variable\ContextVariable;
2324
use Twig\Node\Node;
2425
use Twig\Node\Nodes;
2526
use Twig\TwigFilter;
@@ -44,7 +45,7 @@ public function testMessageExtractionWithInvalidDomainNode()
4445
if (class_exists(Nodes::class)) {
4546
$n = new Nodes([
4647
new ArrayExpression([], 0),
47-
new NameExpression('variable', 0),
48+
new ContextVariable('variable', 0),
4849
]);
4950
} else {
5051
$n = new Node([

0 commit comments

Comments
 (0)