Correction erreur format retour "getMaxOccur"

+ Changement traitement valeur par défaut des arguments
master 2.0.1
Julien Rosset 4 years ago
parent 0f44062269
commit 046b9ca533

@ -20,7 +20,7 @@ abstract class ValueAbstract extends ArgumentAbstract implements IArgumentValue
*/ */
protected int $occurMin = 1; protected int $occurMin = 1;
/** /**
* @var int|null Le nombre maximum d'occurence. * @var int|null Le nombre maximum d'occurence. Null si illimité
*/ */
protected ?int $occurMax = 1; protected ?int $occurMax = 1;
@ -94,13 +94,13 @@ abstract class ValueAbstract extends ArgumentAbstract implements IArgumentValue
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function getOccurMax (): int { public function getOccurMax (): ?int {
return $this->occurMax; return $this->occurMax;
} }
/** /**
* Définit le nombre mawimum d'occurence. * Définit le nombre maximum d'occurence.
* *
* @param int|null $occurMax Le nombre maximum * @param int|null $occurMax Le nombre maximum. Null si illimité
* *
* @return $this * @return $this
* @see $occurMax * @see $occurMax

@ -1051,8 +1051,16 @@ class CommandLine {
public function parseExplicit (array $argv): stdClass { public function parseExplicit (array $argv): stdClass {
$stop = false; $stop = false;
$nb_args = count($argv); $nb_args = count($argv);
$out = new stdClass();
$out = $this->_parseOptions($argv, $this->getOptions(), $stop); // Valeurs par défaut
foreach ($this->getOptions() as $option) {
if (!isset($out->{$option->getVarName()})) {
$out->{$option->getVarName()} = $option->getDefault();
}
}
$this->_parseOptions($argv, $out, $this->getOptions(), $stop);
if ($stop) { if ($stop) {
return $out; return $out;
} }
@ -1062,6 +1070,14 @@ class CommandLine {
} }
$values = array_values($this->getValues()); $values = array_values($this->getValues());
// Valeurs par défaut
foreach ($values as $value) {
if (!isset($out->{$value->getVarName()})) {
$out->{$value->getVarName()} = $value->getDefault();
}
}
/** /**
* @var int $ordre * @var int $ordre
* @var IArgumentValue $value * @var IArgumentValue $value
@ -1088,18 +1104,6 @@ class CommandLine {
throw new TooMuchValues('Trop de paramètres : ' . count($argv) . ' / ' . $nb_args); throw new TooMuchValues('Trop de paramètres : ' . count($argv) . ' / ' . $nb_args);
} }
// Valeurs par défaut
foreach ($this->getOptions() as $option) {
if (!isset($out->{$option->getVarName()})) {
$out->{$option->getVarName()} = $option->getDefault();
}
}
foreach ($values as $value) {
if (!isset($out->{$value->getVarName()})) {
$out->{$value->getVarName()} = $value->getDefault();
}
}
return $out; return $out;
} }
/** /**
@ -1164,16 +1168,14 @@ class CommandLine {
* Parse des arguments "option" * Parse des arguments "option"
* *
* @param string[] $argv La liste des arguments du script * @param string[] $argv La liste des arguments du script
* @param stdClass $out Les valeurs de sortie
* @param IArgumentOption[] $options La liste des options * @param IArgumentOption[] $options La liste des options
* @param boolean $stop Arrêt du parsage ? * @param boolean $stop Arrêt du parsage ?
* *
* @return stdClass Les options extraites
* @throws IncorrectParse Si le parsage d'une des options échoue * @throws IncorrectParse Si le parsage d'une des options échoue
*/ */
protected static function _parseOptions (array &$argv, array $options, bool &$stop): stdClass { protected static function _parseOptions (array &$argv, stdClass &$out, array $options, bool &$stop): void {
$values = new stdClass();
$stop = false; $stop = false;
foreach ($options as $option) { foreach ($options as $option) {
do { do {
$argv_option = $argv; $argv_option = $argv;
@ -1184,14 +1186,13 @@ class CommandLine {
if (!is_null($result)) { if (!is_null($result)) {
if ($option->isStoppingParse()) { if ($option->isStoppingParse()) {
$values = new stdClass(); $out = new stdClass();
} }
self::_setValue($values, $option, $result, $option->allowMultiple() ? 2 : 1); self::_setValue($out, $option, $result, $option->allowMultiple() ? 2 : 1);
if ($option->isStoppingParse()) { if ($option->isStoppingParse()) {
$stop = true; $stop = true;
return $values;
} }
array_splice($argv, count($argv) - count($argv_option), $result->getConsume()); array_splice($argv, count($argv) - count($argv_option), $result->getConsume());
@ -1203,8 +1204,6 @@ class CommandLine {
} }
} while (count($argv_option) > 1 && (!$find || $option->allowMultiple())); } while (count($argv_option) > 1 && (!$find || $option->allowMultiple()));
} }
return $values;
} }
/** /**
* Parse un argument "value" X fois * Parse un argument "value" X fois
@ -1218,7 +1217,7 @@ class CommandLine {
* @throws MissingArgument Si l'argument n'est pas en quantité suffisante * @throws MissingArgument Si l'argument n'est pas en quantité suffisante
* @throws IncorrectParse Si l'argument échoue à se parser * @throws IncorrectParse Si l'argument échoue à se parser
*/ */
protected static function _parseXTimes (array &$argv, stdClass $out, IArgumentValue $value, int $xTimes, int $offset = 0) { protected static function _parseXTimes (array &$argv, stdClass &$out, IArgumentValue $value, int $xTimes, int $offset = 0) {
if ($xTimes > count($argv)) { if ($xTimes > count($argv)) {
throw new MissingArgument('L\'argument ' . $value->getName() . ' est en quantité insuffisante (' . count($argv) . ' / ' . $xTimes . ')'); throw new MissingArgument('L\'argument ' . $value->getName() . ' est en quantité insuffisante (' . count($argv) . ' / ' . $xTimes . ')');
} }
@ -1241,7 +1240,7 @@ class CommandLine {
* @param ParseResult $result Le résultat du parsage de l'argument * @param ParseResult $result Le résultat du parsage de l'argument
* @param int|null $max Le nombre maximum de valeur autorisé * @param int|null $max Le nombre maximum de valeur autorisé
*/ */
protected static function _setValue (stdClass $out, IArgument $argument, ParseResult $result, ?int $max) { protected static function _setValue (stdClass &$out, IArgument $argument, ParseResult $result, ?int $max) {
if (is_null($max) || $max > 1) { if (is_null($max) || $max > 1) {
if (!isset($out->{$argument->getVarName()})) { if (!isset($out->{$argument->getVarName()})) {
$out->{$argument->getVarName()} = array(); $out->{$argument->getVarName()} = array();

Loading…
Cancel
Save