Skip to content

Commit 4034017

Browse files
committed
Optimization for < PHP 8.0 analysis
1 parent 9131023 commit 4034017

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

src/Parser/RichParser.php

+14-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PhpParser\NodeVisitor\NodeConnectingVisitor;
1010
use PHPStan\File\FileReader;
1111
use PHPStan\NodeVisitor\StatementOrderVisitor;
12+
use PHPStan\Php\PhpVersion;
1213

1314
class RichParser implements Parser
1415
{
@@ -25,13 +26,16 @@ class RichParser implements Parser
2526

2627
private NodeChildrenVisitor $nodeChildrenVisitor;
2728

29+
private PhpVersion $phpVersion;
30+
2831
public function __construct(
2932
\PhpParser\Parser $parser,
3033
Lexer $lexer,
3134
NameResolver $nameResolver,
3235
NodeConnectingVisitor $nodeConnectingVisitor,
3336
StatementOrderVisitor $statementOrderVisitor,
34-
NodeChildrenVisitor $nodeChildrenVisitor
37+
NodeChildrenVisitor $nodeChildrenVisitor,
38+
PhpVersion $phpVersion
3539
)
3640
{
3741
$this->parser = $parser;
@@ -40,6 +44,7 @@ public function __construct(
4044
$this->nodeConnectingVisitor = $nodeConnectingVisitor;
4145
$this->statementOrderVisitor = $statementOrderVisitor;
4246
$this->nodeChildrenVisitor = $nodeChildrenVisitor;
47+
$this->phpVersion = $phpVersion;
4348
}
4449

4550
/**
@@ -75,11 +80,18 @@ public function parseString(string $sourceCode): array
7580
$nodeTraverser->addVisitor($this->nameResolver);
7681
$nodeTraverser->addVisitor($this->nodeConnectingVisitor);
7782
$nodeTraverser->addVisitor($this->statementOrderVisitor);
78-
$nodeTraverser->addVisitor($this->nodeChildrenVisitor);
83+
84+
if ($this->phpVersion->requiresParenthesesForNestedTernaries()) {
85+
$nodeTraverser->addVisitor($this->nodeChildrenVisitor);
86+
}
7987

8088
/** @var array<\PhpParser\Node\Stmt> */
8189
$nodes = $nodeTraverser->traverse($nodes);
8290

91+
if (!$this->phpVersion->requiresParenthesesForNestedTernaries()) {
92+
return $nodes;
93+
}
94+
8395
$tokensTraverser = new NodeTraverser();
8496
$tokensTraverser->addVisitor(new NodeTokensVisitor($tokens));
8597

tests/PHPStan/Analyser/AnalyserTest.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,8 @@ private function createAnalyser(bool $reportUnmatchedIgnoredErrors): \PHPStan\An
527527
new \PhpParser\NodeVisitor\NameResolver(),
528528
new NodeConnectingVisitor(),
529529
new StatementOrderVisitor(),
530-
new NodeChildrenVisitor()
530+
new NodeChildrenVisitor(),
531+
self::getContainer()->getByType(PhpVersion::class)
531532
),
532533
new DependencyResolver($fileHelper, $broker, new ExportedNodeResolver($fileTypeMapper, $printer)),
533534
$reportUnmatchedIgnoredErrors

tests/PHPStan/Rules/Ternary/RequireParenthesesForNestedTernaryRuleTest.php

+6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public function testDoNotReportBeforePhp80(): void
2727

2828
public function testReportOnPhp80(): void
2929
{
30+
if (PHP_VERSION_ID < 80000) {
31+
$this->markTestSkipped('Test requires PHP 8.0');
32+
}
3033
$this->phpVersion = new PhpVersion(80000);
3134
$tip = 'See: https://wiki.php.net/rfc/ternary_associativity';
3235
$this->analyse([__DIR__ . '/data/nested-ternary.php'], [
@@ -50,6 +53,9 @@ public function testReportOnPhp80(): void
5053

5154
public function testBug(): void
5255
{
56+
if (PHP_VERSION_ID < 80000) {
57+
$this->markTestSkipped('Test requires PHP 8.0');
58+
}
5359
$this->phpVersion = new PhpVersion(80000);
5460
$this->analyse([__DIR__ . '/data/require-parentheses-bug.php'], []);
5561
}

0 commit comments

Comments
 (0)