mirror of https://gitlab.com/basile.b/dexed.git
fix #51 - calltips highlights, wrong position indicated when entering an array literal
This commit is contained in:
parent
4da5d1989e
commit
9c00649ede
|
@ -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;
|
||||||
|
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;
|
||||||
|
// skip parens pairs, if not already skipping square bracket pairs
|
||||||
|
if (s = 0) then
|
||||||
|
begin
|
||||||
|
p += byte(t^.Data = '(');
|
||||||
|
p -= byte(t^.Data = ')');
|
||||||
if p > 0 then
|
if p > 0 then
|
||||||
continue;
|
continue;
|
||||||
// detect IndexExp, SliceExp, etc.
|
end;
|
||||||
s += byte(t^.Data = ']');
|
// skip square bracket pairs, if not already skipping paren pairs
|
||||||
s -= byte(t^.Data = '[');
|
if (p = 0) then
|
||||||
// add a param if not in opIndex, opSlice, ParenExp
|
begin
|
||||||
result += Byte((t^.Data = ',') and (s = 0) and (p = 0));
|
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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue