summaryrefslogtreecommitdiff
path: root/vendor/symfony/console/Input/ArgvInput.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/symfony/console/Input/ArgvInput.php')
-rw-r--r--vendor/symfony/console/Input/ArgvInput.php94
1 files changed, 48 insertions, 46 deletions
diff --git a/vendor/symfony/console/Input/ArgvInput.php b/vendor/symfony/console/Input/ArgvInput.php
index 02d4cdb3..b576cf42 100644
--- a/vendor/symfony/console/Input/ArgvInput.php
+++ b/vendor/symfony/console/Input/ArgvInput.php
@@ -44,10 +44,8 @@ class ArgvInput extends Input
private $parsed;
/**
- * Constructor.
- *
- * @param array $argv An array of parameters from the CLI (in the argv format)
- * @param InputDefinition $definition A InputDefinition instance
+ * @param array|null $argv An array of parameters from the CLI (in the argv format)
+ * @param InputDefinition|null $definition A InputDefinition instance
*/
public function __construct(array $argv = null, InputDefinition $definition = null)
{
@@ -69,7 +67,7 @@ class ArgvInput extends Input
}
/**
- * Processes command line arguments.
+ * {@inheritdoc}
*/
protected function parse()
{
@@ -93,7 +91,7 @@ class ArgvInput extends Input
/**
* Parses a short option.
*
- * @param string $token The current token.
+ * @param string $token The current token
*/
private function parseShortOption($token)
{
@@ -147,7 +145,15 @@ class ArgvInput extends Input
$name = substr($token, 2);
if (false !== $pos = strpos($name, '=')) {
- $this->addLongOption(substr($name, 0, $pos), substr($name, $pos + 1));
+ if (0 === strlen($value = substr($name, $pos + 1))) {
+ // if no value after "=" then substr() returns "" since php7 only, false before
+ // see http://php.net/manual/fr/migration70.incompatible.php#119151
+ if (\PHP_VERSION_ID < 70000 && false === $value) {
+ $value = '';
+ }
+ array_unshift($this->parsed, $value);
+ }
+ $this->addLongOption(substr($name, 0, $pos), $value);
} else {
$this->addLongOption($name, null);
}
@@ -176,7 +182,12 @@ class ArgvInput extends Input
// unexpected argument
} else {
- throw new RuntimeException('Too many arguments.');
+ $all = $this->definition->getArguments();
+ if (count($all)) {
+ throw new RuntimeException(sprintf('Too many arguments, expected arguments "%s".', implode('" "', array_keys($all))));
+ }
+
+ throw new RuntimeException(sprintf('No arguments expected, got "%s".', $token));
}
}
@@ -213,23 +224,16 @@ class ArgvInput extends Input
$option = $this->definition->getOption($name);
- // Convert empty values to null
- if (!isset($value[0])) {
- $value = null;
- }
-
if (null !== $value && !$option->acceptValue()) {
throw new RuntimeException(sprintf('The "--%s" option does not accept a value.', $name));
}
- if (null === $value && $option->acceptValue() && count($this->parsed)) {
+ if (in_array($value, array('', null), true) && $option->acceptValue() && count($this->parsed)) {
// if option accepts an optional or mandatory argument
// let's see if there is one provided
$next = array_shift($this->parsed);
- if (isset($next[0]) && '-' !== $next[0]) {
+ if ((isset($next[0]) && '-' !== $next[0]) || in_array($next, array('', null), true)) {
$value = $next;
- } elseif (empty($next)) {
- $value = '';
} else {
array_unshift($this->parsed, $next);
}
@@ -240,8 +244,8 @@ class ArgvInput extends Input
throw new RuntimeException(sprintf('The "--%s" option requires a value.', $name));
}
- if (!$option->isArray()) {
- $value = $option->isValueOptional() ? $option->getDefault() : true;
+ if (!$option->isArray() && !$option->isValueOptional()) {
+ $value = true;
}
}
@@ -253,9 +257,7 @@ class ArgvInput extends Input
}
/**
- * Returns the first argument from the raw parameters (not parsed).
- *
- * @return string The value of the first argument or null otherwise
+ * {@inheritdoc}
*/
public function getFirstArgument()
{
@@ -269,24 +271,30 @@ class ArgvInput extends Input
}
/**
- * Returns true if the raw parameters (not parsed) contain a value.
- *
- * This method is to be used to introspect the input parameters
- * before they have been validated. It must be used carefully.
- *
- * @param string|array $values The value(s) to look for in the raw parameters (can be an array)
- *
- * @return bool true if the value is contained in the raw parameters
+ * {@inheritdoc}
*/
- public function hasParameterOption($values)
+ public function hasParameterOption($values, $onlyParams = false)
{
$values = (array) $values;
foreach ($this->tokens as $token) {
+ if ($onlyParams && '--' === $token) {
+ return false;
+ }
foreach ($values as $value) {
if ($token === $value || 0 === strpos($token, $value.'=')) {
return true;
}
+
+ if (0 === strpos($token, '-') && 0 !== strpos($token, '--')) {
+ $noValue = explode('=', $token);
+ $token = $noValue[0];
+ $searchableToken = str_replace('-', '', $token);
+ $searchableValue = str_replace('-', '', $value);
+ if ('' !== $searchableToken && '' !== $searchableValue && false !== strpos($searchableToken, $searchableValue)) {
+ return true;
+ }
+ }
}
}
@@ -294,23 +302,18 @@ class ArgvInput extends Input
}
/**
- * Returns the value of a raw option (not parsed).
- *
- * This method is to be used to introspect the input parameters
- * before they have been validated. It must be used carefully.
- *
- * @param string|array $values The value(s) to look for in the raw parameters (can be an array)
- * @param mixed $default The default value to return if no result is found
- *
- * @return mixed The option value
+ * {@inheritdoc}
*/
- public function getParameterOption($values, $default = false)
+ public function getParameterOption($values, $default = false, $onlyParams = false)
{
$values = (array) $values;
$tokens = $this->tokens;
while (0 < count($tokens)) {
$token = array_shift($tokens);
+ if ($onlyParams && '--' === $token) {
+ return false;
+ }
foreach ($values as $value) {
if ($token === $value || 0 === strpos($token, $value.'=')) {
@@ -333,14 +336,13 @@ class ArgvInput extends Input
*/
public function __toString()
{
- $self = $this;
- $tokens = array_map(function ($token) use ($self) {
+ $tokens = array_map(function ($token) {
if (preg_match('{^(-[^=]+=)(.+)}', $token, $match)) {
- return $match[1].$self->escapeToken($match[2]);
+ return $match[1].$this->escapeToken($match[2]);
}
- if ($token && $token[0] !== '-') {
- return $self->escapeToken($token);
+ if ($token && '-' !== $token[0]) {
+ return $this->escapeToken($token);
}
return $token;