modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-09-22 02:43:55 +04:00
parent 94c268d81a
commit 417b2bc693
4 changed files with 28 additions and 6 deletions

View File

@ -183,9 +183,11 @@ class ArgDef {
$parents = $this->parents; $parents = $this->parents;
if ($parents === null) return; if ($parents === null) return;
foreach ($parents as $parent) { foreach ($parents as $parent) {
$argDef = $parent["arg"] ?? null; $argDef = $parent[0] ?? null;
if (is_array($argDef)) $argDef = new self($argDef);
elseif (is_string($argDef)) $argDef = $argDefs->getArgDef($argDef);
else throw new ArgException("parent must be string or array");
if ($argDef === null) continue; if ($argDef === null) continue;
$argDef = new self($argDef);
$this->options = $argDef->options; $this->options = $argDef->options;
$this->removeOptions(varray::withn($parent["remove"] ?? null)); $this->removeOptions(varray::withn($parent["remove"] ?? null));
$this->addOptions(varray::withn($parent["add"] ?? null)); $this->addOptions(varray::withn($parent["add"] ?? null));

View File

@ -63,6 +63,8 @@ abstract class ArgDefs {
public ?bool $autohelp = null; public ?bool $autohelp = null;
public ?bool $autoremains = null; public ?bool $autoremains = null;
abstract function getArgDef(string $option): ?ArgDef;
/** /**
* consommer les arguments de $src en avançant l'index $srci et provisionner * consommer les arguments de $src en avançant l'index $srci et provisionner
* $dest à partir de $desti. si $desti est plus grand que 0, celà veut dire * $dest à partir de $desti. si $desti est plus grand que 0, celà veut dire

View File

@ -34,4 +34,24 @@ faire une implémentation SimpleArgsParser qui ne supporte pas les commandes, un
puis faire une implémentation ArgsParser qui supporte les commandes, et les options dynamiques puis faire une implémentation ArgsParser qui supporte les commandes, et les options dynamiques
## WIP
"parent" est remplacé par "defaults", "merges", "merge"
"add" et "remove" sont au niveau de la définition
ainsi, ["extends" => [PARENT, "add" => A, "remove" => R]]
devient ["merge" => PARENT, "add" => A, "remove" => R]
supporter aussi "merge" => $string
NB: dans ce cas, "add" est peut-être inutile?
documenter que dans les cas simples, on peut tout simplement refaire la définition, e.g
~~~php
[
["-x", "help" => "first"],
["-x", "help" => "second"],
]
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -123,8 +123,7 @@ class ArgDefTest extends TestCase {
$BASE = ["-o:", "--longo"]; $BASE = ["-o:", "--longo"];
$argDef = new ArgDef([ $argDef = new ArgDef([
"parent" => [ "parent" => [$BASE,
"arg" => $BASE,
"add" => ["-a", "--longa"], "add" => ["-a", "--longa"],
"remove" => ["-o", "--longo"], "remove" => ["-o", "--longo"],
], ],
@ -135,8 +134,7 @@ class ArgDefTest extends TestCase {
false, 0, 0, ""); false, 0, 0, "");
$argDef = new ArgDef([ $argDef = new ArgDef([
"parent" => [ "parent" => [$BASE,
"arg" => $BASE,
"add" => ["-a", "--longa"], "add" => ["-a", "--longa"],
"remove" => ["-o", "--longo"], "remove" => ["-o", "--longo"],
], ],