summaryrefslogtreecommitdiff
path: root/vendor/symfony/console/Input/InputArgument.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/symfony/console/Input/InputArgument.php
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/symfony/console/Input/InputArgument.php')
-rw-r--r--vendor/symfony/console/Input/InputArgument.php160
1 files changed, 160 insertions, 0 deletions
diff --git a/vendor/symfony/console/Input/InputArgument.php b/vendor/symfony/console/Input/InputArgument.php
new file mode 100644
index 0000000..a5d9492
--- /dev/null
+++ b/vendor/symfony/console/Input/InputArgument.php
@@ -0,0 +1,160 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Console\Input;
13
14use Symfony\Component\Console\Command\Command;
15use Symfony\Component\Console\Completion\CompletionInput;
16use Symfony\Component\Console\Completion\CompletionSuggestions;
17use Symfony\Component\Console\Completion\Suggestion;
18use Symfony\Component\Console\Exception\InvalidArgumentException;
19use Symfony\Component\Console\Exception\LogicException;
20
21/**
22 * Represents a command line argument.
23 *
24 * @author Fabien Potencier <fabien@symfony.com>
25 */
26class InputArgument
27{
28 /**
29 * Providing an argument is required (e.g. just 'app:foo' is not allowed).
30 */
31 public const REQUIRED = 1;
32
33 /**
34 * Providing an argument is optional (e.g. 'app:foo' and 'app:foo bar' are both allowed). This is the default behavior of arguments.
35 */
36 public const OPTIONAL = 2;
37
38 /**
39 * The argument accepts multiple values and turn them into an array (e.g. 'app:foo bar baz' will result in value ['bar', 'baz']).
40 */
41 public const IS_ARRAY = 4;
42
43 private int $mode;
44 private string|int|bool|array|float|null $default;
45
46 /**
47 * @param string $name The argument name
48 * @param int-mask-of<InputArgument::*>|null $mode The argument mode: a bit mask of self::REQUIRED, self::OPTIONAL and self::IS_ARRAY
49 * @param string $description A description text
50 * @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only)
51 * @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
52 *
53 * @throws InvalidArgumentException When argument mode is not valid
54 */
55 public function __construct(
56 private string $name,
57 ?int $mode = null,
58 private string $description = '',
59 string|bool|int|float|array|null $default = null,
60 private \Closure|array $suggestedValues = [],
61 ) {
62 if (null === $mode) {
63 $mode = self::OPTIONAL;
64 } elseif ($mode >= (self::IS_ARRAY << 1) || $mode < 1) {
65 throw new InvalidArgumentException(sprintf('Argument mode "%s" is not valid.', $mode));
66 }
67
68 $this->mode = $mode;
69
70 $this->setDefault($default);
71 }
72
73 /**
74 * Returns the argument name.
75 */
76 public function getName(): string
77 {
78 return $this->name;
79 }
80
81 /**
82 * Returns true if the argument is required.
83 *
84 * @return bool true if parameter mode is self::REQUIRED, false otherwise
85 */
86 public function isRequired(): bool
87 {
88 return self::REQUIRED === (self::REQUIRED & $this->mode);
89 }
90
91 /**
92 * Returns true if the argument can take multiple values.
93 *
94 * @return bool true if mode is self::IS_ARRAY, false otherwise
95 */
96 public function isArray(): bool
97 {
98 return self::IS_ARRAY === (self::IS_ARRAY & $this->mode);
99 }
100
101 /**
102 * Sets the default value.
103 */
104 public function setDefault(string|bool|int|float|array|null $default): void
105 {
106 if ($this->isRequired() && null !== $default) {
107 throw new LogicException('Cannot set a default value except for InputArgument::OPTIONAL mode.');
108 }
109
110 if ($this->isArray()) {
111 if (null === $default) {
112 $default = [];
113 } elseif (!\is_array($default)) {
114 throw new LogicException('A default value for an array argument must be an array.');
115 }
116 }
117
118 $this->default = $default;
119 }
120
121 /**
122 * Returns the default value.
123 */
124 public function getDefault(): string|bool|int|float|array|null
125 {
126 return $this->default;
127 }
128
129 /**
130 * Returns true if the argument has values for input completion.
131 */
132 public function hasCompletion(): bool
133 {
134 return [] !== $this->suggestedValues;
135 }
136
137 /**
138 * Supplies suggestions when command resolves possible completion options for input.
139 *
140 * @see Command::complete()
141 */
142 public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
143 {
144 $values = $this->suggestedValues;
145 if ($values instanceof \Closure && !\is_array($values = $values($input))) {
146 throw new LogicException(sprintf('Closure for argument "%s" must return an array. Got "%s".', $this->name, get_debug_type($values)));
147 }
148 if ($values) {
149 $suggestions->suggestValues($values);
150 }
151 }
152
153 /**
154 * Returns the description text.
155 */
156 public function getDescription(): string
157 {
158 return $this->description;
159 }
160}