Skip to content

Commit 83c6868

Browse files
committed
minor #4773 Move to PHPStan level 5 (fabpot)
This PR was merged into the 4.x branch. Discussion ---------- Move to PHPStan level 5 Not a big fan adding more phpdocs, but I don't have a better idea for now (except stop use `getNode()` and add proper getters). Commits ------- b3cbced Move to PHPStan level 5
2 parents 4ff9937 + b3cbced commit 83c6868

File tree

10 files changed

+29
-7
lines changed

10 files changed

+29
-7
lines changed

phpstan.neon.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ includes:
22
- phpstan-baseline.neon
33

44
parameters:
5-
level: 4
5+
level: 5
66
paths:
77
- src
88
excludePaths:

src/Environment.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ public function resolveTemplate(string|TemplateWrapper|array $names): TemplateWr
495495
return $this->load($name);
496496
}
497497

498-
throw new LoaderError(\sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names)));
498+
throw new LoaderError(\sprintf('Unable to find one of the following templates: "%s".', implode('", "', array_map(fn ($name) => $name instanceof TemplateWrapper ? $name->getTemplateName() : $name, $names))));
499499
}
500500

501501
/**

src/ExpressionParser/Infix/ArgumentsTrait.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Twig\ExpressionParser\Infix;
1313

1414
use Twig\Error\SyntaxError;
15+
use Twig\Node\Expression\AbstractExpression;
1516
use Twig\Node\Expression\ArrayExpression;
1617
use Twig\Node\Expression\Binary\SetBinary;
1718
use Twig\Node\Expression\Unary\SpreadUnary;
@@ -27,6 +28,7 @@ private function parseCallableArguments(Parser $parser, int $line, bool $parseOp
2728
{
2829
$arguments = new ArrayExpression([], $line);
2930
foreach ($this->parseNamedArguments($parser, $parseOpenParenthesis) as $k => $n) {
31+
/** @var AbstractExpression $n */
3032
$arguments->addElement($n, new LocalVariable($k, $line));
3133
}
3234

src/ExpressionParser/Infix/FunctionExpressionParser.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Twig\Node\Expression\AbstractExpression;
2121
use Twig\Node\Expression\MacroReferenceExpression;
2222
use Twig\Node\Expression\Variable\ContextVariable;
23+
use Twig\Node\Expression\Variable\TemplateVariable;
2324
use Twig\Parser;
2425
use Twig\Token;
2526

@@ -40,7 +41,10 @@ public function parse(Parser $parser, AbstractExpression $expr, Token $token): A
4041
$name = $expr->getAttribute('name');
4142

4243
if (null !== $alias = $parser->getImportedSymbol('function', $name)) {
43-
return new MacroReferenceExpression($alias['node']->getNode('var'), $alias['name'], $this->parseCallableArguments($parser, $line, false), $line);
44+
/** @var TemplateVariable $var */
45+
$var = $alias['node']->getNode('var');
46+
47+
return new MacroReferenceExpression($var, $alias['name'], $this->parseCallableArguments($parser, $line, false), $line);
4448
}
4549

4650
$args = $this->parseNamedArguments($parser, false);

src/ExpressionParser/Infix/IsExpressionParser.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Twig\Node\Expression\ArrayExpression;
2020
use Twig\Node\Expression\MacroReferenceExpression;
2121
use Twig\Node\Expression\Variable\ContextVariable;
22+
use Twig\Node\Expression\Variable\TemplateVariable;
2223
use Twig\Node\Nodes;
2324
use Twig\Parser;
2425
use Twig\Token;
@@ -43,7 +44,9 @@ public function parse(Parser $parser, AbstractExpression $expr, Token $token): A
4344
}
4445

4546
if ('defined' === $test->getName() && $expr instanceof ContextVariable && null !== $alias = $parser->getImportedSymbol('function', $expr->getAttribute('name'))) {
46-
$expr = new MacroReferenceExpression($alias['node']->getNode('var'), $alias['name'], new ArrayExpression([], $expr->getTemplateLine()), $expr->getTemplateLine());
47+
/** @var TemplateVariable $var */
48+
$var = $alias['node']->getNode('var');
49+
$expr = new MacroReferenceExpression($var, $alias['name'], new ArrayExpression([], $expr->getTemplateLine()), $expr->getTemplateLine());
4750
}
4851

4952
return new ($test->getNodeClass())($expr, $test, $arguments, $stream->getCurrent()->getLine());

src/Extension/CoreExtension.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2041,7 +2041,10 @@ public static function parseAttributeFunction(Parser $parser, Node $fakeNode, $a
20412041
$dep->triggerDeprecation($src->getPath() ?: $src->getName(), $line);
20422042
*/
20432043

2044-
return new GetAttrExpression($args[0], $args[1], $args[2] ?? null, Template::ANY_CALL, $line);
2044+
/** @var ArrayExpression|ContextVariable|null $arguments */
2045+
$arguments = $args[2] ?? null;
2046+
2047+
return new GetAttrExpression($args[0], $args[1], $arguments, Template::ANY_CALL, $line);
20452048
}
20462049

20472050
/**

src/Node/Expression/Filter/DefaultFilter.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function __construct(AbstractExpression $node, TwigFilter $filter, Node $
4242

4343
if ('default' === $name && ($node instanceof ContextVariable || $node instanceof GetAttrExpression)) {
4444
$test = new DefinedTest(clone $node, new TwigTest('defined'), new EmptyNode(), $node->getTemplateLine());
45+
/** @var AbstractExpression $false */
4546
$false = \count($arguments) ? $arguments->getNode(0) : new ConstantExpression('', $node->getTemplateLine());
4647

4748
$node = new ConditionalTernary($test, $default, $false, $node->getTemplateLine());

src/Node/IfNode.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use Twig\Attribute\YieldReady;
1616
use Twig\Compiler;
17+
use Twig\Node\Expression\AbstractExpression;
1718
use Twig\Node\Expression\ReturnPrimitiveTypeInterface;
1819
use Twig\Node\Expression\Test\TrueTest;
1920
use Twig\TwigTest;
@@ -31,6 +32,7 @@ public function __construct(Node $tests, ?Node $else, int $lineno)
3132
for ($i = 0, $count = \count($tests); $i < $count; $i += 2) {
3233
$test = $tests->getNode((string) $i);
3334
if (!$test instanceof ReturnPrimitiveTypeInterface) {
35+
/** @var AbstractExpression $test */
3436
$tests->setNode($i, new TrueTest($test, new TwigTest('true'), null, $test->getTemplateLine()));
3537
}
3638
}

src/NodeVisitor/EscaperNodeVisitor.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,10 @@ public function leaveNode(Node $node, Environment $env): Node
8080
} elseif ($node instanceof FilterExpression) {
8181
return $this->preEscapeFilterNode($node, $env);
8282
} elseif ($node instanceof PrintNode && false !== $type = $this->needEscaping()) {
83+
/** @var AbstractExpression $expression */
8384
$expression = $node->getNode('expr');
8485
if ($expression instanceof OperatorEscapeInterface) {
86+
/** @var AbstractExpression&OperatorEscapeInterface $expression */
8587
$this->escapeConditional($expression, $env, $type);
8688
} else {
8789
$node->setNode('expr', $this->escapeExpression($expression, $env, $type));
@@ -102,8 +104,10 @@ public function leaveNode(Node $node, Environment $env): Node
102104
private function escapeConditional(AbstractExpression&OperatorEscapeInterface $expression, Environment $env, string $type): void
103105
{
104106
foreach ($expression->getOperandNamesToEscape() as $name) {
107+
/** @var AbstractExpression $operand */
105108
$operand = $expression->getNode($name);
106109
if ($operand instanceof OperatorEscapeInterface) {
110+
/** @var AbstractExpression&OperatorEscapeInterface $operand */
107111
$this->escapeConditional($operand, $env, $type);
108112
} else {
109113
$expression->setNode($name, $this->escapeExpression($operand, $env, $type));

src/Util/CallableArgumentsExtractor.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Twig\Util;
1313

1414
use Twig\Error\SyntaxError;
15+
use Twig\Node\Expression\AbstractExpression;
1516
use Twig\Node\Expression\ArrayExpression;
1617
use Twig\Node\Expression\ConstantExpression;
1718
use Twig\Node\Expression\VariadicExpression;
@@ -35,15 +36,16 @@ public function __construct(
3536
}
3637

3738
/**
38-
* @return array<Node>
39+
* @return array<AbstractExpression>
3940
*/
4041
public function extractArguments(Node $arguments): array
4142
{
42-
/** @var array<int|string, Node> $extractedArguments */
43+
/** @var array<int|string, AbstractExpression> $extractedArguments */
4344
$extractedArguments = [];
4445
$extractedArgumentNameMap = [];
4546
$named = false;
4647
foreach ($arguments as $name => $node) {
48+
/** @var AbstractExpression $node */
4749
if (!\is_int($name)) {
4850
$named = true;
4951
} elseif ($named) {
@@ -74,6 +76,7 @@ public function extractArguments(Node $arguments): array
7476
}
7577

7678
[$callableParameters, $isPhpVariadic] = $this->getCallableParameters();
79+
/** @var list<AbstractExpression> $arguments */
7780
$arguments = [];
7881
$callableParameterNames = [];
7982
$missingArguments = [];

0 commit comments

Comments
 (0)