9
9
use PhpParser \NodeVisitor \NodeConnectingVisitor ;
10
10
use PHPStan \File \FileReader ;
11
11
use PHPStan \NodeVisitor \StatementOrderVisitor ;
12
+ use PHPStan \Php \PhpVersion ;
12
13
13
14
class RichParser implements Parser
14
15
{
@@ -25,13 +26,16 @@ class RichParser implements Parser
25
26
26
27
private NodeChildrenVisitor $ nodeChildrenVisitor ;
27
28
29
+ private PhpVersion $ phpVersion ;
30
+
28
31
public function __construct (
29
32
\PhpParser \Parser $ parser ,
30
33
Lexer $ lexer ,
31
34
NameResolver $ nameResolver ,
32
35
NodeConnectingVisitor $ nodeConnectingVisitor ,
33
36
StatementOrderVisitor $ statementOrderVisitor ,
34
- NodeChildrenVisitor $ nodeChildrenVisitor
37
+ NodeChildrenVisitor $ nodeChildrenVisitor ,
38
+ PhpVersion $ phpVersion
35
39
)
36
40
{
37
41
$ this ->parser = $ parser ;
@@ -40,6 +44,7 @@ public function __construct(
40
44
$ this ->nodeConnectingVisitor = $ nodeConnectingVisitor ;
41
45
$ this ->statementOrderVisitor = $ statementOrderVisitor ;
42
46
$ this ->nodeChildrenVisitor = $ nodeChildrenVisitor ;
47
+ $ this ->phpVersion = $ phpVersion ;
43
48
}
44
49
45
50
/**
@@ -75,11 +80,18 @@ public function parseString(string $sourceCode): array
75
80
$ nodeTraverser ->addVisitor ($ this ->nameResolver );
76
81
$ nodeTraverser ->addVisitor ($ this ->nodeConnectingVisitor );
77
82
$ nodeTraverser ->addVisitor ($ this ->statementOrderVisitor );
78
- $ nodeTraverser ->addVisitor ($ this ->nodeChildrenVisitor );
83
+
84
+ if ($ this ->phpVersion ->requiresParenthesesForNestedTernaries ()) {
85
+ $ nodeTraverser ->addVisitor ($ this ->nodeChildrenVisitor );
86
+ }
79
87
80
88
/** @var array<\PhpParser\Node\Stmt> */
81
89
$ nodes = $ nodeTraverser ->traverse ($ nodes );
82
90
91
+ if (!$ this ->phpVersion ->requiresParenthesesForNestedTernaries ()) {
92
+ return $ nodes ;
93
+ }
94
+
83
95
$ tokensTraverser = new NodeTraverser ();
84
96
$ tokensTraverser ->addVisitor (new NodeTokensVisitor ($ tokens ));
85
97
0 commit comments