10
10
use PHPStan \Dependency \DependencyResolver ;
11
11
use PHPStan \DependencyInjection \Container ;
12
12
use PHPStan \DependencyInjection \ContainerFactory ;
13
- use PHPStan \ExtensionInstaller \GeneratedConfig ;
14
13
use PHPStan \File \FileHelper ;
15
14
use PHPStan \Parser \Parser ;
16
15
use PHPStan \PhpDoc \TypeNodeResolver ;
17
16
use PHPStan \Reflection \ReflectionProvider ;
18
17
use Rector \Core \Configuration \Option ;
19
18
use Rector \Core \Configuration \Parameter \ParameterProvider ;
20
- use Rector \Core \Exception \ShouldNotHappenException ;
21
19
use Rector \NodeTypeResolver \Reflection \BetterReflection \SourceLocatorProvider \DynamicSourceLocatorProvider ;
22
- use ReflectionClass ;
23
20
24
21
/**
25
22
* Factory so Symfony app can use services from PHPStan container
@@ -28,8 +25,10 @@ final class PHPStanServicesFactory
28
25
{
29
26
private readonly Container $ container ;
30
27
31
- public function __construct (ParameterProvider $ parameterProvider )
32
- {
28
+ public function __construct (
29
+ ParameterProvider $ parameterProvider ,
30
+ PHPStanExtensionsConfigResolver $ phpStanExtensionsConfigResolver ,
31
+ ) {
33
32
$ containerFactory = new ContainerFactory (getcwd ());
34
33
35
34
$ additionalConfigFiles = [];
@@ -42,7 +41,7 @@ public function __construct(ParameterProvider $parameterProvider)
42
41
$ additionalConfigFiles [] = __DIR__ . '/../../../config/phpstan/better-infer.neon ' ;
43
42
$ additionalConfigFiles [] = __DIR__ . '/../../../config/phpstan/parser.neon ' ;
44
43
45
- $ extensionConfigFiles = $ this -> resolveExtensionConfigs ();
44
+ $ extensionConfigFiles = $ phpStanExtensionsConfigResolver -> resolve ();
46
45
$ additionalConfigFiles = array_merge ($ additionalConfigFiles , $ extensionConfigFiles );
47
46
48
47
$ existingAdditionalConfigFiles = array_filter ($ additionalConfigFiles , 'file_exists ' );
@@ -121,39 +120,4 @@ public function createDynamicSourceLocatorProvider(): DynamicSourceLocatorProvid
121
120
{
122
121
return $ this ->container ->getByType (DynamicSourceLocatorProvider::class);
123
122
}
124
-
125
- /**
126
- * @return string[]
127
- */
128
- private function resolveExtensionConfigs (): array
129
- {
130
- // same logic as in PHPStan for extension installed - https://github.com/phpstan/phpstan-src/blob/5956ec4f6cd09c8d7db9466ed4e7f25706f37a43/src/Command/CommandHelper.php#L195-L222
131
- if (! class_exists (GeneratedConfig::class)) {
132
- return [];
133
- }
134
-
135
- $ reflectionClass = new ReflectionClass (GeneratedConfig::class);
136
- $ generatedConfigClassFileName = $ reflectionClass ->getFileName ();
137
- if ($ generatedConfigClassFileName === false ) {
138
- throw new ShouldNotHappenException ();
139
- }
140
-
141
- $ generatedConfigDirectory = dirname ($ generatedConfigClassFileName );
142
-
143
- $ extensionConfigFiles = [];
144
-
145
- foreach (GeneratedConfig::EXTENSIONS as $ extension ) {
146
- $ fileNames = $ extension ['extra ' ]['includes ' ] ?? [];
147
- foreach ($ fileNames as $ fileName ) {
148
- $ configFilePath = $ generatedConfigDirectory . '/ ' . $ extension ['relative_install_path ' ] . '/ ' . $ fileName ;
149
- if (! file_exists ($ configFilePath )) {
150
- continue ;
151
- }
152
-
153
- $ extensionConfigFiles [] = $ configFilePath ;
154
- }
155
- }
156
-
157
- return $ extensionConfigFiles ;
158
- }
159
123
}
0 commit comments