plugin: improve PHPDocs and type compliance

This commit is contained in:
Dylan K. Taylor 2025-01-06 23:04:00 +00:00
parent 84ec8b7abe
commit 1b2d2a3fe1
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
3 changed files with 27 additions and 15 deletions

View File

@ -84,11 +84,20 @@ class PluginDescription{
* @phpstan-var array<string, list<string>>
*/
private array $extensions = [];
/** @var string[] */
/**
* @var string[]
* @phpstan-var list<string>
*/
private array $depend = [];
/** @var string[] */
/**
* @var string[]
* @phpstan-var list<string>
*/
private array $softDepend = [];
/** @var string[] */
/**
* @var string[]
* @phpstan-var list<string>
*/
private array $loadBefore = [];
private string $version;
/**
@ -173,7 +182,7 @@ class PluginDescription{
}
if(isset($plugin[self::KEY_DEPEND])){
$this->depend = (array) $plugin[self::KEY_DEPEND];
$this->depend = array_values((array) $plugin[self::KEY_DEPEND]);
}
if(isset($plugin[self::KEY_EXTENSIONS])){
$extensions = (array) $plugin[self::KEY_EXTENSIONS];
@ -183,13 +192,13 @@ class PluginDescription{
$k = $v;
$v = "*";
}
$this->extensions[(string) $k] = array_map('strval', is_array($v) ? $v : [$v]);
$this->extensions[(string) $k] = array_values(array_map('strval', is_array($v) ? $v : [$v]));
}
}
$this->softDepend = (array) ($plugin[self::KEY_SOFTDEPEND] ?? $this->softDepend);
$this->softDepend = array_values((array) ($plugin[self::KEY_SOFTDEPEND] ?? $this->softDepend));
$this->loadBefore = (array) ($plugin[self::KEY_LOADBEFORE] ?? $this->loadBefore);
$this->loadBefore = array_values((array) ($plugin[self::KEY_LOADBEFORE] ?? $this->loadBefore));
$this->website = (string) ($plugin[self::KEY_WEBSITE] ?? $this->website);
@ -210,7 +219,7 @@ class PluginDescription{
$this->authors = [];
if(isset($plugin[self::KEY_AUTHOR])){
if(is_array($plugin[self::KEY_AUTHOR])){
$this->authors = $plugin[self::KEY_AUTHOR];
$this->authors = array_values($plugin[self::KEY_AUTHOR]);
}else{
$this->authors[] = $plugin[self::KEY_AUTHOR];
}
@ -284,6 +293,7 @@ class PluginDescription{
/**
* @return string[]
* @phpstan-return list<string>
*/
public function getDepend() : array{
return $this->depend;
@ -295,6 +305,7 @@ class PluginDescription{
/**
* @return string[]
* @phpstan-return list<string>
*/
public function getLoadBefore() : array{
return $this->loadBefore;
@ -324,6 +335,7 @@ class PluginDescription{
/**
* @return string[]
* @phpstan-return list<string>
*/
public function getSoftDepend() : array{
return $this->softDepend;

View File

@ -31,12 +31,12 @@ final class PluginLoadTriage{
public array $plugins = [];
/**
* @var string[][]
* @phpstan-var array<string, list<string>>
* @phpstan-var array<string, array<string>>
*/
public array $dependencies = [];
/**
* @var string[][]
* @phpstan-var array<string, list<string>>
* @phpstan-var array<string, array<string>>
*/
public array $softDependencies = [];
}

View File

@ -327,12 +327,12 @@ class PluginManager{
* @param string[][] $dependencyLists
* @param Plugin[] $loadedPlugins
*
* @phpstan-param array<string, list<string>> $dependencyLists
* @phpstan-param-out array<string, list<string>> $dependencyLists
* @phpstan-param array<string, array<string>> $dependencyLists
* @phpstan-param-out array<string, array<string>> $dependencyLists
*/
private function checkDepsForTriage(string $pluginName, string $dependencyType, array &$dependencyLists, array $loadedPlugins, PluginLoadTriage $triage) : void{
if(isset($dependencyLists[$pluginName])){
foreach($dependencyLists[$pluginName] as $key => $dependency){
foreach(Utils::promoteKeys($dependencyLists[$pluginName]) as $key => $dependency){
if(isset($loadedPlugins[$dependency]) || $this->getPlugin($dependency) instanceof Plugin){
$this->server->getLogger()->debug("Successfully resolved $dependencyType dependency \"$dependency\" for plugin \"$pluginName\"");
unset($dependencyLists[$pluginName][$key]);
@ -399,7 +399,7 @@ class PluginManager{
//check for skippable soft dependencies first, in case the dependents could resolve hard dependencies
foreach(Utils::stringifyKeys($triage->plugins) as $name => $file){
if(isset($triage->softDependencies[$name]) && !isset($triage->dependencies[$name])){
foreach($triage->softDependencies[$name] as $k => $dependency){
foreach(Utils::promoteKeys($triage->softDependencies[$name]) as $k => $dependency){
if($this->getPlugin($dependency) === null && !array_key_exists($dependency, $triage->plugins)){
$this->server->getLogger()->debug("Skipping resolution of missing soft dependency \"$dependency\" for plugin \"$name\"");
unset($triage->softDependencies[$name][$k]);
@ -416,7 +416,7 @@ class PluginManager{
if(isset($triage->dependencies[$name])){
$unknownDependencies = [];
foreach($triage->dependencies[$name] as $k => $dependency){
foreach($triage->dependencies[$name] as $dependency){
if($this->getPlugin($dependency) === null && !array_key_exists($dependency, $triage->plugins)){
//assume that the plugin is never going to be loaded
//by this point all soft dependencies have been ignored if they were able to be, so