[Server] Allow overriding the default file name pattern for Discovery (#292)
* Add optional namePatterns capability to discovery so that the default scan for `*.php` files can be overridden. * add default to namePatterns docs * add an error check if we manage to pass in an empty list of patterns * add unit tests (and a static entry to classmap for composer.json so it autoloads from a non .php file for the test) * run php-cs-fixer * change how default namePatterns are set and make sure all the annotations are correct * Fix bad whitespace Co-authored-by: Christopher Hertel <mail@christopher-hertel.de> * switch to a const default instead of nullable with a check in the function to convert null to a default * make sure we handle empty arrays * formatting fixes * Apply suggestion from @chr-hertel Co-authored-by: Christopher Hertel <mail@christopher-hertel.de> * Add changelog entry --------- Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
This commit is contained in:
parent
fb2c8c2ee4
commit
86bd845924
1 changed files with 109 additions and 37 deletions
|
|
@ -160,6 +160,11 @@ final class Builder
|
|||
*/
|
||||
private array $discoveryExcludeDirs = [];
|
||||
|
||||
/**
|
||||
* @var string[]|null
|
||||
*/
|
||||
private ?array $discoveryNamePatterns = null;
|
||||
|
||||
private ?ServerCapabilities $serverCapabilities = null;
|
||||
|
||||
/**
|
||||
|
|
@ -348,17 +353,20 @@ final class Builder
|
|||
/**
|
||||
* @param string[] $scanDirs
|
||||
* @param string[] $excludeDirs
|
||||
* @param string[] $namePatterns
|
||||
*/
|
||||
public function setDiscovery(
|
||||
string $basePath,
|
||||
array $scanDirs = ['.', 'src'],
|
||||
array $excludeDirs = [],
|
||||
?CacheInterface $cache = null,
|
||||
array $namePatterns = DiscovererInterface::DEFAULT_NAME_PATERNS,
|
||||
): self {
|
||||
$this->discoveryBasePath = $basePath;
|
||||
$this->discoveryScanDirs = $scanDirs;
|
||||
$this->discoveryExcludeDirs = $excludeDirs;
|
||||
$this->discoveryCache = $cache;
|
||||
$this->discoveryNamePatterns = $namePatterns;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
|
@ -531,7 +539,7 @@ final class Builder
|
|||
if (null !== $this->discoveryBasePath) {
|
||||
if (null !== $this->discoverer || class_exists(Finder::class)) {
|
||||
$discoverer = $this->discoverer ?? $this->createDiscoverer($logger);
|
||||
$loaders[] = new DiscoveryLoader($this->discoveryBasePath, $this->discoveryScanDirs, $this->discoveryExcludeDirs, $discoverer);
|
||||
$loaders[] = new DiscoveryLoader($this->discoveryBasePath, $this->discoveryScanDirs, $this->discoveryExcludeDirs, $discoverer, $this->discoveryNamePatterns);
|
||||
} else {
|
||||
$logger->warning('File-based discovery requires symfony/finder. Skipping automatic discovery. Run: composer require symfony/finder');
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue