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;
if ($parents === null) return;
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;
$argDef = new self($argDef);
$this->options = $argDef->options;
$this->removeOptions(varray::withn($parent["remove"] ?? null));
$this->addOptions(varray::withn($parent["add"] ?? null));

View File

@ -63,6 +63,8 @@ abstract class ArgDefs {
public ?bool $autohelp = null;
public ?bool $autoremains = null;
abstract function getArgDef(string $option): ?ArgDef;
/**
* 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

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
## 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

View File

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