1111use Tempest \Cache \DiscoveryCacheStrategy ;
1212use Tempest \Container \Container ;
1313use Tempest \Core \DiscoveryCache ;
14+ use Tempest \Core \DiscoveryConfig ;
1415use Tempest \Core \DiscoveryDiscovery ;
1516use Tempest \Core \Kernel ;
1617use Tempest \Discovery \DiscoversPath ;
2122use Tempest \Reflection \ClassReflector ;
2223use Throwable ;
2324
25+ use function Tempest \Support \Arr \contains ;
26+
2427/** @internal */
2528final class LoadDiscoveryClasses
2629{
@@ -29,6 +32,7 @@ final class LoadDiscoveryClasses
2932 public function __construct (
3033 private readonly Kernel $ kernel ,
3134 private readonly Container $ container ,
35+ private readonly DiscoveryConfig $ discoveryConfig ,
3236 private readonly DiscoveryCache $ discoveryCache ,
3337 ) {}
3438
@@ -114,6 +118,10 @@ private function buildDiscovery(string $discoveryClass): Discovery
114118
115119 $ input = $ file ->getPathname ();
116120
121+ if ($ this ->discoveryConfig ->shouldBeSkipped ($ input )) {
122+ continue ;
123+ }
124+
117125 // We assume that any PHP file that starts with an uppercase letter will be a class
118126 if ($ file ->getExtension () === 'php ' && ucfirst ($ fileName ) === $ fileName ) {
119127 $ className = $ location ->toClassName ($ file ->getPathname ());
@@ -165,6 +173,10 @@ private function applyDiscovery(Discovery $discovery): void
165173 */
166174 private function shouldSkipDiscoveryForClass (Discovery $ discovery , ClassReflector $ input ): bool
167175 {
176+ if ($ this ->discoveryConfig ->shouldBeSkipped ($ input ->getName ())) {
177+ return true ;
178+ }
179+
168180 $ attribute = $ input ->getAttribute (SkipDiscovery::class);
169181
170182 if ($ attribute === null ) {
0 commit comments