private function parseShellArgument($token, $rest)
    {
        $c = \count($this->arguments);

        // if input is expecting another argument, add it
        if ($this->definition->hasArgument($c)) {
            $arg = $this->definition->getArgument($c);

            if ($arg instanceof CodeArgument) {
                // When we find a code argument, we're done parsing. Add the
                // remaining input to the current argument and call it a day.
                $this->parsed = [];
                $this->arguments[$arg->getName()] = $rest;
            } else {
                $this->arguments[$arg->getName()] = $arg->isArray() ? [$token] : $token;
            }

            return;
        }

        // (copypasta)
        //
        // @codeCoverageIgnoreStart

        // if last argument isArray(), append token to last argument
        if ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) {
            $arg = $this->definition->getArgument($c - 1);
            $this->arguments[$arg->getName()][] = $token;

            return;
        }

        // unexpected argument
        $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));
        // @codeCoverageIgnoreEnd
    }
private function parseShellArgument($token, $rest)
    {
        $c = \count($this->arguments);

        // if input is expecting another argument, add it
        if ($this->definition->hasArgument($c)) {
            $arg = $this->definition->getArgument($c);

            if ($arg instanceof CodeArgument) {
                // When we find a code argument, we're done parsing. Add the
                // remaining input to the current argument and call it a day.
                $this->parsed = [];
                $this->arguments[$arg->getName()] = $rest;
            } else {
                $this->arguments[$arg->getName()] = $arg->isArray() ? [$token] : $token;
            }

            return;
        }

        // (copypasta)
        //
        // @codeCoverageIgnoreStart

        // if last argument isArray(), append token to last argument
        if ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) {
            $arg = $this->definition->getArgument($c - 1);
            $this->arguments[$arg->getName()][] = $token;

            return;
        }

        // unexpected argument
        $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));
        // @codeCoverageIgnoreEnd
    }
private function parseShellArgument ( $ token , $ rest ) { $ c = \ count ( $ this -> arguments ) ; // if input is expecting another argument, add it if ( $ this -> definition -> hasArgument ( $ c ) ) { $ arg = $ this -> definition -> getArgument ( $ c ) ; if ( $ arg instanceof CodeArgument ) { // When we find a code argument, we're done parsing. Add the // remaining input to the current argument and call it a day. $ this -> parsed = [ ] ; $ this -> arguments [ $ arg -> getName ( ) ] = $ rest ; } else { $ this -> arguments [ $ arg -> getName ( ) ] = $ arg -> isArray ( ) ? [ $ token ] : $ token ; } return ; } // (copypasta) // // @codeCoverageIgnoreStart // if last argument isArray(), append token to last argument if ( $ this -> definition -> hasArgument ( $ c - 1 ) && $ this -> definition -> getArgument ( $ c - 1 ) -> isArray ( ) ) { $ arg = $ this -> definition -> getArgument ( $ c - 1 ) ; $ this -> arguments [ $ arg -> getName ( ) ] [ ] = $ token ; return ; } // unexpected argument $ 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 ) ) ; // @codeCoverageIgnoreEnd }
Parses an argument, with bonus handling for code arguments.

@param string $token The current token
@param string $rest  The remaining unparsed input, including the current token

@throws \RuntimeException When too many arguments are given
Parses an argument with bonus handling for code arguments .