Skip to content

Commit 6cdd734

Browse files
committed
Replace internal class used from Twig
1 parent 8987e78 commit 6cdd734

File tree

3 files changed

+53
-14
lines changed

3 files changed

+53
-14
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Squirrel\TwigPhpSyntax\ExpressionParser;
4+
5+
use Twig\ExpressionParser\AbstractExpressionParser;
6+
use Twig\ExpressionParser\InfixAssociativity;
7+
use Twig\ExpressionParser\InfixExpressionParserInterface;
8+
use Twig\Node\Expression\AbstractExpression;
9+
use Twig\Node\Expression\Binary\AbstractBinary;
10+
use Twig\Parser;
11+
use Twig\Token;
12+
13+
class BinaryOperatorExpressionParser extends AbstractExpressionParser implements InfixExpressionParserInterface
14+
{
15+
public function __construct(
16+
/** @var class-string<AbstractBinary> $nodeClass */
17+
private string $nodeClass,
18+
private string $name,
19+
private int $precedence,
20+
private InfixAssociativity $associativity = InfixAssociativity::Left,
21+
) {
22+
}
23+
24+
/**
25+
* @return AbstractBinary
26+
*/
27+
public function parse(Parser $parser, AbstractExpression $left, Token $token): AbstractExpression
28+
{
29+
$right = $parser->parseExpression($this->getAssociativity() === InfixAssociativity::Left ? $this->getPrecedence() + 1 : $this->getPrecedence());
30+
31+
return new ($this->nodeClass)($left, $right, $token->getLine());
32+
}
33+
34+
public function getAssociativity(): InfixAssociativity
35+
{
36+
return $this->associativity;
37+
}
38+
39+
public function getName(): string
40+
{
41+
return $this->name;
42+
}
43+
44+
public function getPrecedence(): int
45+
{
46+
return $this->precedence;
47+
}
48+
}

src/PhpSyntaxExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Squirrel\TwigPhpSyntax;
44

5+
use Squirrel\TwigPhpSyntax\ExpressionParser\BinaryOperatorExpressionParser;
56
use Squirrel\TwigPhpSyntax\Operator\NotSameAsBinary;
67
use Squirrel\TwigPhpSyntax\Operator\SameAsBinary;
78
use Squirrel\TwigPhpSyntax\Test\ArrayTest;
@@ -17,7 +18,6 @@
1718
use Squirrel\TwigPhpSyntax\TokenParser\BreakTokenParser;
1819
use Squirrel\TwigPhpSyntax\TokenParser\ContinueTokenParser;
1920
use Squirrel\TwigPhpSyntax\TokenParser\ForeachTokenParser;
20-
use Twig\ExpressionParser\Infix\BinaryOperatorExpressionParser;
2121
use Twig\Extension\AbstractExtension;
2222
use Twig\Node\Expression\Binary\AndBinary;
2323
use Twig\Node\Expression\Binary\OrBinary;

tools/psalm-baseline.xml

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<files psalm-version="5.26.1@d747f6500b38ac4f7dfc5edbcae6e4b637d7add0">
3-
<file src="src/PhpSyntaxExtension.php">
4-
<InternalClass>
5-
<code><![CDATA[new BinaryOperatorExpressionParser(AndBinary::class, '&&', 15)]]></code>
6-
<code><![CDATA[new BinaryOperatorExpressionParser(NotSameAsBinary::class, '!==', 20)]]></code>
7-
<code><![CDATA[new BinaryOperatorExpressionParser(OrBinary::class, '||', 10)]]></code>
8-
<code><![CDATA[new BinaryOperatorExpressionParser(SameAsBinary::class, '===', 20)]]></code>
9-
</InternalClass>
10-
<InternalMethod>
11-
<code><![CDATA[new BinaryOperatorExpressionParser(AndBinary::class, '&&', 15)]]></code>
12-
<code><![CDATA[new BinaryOperatorExpressionParser(NotSameAsBinary::class, '!==', 20)]]></code>
13-
<code><![CDATA[new BinaryOperatorExpressionParser(OrBinary::class, '||', 10)]]></code>
14-
<code><![CDATA[new BinaryOperatorExpressionParser(SameAsBinary::class, '===', 20)]]></code>
15-
</InternalMethod>
3+
<file src="src/ExpressionParser/BinaryOperatorExpressionParser.php">
4+
<UnsafeInstantiation>
5+
<code><![CDATA[new ($this->nodeClass)($left, $right, $token->getLine())]]></code>
6+
</UnsafeInstantiation>
167
</file>
178
</files>

0 commit comments

Comments
 (0)