From 8995611f6c2b2d73972ae051e0643ff42d97fb35 Mon Sep 17 00:00:00 2001 From: Ivan Bozhanov Date: Fri, 20 Jan 2017 17:00:32 +0200 Subject: [PATCH] Improved param counting --- src/SignatureHelpProvider.php | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/SignatureHelpProvider.php b/src/SignatureHelpProvider.php index c044a7c..4fbb8f0 100644 --- a/src/SignatureHelpProvider.php +++ b/src/SignatureHelpProvider.php @@ -165,8 +165,27 @@ class SignatureHelpProvider $params = ltrim($params, "( "); if (strlen(trim($params))) { try { - $params = $this->parser->parse('parserErrorHandler)[0]->expr->items; - $help->activeParameter = count($params) - 1; + $lex = new \PhpParser\Lexer(); + $lex->startLexing('parserErrorHandler); + $value = null; + $lex->getNextToken($value); + $lex->getNextToken($value); + $lex->getNextToken($value); + $params = 0; + $stack = []; + while ($value !== "\0") { + $lex->getNextToken($value); + if ($value === ',' && !count($stack)) { + $help->activeParameter++; + } + if ($value === '(') { + $stack[] = ')'; + } else if ($value === '[') { + $stack[] = ']'; + } else if (count($stack) && $value === $stack[count($stack)-1]) { + array_pop($stack); + } + } } catch (\Exception $ignore) { } } $help->signatures[] = $signature;