fix #51 - calltips highlights, wrong position indicated when entering an array literal

This commit is contained in:
Basile Burg 2020-07-01 17:29:47 +02:00
parent 4da5d1989e
commit 9c00649ede
1 changed files with 30 additions and 11 deletions

View File

@ -1095,14 +1095,16 @@ function getCurrentParameterIndex(tokens: TLexTokenList; caretPos: TPoint): inte
var var
t: PLexToken; t: PLexToken;
i: integer; i: integer;
j: integer;
p: integer = 0; p: integer = 0;
s: integer = 0; s: integer = 0;
begin begin
result := -1; result := 0;
// got right after the call left paren
i := getIndexOfTokenAt(tokens, caretPos) + 1; i := getIndexOfTokenAt(tokens, caretPos) + 1;
j := i;
while i > 0 do while i > 0 do
begin begin
// skip nested ParenExp
i -= 1; i -= 1;
t := tokens[i]; t := tokens[i];
if t^.kind <> TLexTokenKind.ltkSymbol then if t^.kind <> TLexTokenKind.ltkSymbol then
@ -1110,17 +1112,34 @@ begin
p += byte(t^.Data = ')'); p += byte(t^.Data = ')');
p -= byte(t^.Data = '('); p -= byte(t^.Data = '(');
if p = -1 then if p = -1 then
begin
result += 1;
break; break;
end; end;
if p > 0 then p := 0;
// count params from left to right
while (i <> j) and (i < tokens.Count -1) do
begin
i += 1;
t := tokens[i];
if t^.kind <> TLexTokenKind.ltkSymbol then
continue; continue;
// detect IndexExp, SliceExp, etc. // skip parens pairs, if not already skipping square bracket pairs
s += byte(t^.Data = ']'); if (s = 0) then
s -= byte(t^.Data = '['); begin
// add a param if not in opIndex, opSlice, ParenExp p += byte(t^.Data = '(');
result += Byte((t^.Data = ',') and (s = 0) and (p = 0)); p -= byte(t^.Data = ')');
if p > 0 then
continue;
end;
// skip square bracket pairs, if not already skipping paren pairs
if (p = 0) then
begin
s += byte(t^.Data = '[');
s -= byte(t^.Data = ']');
if s > 0 then
continue;
end;
if (s = 0) and (p = 0) and (t^.Data = ',') then
result += 1;
end; end;
end; end;