src/Tokenizer/Analyzer/ArgumentsAnalyzer.php
public function getArguments(Tokens $tokens, $openParenthesis, $closeParenthesis)
    {
        $arguments = [];
        $firstSensibleToken = $tokens->getNextMeaningfulToken($openParenthesis);
        if ($tokens[$firstSensibleToken]->equals(')')) {
            return $arguments;
        }

        $paramContentIndex = $openParenthesis + 1;
        $argumentsStart = $paramContentIndex;
        for (; $paramContentIndex < $closeParenthesis; ++$paramContentIndex) {
            $token = $tokens[$paramContentIndex];

            // skip nested (), [], {} constructs
            $blockDefinitionProbe = Tokens::detectBlockType($token);

            if (null !== $blockDefinitionProbe && true === $blockDefinitionProbe['isStart']) {
                $paramContentIndex = $tokens->findBlockEnd($blockDefinitionProbe['type'], $paramContentIndex);

                continue;
            }

            // if comma matched, increase arguments counter
            if ($token->equals(',')) {
                if ($tokens->getNextMeaningfulToken($paramContentIndex) === $closeParenthesis) {
                    break; // trailing ',' in function call (PHP 7.3)
                }

                $arguments[$argumentsStart] = $paramContentIndex - 1;
                $argumentsStart = $paramContentIndex + 1;
            }
        }

        $arguments[$argumentsStart] = $paramContentIndex - 1;

        return $arguments;
    }
public function getArguments(Tokens $tokens, $openParenthesis, $closeParenthesis)
    {
        $arguments = [];
        $firstSensibleToken = $tokens->getNextMeaningfulToken($openParenthesis);
        if ($tokens[$firstSensibleToken]->equals(')')) {
            return $arguments;
        }

        $paramContentIndex = $openParenthesis + 1;
        $argumentsStart = $paramContentIndex;
        for (; $paramContentIndex < $closeParenthesis; ++$paramContentIndex) {
            $token = $tokens[$paramContentIndex];

            // skip nested (), [], {} constructs
            $blockDefinitionProbe = Tokens::detectBlockType($token);

            if (null !== $blockDefinitionProbe && true === $blockDefinitionProbe['isStart']) {
                $paramContentIndex = $tokens->findBlockEnd($blockDefinitionProbe['type'], $paramContentIndex);

                continue;
            }

            // if comma matched, increase arguments counter
            if ($token->equals(',')) {
                if ($tokens->getNextMeaningfulToken($paramContentIndex) === $closeParenthesis) {
                    break; // trailing ',' in function call (PHP 7.3)
                }

                $arguments[$argumentsStart] = $paramContentIndex - 1;
                $argumentsStart = $paramContentIndex + 1;
            }
        }

        $arguments[$argumentsStart] = $paramContentIndex - 1;

        return $arguments;
    }
public function getArguments ( Tokens $ tokens , $ openParenthesis , $ closeParenthesis ) { $ arguments = [ ] ; $ firstSensibleToken = $ tokens -> getNextMeaningfulToken ( $ openParenthesis ) ; if ( $ tokens [ $ firstSensibleToken ] -> equals ( ')' ) ) { return $ arguments ; } $ paramContentIndex = $ openParenthesis + 1 ; $ argumentsStart = $ paramContentIndex ; for ( ; $ paramContentIndex < $ closeParenthesis ; ++ $ paramContentIndex ) { $ token = $ tokens [ $ paramContentIndex ] ; // skip nested (), [], {} constructs $ blockDefinitionProbe = Tokens :: detectBlockType ( $ token ) ; if ( null !== $ blockDefinitionProbe && true === $ blockDefinitionProbe [ 'isStart' ] ) { $ paramContentIndex = $ tokens -> findBlockEnd ( $ blockDefinitionProbe [ 'type' ] , $ paramContentIndex ) ; continue ; } // if comma matched, increase arguments counter if ( $ token -> equals ( ',' ) ) { if ( $ tokens -> getNextMeaningfulToken ( $ paramContentIndex ) === $ closeParenthesis ) { break ; // trailing ',' in function call (PHP 7.3) } $ arguments [ $ argumentsStart ] = $ paramContentIndex - 1 ; $ argumentsStart = $ paramContentIndex + 1 ; } } $ arguments [ $ argumentsStart ] = $ paramContentIndex - 1 ; return $ arguments ; }
Returns start and end token indexes of arguments.

Returns an array with each key being the first token of an
argument and the value the last. Including non-function tokens
such as comments and white space tokens, but without the separation
tokens like '(', ',' and ')'.

@param Tokens $tokens
@param int    $openParenthesis
@param int    $closeParenthesis

@return array<int, int>
Returns start and end token indexes of arguments .