6
6
7
7
use a9f \Fractor \Application \Contract \FileProcessor ;
8
8
use a9f \Fractor \Application \Contract \FileWriter ;
9
+ use a9f \Fractor \Application \Contract \FractorRule ;
9
10
use a9f \Fractor \Application \ValueObject \File ;
10
11
use a9f \Fractor \Configuration \ValueObject \Configuration ;
11
12
use a9f \Fractor \Console \Contract \Output ;
22
23
final readonly class FractorRunner
23
24
{
24
25
/**
25
- * @param FileProcessor[] $processors
26
+ * @param iterable< FileProcessor<FractorRule>> $processors
26
27
*/
27
28
public function __construct (
28
29
private FractorsChangelogLinesResolver $ fractorsChangelogLinesResolver ,
29
30
private FilesFinder $ fileFinder ,
30
31
private FilesCollector $ fileCollector ,
31
32
private iterable $ processors ,
32
33
private FileWriter $ fileWriter ,
33
- private FileDiffFactory $ fileDiffFactory
34
+ private FileDiffFactory $ fileDiffFactory ,
35
+ private RuleSkipper $ ruleSkipper
34
36
) {
35
37
Assert::allIsInstanceOf ($ this ->processors , FileProcessor::class);
36
38
}
@@ -55,7 +57,9 @@ public function run(Output $output, Configuration $configuration): void
55
57
continue ;
56
58
}
57
59
58
- $ processor ->handle ($ file );
60
+ $ applicableRules = $ this ->filterApplicableRules ($ processor ->getAllRules (), $ file );
61
+
62
+ $ processor ->handle ($ file , $ applicableRules );
59
63
}
60
64
61
65
if (! $ file ->hasChanged ()) {
@@ -93,4 +97,19 @@ public function run(Output $output, Configuration $configuration): void
93
97
$ this ->fileWriter ->write ($ file );
94
98
}
95
99
}
100
+
101
+ /**
102
+ * @param iterable<FractorRule> $rules
103
+ * @return \Generator<FractorRule>
104
+ */
105
+ private function filterApplicableRules (iterable $ rules , File $ file ): \Generator
106
+ {
107
+ foreach ($ rules as $ rule ) {
108
+ if ($ this ->ruleSkipper ->shouldSkip ($ rule ::class, $ file ->getFilePath ())) {
109
+ continue ;
110
+ }
111
+
112
+ yield $ rule ;
113
+ }
114
+ }
96
115
}
0 commit comments