Skip to content

Commit b3d6c45

Browse files
committed
use simple parser for defaultAnalysisParser, with native parser php 7.0
1 parent d52e7d8 commit b3d6c45

File tree

5 files changed

+58
-23
lines changed

5 files changed

+58
-23
lines changed

config/phpstan/parser.neon

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
# see original config.neon in phpstan.neon - https://github.com/phpstan/phpstan-src/blob/386eb913abb6ac05886c5642fd48b5d99db66a20/conf/config.neon#L1582
22
# this file overrides definitions from the config above
33
services:
4-
defaultAnalysisParser:
5-
factory: @pathRoutingParser
6-
arguments!: []
7-
8-
cachedRectorParser:
9-
class: PHPStan\Parser\CachedParser
10-
arguments:
11-
originalParser: @rectorParser
12-
cachedNodesByStringCountMax: %cache.nodesByStringCountMax%
13-
autowired: false
14-
154
pathRoutingParser:
165
class: PHPStan\Parser\PathRoutingParser
176
arguments:
@@ -20,8 +9,40 @@ services:
209
php8Parser: @php8Parser
2110
autowired: false
2211

23-
rectorParser:
24-
class: PHPStan\Parser\RichParser
25-
arguments:
26-
parser: @currentPhpVersionPhpParser
12+
- Rector\PhpDocParser\PhpParser\SmartPhpParserFactory
13+
14+
nativeParser:
15+
class: PhpParser\Parser
16+
factory: ['@Rector\PhpDocParser\PhpParser\SmartPhpParserFactory', 'createNativePhpParser']
17+
autowired: no
18+
19+
phpstanParser:
20+
class: PhpParser\Parser
21+
factory: ['@Rector\PhpDocParser\PhpParser\SmartPhpParserFactory', 'createPHPStanParser']
2722
autowired: no
23+
24+
-
25+
class: PHPStan\Analyser\NodeScopeResolver
26+
arguments:
27+
parser: @nativeParser
28+
reflector: @nodeScopeResolverReflector
29+
polluteScopeWithLoopInitialAssignments: %polluteScopeWithLoopInitialAssignments%
30+
polluteScopeWithAlwaysIterableForeach: %polluteScopeWithAlwaysIterableForeach%
31+
polluteScopeWithBlock: %polluteScopeWithBlock%
32+
earlyTerminatingMethodCalls: %earlyTerminatingMethodCalls%
33+
earlyTerminatingFunctionCalls: %earlyTerminatingFunctionCalls%
34+
implicitThrows: %exceptions.implicitThrows%
35+
treatPhpDocTypesAsCertain: %treatPhpDocTypesAsCertain%
36+
universalObjectCratesClasses: %universalObjectCratesClasses%
37+
autowired: false
38+
39+
defaultAnalysisParser:
40+
factory: ['@Rector\PhpDocParser\PhpParser\SmartPhpParserFactory', 'createPHPStanParser']
41+
arguments!: []
42+
43+
cachedRectorParser:
44+
class: PHPStan\Parser\CachedParser
45+
arguments:
46+
originalParser: @phpstanParser
47+
cachedNodesByStringCountMax: %cache.nodesByStringCountMax%
48+
autowired: false

rules/Php74/Rector/ArrayDimFetch/CurlyToSquareBracketArrayStringRector.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,8 @@ private function isFollowedByCurlyBracket(File $file, ArrayDimFetch $arrayDimFet
7777
$oldTokens = $file->getOldTokens();
7878
$endTokenPost = $arrayDimFetch->getEndTokenPos();
7979

80-
if (isset($oldTokens[$endTokenPost]) && $oldTokens[$endTokenPost] === '}') {
81-
$startTokenPost = $arrayDimFetch->getStartTokenPos();
82-
return ! (isset($oldTokens[$startTokenPost][1]) && $oldTokens[$startTokenPost][1] === '${');
80+
if (isset($oldTokens[$endTokenPost]) && (string) $oldTokens[$endTokenPost] === '}') {
81+
return true;
8382
}
8483

8584
return false;

src/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Rector\Configuration\Option;
1717
use Rector\Configuration\Parameter\SimpleParameterProvider;
1818
use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider;
19+
use Rector\PhpDocParser\PhpParser\SmartPhpParserFactory;
1920
use Symfony\Component\Console\Input\ArrayInput;
2021
use Symfony\Component\Console\Output\ConsoleOutput;
2122
use Symfony\Component\Console\Style\SymfonyStyle;
@@ -88,7 +89,8 @@ public function createEmulativeLexer(): Lexer
8889
*/
8990
public function createPHPStanParser(): Parser
9091
{
91-
return $this->container->getService('currentPhpVersionRichParser');
92+
$smartPhpParserFactory = new SmartPhpParserFactory();
93+
return $smartPhpParserFactory->createSimpleParser();
9294
}
9395

9496
/**

src/PhpDocParser/PhpParser/SmartPhpParserFactory.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PhpParser\NodeVisitor\NameResolver;
88
use PhpParser\Parser;
99
use PhpParser\ParserFactory;
10+
use PhpParser\PhpVersion;
1011
use PHPStan\Parser\CachedParser;
1112
use PHPStan\Parser\SimpleParser;
1213
use PHPStan\Parser\VariadicFunctionsVisitor;
@@ -31,14 +32,15 @@ public function create(): SmartPhpParser
3132
return new SmartPhpParser($cachedParser);
3233
}
3334

34-
private function createNativePhpParser(): Parser
35+
public function createNativePhpParser(): Parser
3536
{
3637
$parserFactory = new ParserFactory();
37-
return $parserFactory->createForNewestSupportedVersion();
38+
return $parserFactory->createForVersion(PhpVersion::fromString('7.0'));
3839
}
3940

40-
private function createPHPStanParser(Parser $parser): CachedParser
41+
public function createPHPStanParser(): CachedParser
4142
{
43+
$parser = $this->createNativePhpParser();
4244
$nameResolver = new NameResolver();
4345
$variadicMethodsVisitor = new VariadicMethodsVisitor();
4446
$variadicFunctionsVisitor = new VariadicFunctionsVisitor();
@@ -47,4 +49,14 @@ private function createPHPStanParser(Parser $parser): CachedParser
4749

4850
return new CachedParser($simpleParser, 1024);
4951
}
52+
53+
public function createSimpleParser(): SimpleParser
54+
{
55+
$parser = $this->createNativePhpParser();
56+
$nameResolver = new NameResolver();
57+
$variadicMethodsVisitor = new VariadicMethodsVisitor();
58+
$variadicFunctionsVisitor = new VariadicFunctionsVisitor();
59+
60+
return new SimpleParser($parser, $nameResolver, $variadicMethodsVisitor, $variadicFunctionsVisitor);
61+
}
5062
}

src/PhpParser/Parser/SimplePhpParser.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use PhpParser\NodeTraverser;
1111
use PhpParser\Parser;
1212
use PhpParser\ParserFactory;
13+
use PhpParser\PhpVersion;
1314
use Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor\AssignedToNodeVisitor;
1415
use Throwable;
1516

@@ -22,7 +23,7 @@
2223
public function __construct()
2324
{
2425
$parserFactory = new ParserFactory();
25-
$this->phpParser = $parserFactory->createForNewestSupportedVersion();
26+
$this->phpParser = $parserFactory->createForVersion(PhpVersion::fromString('7.0'));
2627

2728
$this->nodeTraverser = new NodeTraverser();
2829
$this->nodeTraverser->addVisitor(new AssignedToNodeVisitor());

0 commit comments

Comments
 (0)