File tree Expand file tree Collapse file tree 3 files changed +53
-14
lines changed Expand file tree Collapse file tree 3 files changed +53
-14
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 22
33namespace Squirrel \TwigPhpSyntax ;
44
5+ use Squirrel \TwigPhpSyntax \ExpressionParser \BinaryOperatorExpressionParser ;
56use Squirrel \TwigPhpSyntax \Operator \NotSameAsBinary ;
67use Squirrel \TwigPhpSyntax \Operator \SameAsBinary ;
78use Squirrel \TwigPhpSyntax \Test \ArrayTest ;
1718use Squirrel \TwigPhpSyntax \TokenParser \BreakTokenParser ;
1819use Squirrel \TwigPhpSyntax \TokenParser \ContinueTokenParser ;
1920use Squirrel \TwigPhpSyntax \TokenParser \ForeachTokenParser ;
20- use Twig \ExpressionParser \Infix \BinaryOperatorExpressionParser ;
2121use Twig \Extension \AbstractExtension ;
2222use Twig \Node \Expression \Binary \AndBinary ;
2323use Twig \Node \Expression \Binary \OrBinary ;
Original file line number Diff line number Diff line change 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 >
You can’t perform that action at this time.
0 commit comments