11
11
use PHPStan \Collectors \Registry as CollectorRegistry ;
12
12
use PHPStan \Dependency \DependencyResolver ;
13
13
use PHPStan \Node \FileNode ;
14
+ use PHPStan \Node \InClassNode ;
14
15
use PHPStan \Node \InTraitNode ;
15
16
use PHPStan \Parser \Parser ;
16
17
use PHPStan \Parser \ParserErrorsException ;
@@ -83,6 +84,7 @@ public function analyseFile(
83
84
$ fileCollectedData = [];
84
85
85
86
$ fileDependencies = [];
87
+ $ usedTraitFileDependencies = [];
86
88
$ exportedNodes = [];
87
89
$ linesToIgnore = [];
88
90
$ unmatchedLineIgnores = [];
@@ -92,7 +94,7 @@ public function analyseFile(
92
94
$ parserNodes = $ this ->parser ->parseFile ($ file );
93
95
$ linesToIgnore = $ unmatchedLineIgnores = [$ file => $ this ->getLinesToIgnoreFromTokens ($ parserNodes )];
94
96
$ temporaryFileErrors = [];
95
- $ nodeCallback = function (Node $ node , Scope $ scope ) use (&$ fileErrors , &$ fileCollectedData , &$ fileDependencies , &$ exportedNodes , $ file , $ ruleRegistry , $ collectorRegistry , $ outerNodeCallback , $ analysedFiles , &$ linesToIgnore , &$ unmatchedLineIgnores , &$ temporaryFileErrors ): void {
97
+ $ nodeCallback = function (Node $ node , Scope $ scope ) use (&$ fileErrors , &$ fileCollectedData , &$ fileDependencies , &$ usedTraitFileDependencies , & $ exportedNodes , $ file , $ ruleRegistry , $ collectorRegistry , $ outerNodeCallback , $ analysedFiles , &$ linesToIgnore , &$ unmatchedLineIgnores , &$ temporaryFileErrors ): void {
96
98
if ($ node instanceof Node \Stmt \Trait_) {
97
99
foreach (array_keys ($ linesToIgnore [$ file ] ?? []) as $ lineToIgnore ) {
98
100
if ($ lineToIgnore < $ node ->getStartLine () || $ lineToIgnore > $ node ->getEndLine ()) {
@@ -216,6 +218,15 @@ public function analyseFile(
216
218
} catch (UnableToCompileNode ) {
217
219
// pass
218
220
}
221
+
222
+ if (!$ node instanceof InClassNode) {
223
+ return ;
224
+ }
225
+
226
+ $ usedTraitDependencies = $ this ->dependencyResolver ->resolveUsedTraitDependencies ($ node );
227
+ foreach ($ usedTraitDependencies ->getFileDependencies ($ scope ->getFile (), $ analysedFiles ) as $ dependentFile ) {
228
+ $ usedTraitFileDependencies [] = $ dependentFile ;
229
+ }
219
230
};
220
231
221
232
$ scope = $ this ->scopeFactory ->create (ScopeContext::create ($ file ));
@@ -298,6 +309,7 @@ public function analyseFile(
298
309
$ locallyIgnoredErrors ,
299
310
$ fileCollectedData ,
300
311
array_values (array_unique ($ fileDependencies )),
312
+ array_values (array_unique ($ usedTraitFileDependencies )),
301
313
$ exportedNodes ,
302
314
$ linesToIgnore ,
303
315
$ unmatchedLineIgnores ,
0 commit comments