From f372e13a19964e8a70761117a8abf6f7c98bcf2a Mon Sep 17 00:00:00 2001 From: Enzo Innocenzi Date: Fri, 13 Mar 2026 16:19:38 +0100 Subject: [PATCH 1/4] fix(discovery): discard Pest exceptions during discovery --- packages/discovery/src/BootDiscovery.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discovery/src/BootDiscovery.php b/packages/discovery/src/BootDiscovery.php index 70e5c4afa..12acf1e59 100644 --- a/packages/discovery/src/BootDiscovery.php +++ b/packages/discovery/src/BootDiscovery.php @@ -197,7 +197,7 @@ private function discoverPath(string $input, DiscoveryLocation $location, array } elseif (class_exists($className)) { $input = new ClassReflector($className); } - } catch (AssertionError) { + } catch (AssertionError|\Pest\Exceptions\InvalidPestCommand) { // Workaround for Pest test files autoloading. // @mago-expect lint:no-empty-catch-clause } From b3fc4196a56bcdda37ff0966c6fa5a2c27aa14d2 Mon Sep 17 00:00:00 2001 From: Enzo Innocenzi Date: Fri, 13 Mar 2026 17:08:48 +0100 Subject: [PATCH 2/4] style: make phpstan happy --- packages/discovery/src/BootDiscovery.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discovery/src/BootDiscovery.php b/packages/discovery/src/BootDiscovery.php index 12acf1e59..8128291e9 100644 --- a/packages/discovery/src/BootDiscovery.php +++ b/packages/discovery/src/BootDiscovery.php @@ -197,7 +197,7 @@ private function discoverPath(string $input, DiscoveryLocation $location, array } elseif (class_exists($className)) { $input = new ClassReflector($className); } - } catch (AssertionError|\Pest\Exceptions\InvalidPestCommand) { + } catch (AssertionError|\Pest\Exceptions\InvalidPestCommand) { // @phpstan-ignore class.notFound // Workaround for Pest test files autoloading. // @mago-expect lint:no-empty-catch-clause } From c132c9cc2b87ce3c77037f0fe493e744dd68b713 Mon Sep 17 00:00:00 2001 From: Enzo Innocenzi Date: Fri, 13 Mar 2026 17:46:55 +0100 Subject: [PATCH 3/4] feat: add `skipUsing` support --- packages/discovery/src/DiscoveryConfig.php | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/discovery/src/DiscoveryConfig.php b/packages/discovery/src/DiscoveryConfig.php index 7ffd77bc3..94cd2881b 100644 --- a/packages/discovery/src/DiscoveryConfig.php +++ b/packages/discovery/src/DiscoveryConfig.php @@ -2,12 +2,16 @@ namespace Tempest\Discovery; +use Closure; use Tempest\Support\Filesystem; final class DiscoveryConfig { private array $skipDiscovery = []; + /** @var array */ + private array $skipUsing = []; + /** @var array> The loaded discovery classes that will be used during discovery */ public array $classes = []; @@ -25,7 +29,24 @@ public static function autoload(string $path): self public function shouldSkip(string $input): bool { - return $this->skipDiscovery[$input] ?? false; + if (array_key_exists($input, $this->skipDiscovery)) { + return true; + } + + foreach ($this->skipUsing as $closure) { + if ($closure($input) === true) { + return true; + } + } + + return false; + } + + public function skipUsing(Closure $closure): self + { + $this->skipUsing[] = $closure; + + return $this; } public function skipClasses(string ...$classNames): self From fc056626350a846b1f2ec79487ac02ece654e9e4 Mon Sep 17 00:00:00 2001 From: Enzo Innocenzi Date: Fri, 13 Mar 2026 17:51:58 +0100 Subject: [PATCH 4/4] refactor: type the closure --- packages/discovery/src/DiscoveryConfig.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/discovery/src/DiscoveryConfig.php b/packages/discovery/src/DiscoveryConfig.php index 94cd2881b..a8b44622a 100644 --- a/packages/discovery/src/DiscoveryConfig.php +++ b/packages/discovery/src/DiscoveryConfig.php @@ -42,6 +42,7 @@ public function shouldSkip(string $input): bool return false; } + /** @param (Closure(string): bool) $closure */ public function skipUsing(Closure $closure): self { $this->skipUsing[] = $closure;