From 417b2bc69394913424aa89275be2970d626725e9 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 22 Sep 2025 02:43:55 +0400 Subject: [PATCH] modifs.mineures sans commentaires --- src/app/cli/ArgDef.php | 6 ++++-- src/app/cli/ArgDefs.php | 2 ++ src/app/cli/TODO.md | 20 ++++++++++++++++++++ tests/app/cli/ArgDefTest.php | 6 ++---- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/app/cli/ArgDef.php b/src/app/cli/ArgDef.php index c783290..94a0b48 100644 --- a/src/app/cli/ArgDef.php +++ b/src/app/cli/ArgDef.php @@ -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)); diff --git a/src/app/cli/ArgDefs.php b/src/app/cli/ArgDefs.php index 118689c..9165ba4 100644 --- a/src/app/cli/ArgDefs.php +++ b/src/app/cli/ArgDefs.php @@ -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 diff --git a/src/app/cli/TODO.md b/src/app/cli/TODO.md index cfee8d5..9e2118c 100644 --- a/src/app/cli/TODO.md +++ b/src/app/cli/TODO.md @@ -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 \ No newline at end of file diff --git a/tests/app/cli/ArgDefTest.php b/tests/app/cli/ArgDefTest.php index fb4dea6..cad22c5 100644 --- a/tests/app/cli/ArgDefTest.php +++ b/tests/app/cli/ArgDefTest.php @@ -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"], ],