Fixed problems with constructor and opCall call tips and added opIndex call tips
This commit is contained in:
parent
6033b77ac6
commit
d9ee41c38a
|
@ -116,8 +116,11 @@ AutocompleteResponse complete(const AutocompleteRequest request)
|
||||||
string partial;
|
string partial;
|
||||||
IdType tokenType;
|
IdType tokenType;
|
||||||
|
|
||||||
if (beforeTokens.length >= 2 && beforeTokens[$ - 1] == tok!"(")
|
if (beforeTokens.length >= 2 && (beforeTokens[$ - 1] == tok!"("
|
||||||
|
|| beforeTokens[$ - 1] == tok!"["))
|
||||||
|
{
|
||||||
return parenCompletion(beforeTokens, tokenArray, request.cursorPosition);
|
return parenCompletion(beforeTokens, tokenArray, request.cursorPosition);
|
||||||
|
}
|
||||||
|
|
||||||
AutocompleteResponse response;
|
AutocompleteResponse response;
|
||||||
if (beforeTokens.length >= 1 && beforeTokens[$ - 1] == tok!"identifier")
|
if (beforeTokens.length >= 1 && beforeTokens[$ - 1] == tok!"identifier")
|
||||||
|
@ -175,7 +178,7 @@ AutocompleteResponse complete(const AutocompleteRequest request)
|
||||||
"stdin", allocator, semanticAllocator);
|
"stdin", allocator, semanticAllocator);
|
||||||
scope(exit) typeid(Scope).destroy(completionScope);
|
scope(exit) typeid(Scope).destroy(completionScope);
|
||||||
response.setCompletions(completionScope, getExpression(beforeTokens),
|
response.setCompletions(completionScope, getExpression(beforeTokens),
|
||||||
request.cursorPosition, CompletionType.identifiers, partial);
|
request.cursorPosition, CompletionType.identifiers, false, partial);
|
||||||
break;
|
break;
|
||||||
case tok!"(":
|
case tok!"(":
|
||||||
case tok!"{":
|
case tok!"{":
|
||||||
|
@ -279,7 +282,7 @@ AutocompleteResponse parenCompletion(T)(T beforeTokens,
|
||||||
scope(exit) typeid(Scope).destroy(completionScope);
|
scope(exit) typeid(Scope).destroy(completionScope);
|
||||||
auto expression = getExpression(beforeTokens[0 .. $ - 1]);
|
auto expression = getExpression(beforeTokens[0 .. $ - 1]);
|
||||||
response.setCompletions(completionScope, expression,
|
response.setCompletions(completionScope, expression,
|
||||||
cursorPosition, CompletionType.calltips);
|
cursorPosition, CompletionType.calltips, beforeTokens[$ - 1] == tok!"[");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -456,7 +459,7 @@ ACSymbol*[] getSymbolsByTokenChain(T)(Scope* completionScope,
|
||||||
*/
|
*/
|
||||||
void setCompletions(T)(ref AutocompleteResponse response,
|
void setCompletions(T)(ref AutocompleteResponse response,
|
||||||
Scope* completionScope, T tokens, size_t cursorPosition,
|
Scope* completionScope, T tokens, size_t cursorPosition,
|
||||||
CompletionType completionType, string partial = null)
|
CompletionType completionType, bool isBracket = false, string partial = null)
|
||||||
{
|
{
|
||||||
// Autocomplete module imports instead of symbols
|
// Autocomplete module imports instead of symbols
|
||||||
if (tokens.length > 0 && tokens[0].type == tok!"import")
|
if (tokens.length > 0 && tokens[0].type == tok!"import")
|
||||||
|
@ -516,27 +519,42 @@ void setCompletions(T)(ref AutocompleteResponse response,
|
||||||
if (symbols[0].kind != CompletionKind.functionName
|
if (symbols[0].kind != CompletionKind.functionName
|
||||||
&& symbols[0].callTip is null)
|
&& symbols[0].callTip is null)
|
||||||
{
|
{
|
||||||
auto call = symbols[0].getPartsByName("opCall");
|
if (symbols[0].kind == CompletionKind.variableName)
|
||||||
if (call.length > 0)
|
|
||||||
{
|
{
|
||||||
symbols = call;
|
auto dumb = symbols[0].type;
|
||||||
goto setCallTips;
|
if (isBracket)
|
||||||
|
{
|
||||||
|
auto index = dumb.getPartsByName("opIndex");
|
||||||
|
if (index.length > 0)
|
||||||
|
{
|
||||||
|
symbols = index;
|
||||||
|
goto setCallTips;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
auto call = dumb.getPartsByName("opCall");
|
||||||
|
if (call.length > 0)
|
||||||
|
{
|
||||||
|
symbols = call;
|
||||||
|
goto setCallTips;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
auto constructor = symbols[0].getPartsByName("*constructor*");
|
if (symbols[0].kind == CompletionKind.structName
|
||||||
if (constructor.length == 0)
|
|| symbols[0].kind == CompletionKind.className)
|
||||||
return;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
Log.trace("Not a function, but it has a constructor");
|
auto constructor = symbols[0].getPartsByName("*constructor*");
|
||||||
symbols = constructor;
|
if (constructor.length == 0)
|
||||||
goto setCallTips;
|
return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
symbols = constructor;
|
||||||
|
goto setCallTips;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setCallTips:
|
setCallTips:
|
||||||
response.completionType = CompletionType.calltips;
|
response.completionType = CompletionType.calltips;
|
||||||
foreach (symbol; symbols)
|
foreach (symbol; symbols)
|
||||||
{
|
{
|
||||||
Log.trace("Adding calltip ", symbol.callTip);
|
|
||||||
if (symbol.kind != CompletionKind.aliasName)
|
if (symbol.kind != CompletionKind.aliasName)
|
||||||
response.completions ~= symbol.callTip;
|
response.completions ~= symbol.callTip;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,8 +61,10 @@ local function showCompletionList(r)
|
||||||
end
|
end
|
||||||
table.sort(completions, function(a, b) return string.upper(a) < string.upper(b) end)
|
table.sort(completions, function(a, b) return string.upper(a) < string.upper(b) end)
|
||||||
local charactersEntered = buffer.current_pos - buffer:word_start_position(buffer.current_pos)
|
local charactersEntered = buffer.current_pos - buffer:word_start_position(buffer.current_pos)
|
||||||
if buffer.char_at[buffer.current_pos - 1] == string.byte('.')
|
local prevChar = buffer.char_at[buffer.current_pos - 1]
|
||||||
or buffer.char_at[buffer.current_pos - 1] == string.byte('(') then
|
if prevChar == string.byte('.')
|
||||||
|
or prevChar == string.byte('(')
|
||||||
|
or prevChar == string.byte('[') then
|
||||||
charactersEntered = 0
|
charactersEntered = 0
|
||||||
end
|
end
|
||||||
buffer:auto_c_show(charactersEntered, table.concat(completions, " "))
|
buffer:auto_c_show(charactersEntered, table.concat(completions, " "))
|
||||||
|
|
|
@ -11,7 +11,7 @@ if type(_G.keys) == 'table' then
|
||||||
end
|
end
|
||||||
|
|
||||||
events.connect(events.CHAR_ADDED, function(ch)
|
events.connect(events.CHAR_ADDED, function(ch)
|
||||||
if string.char(ch) == '(' or string.char(ch) == '.' then
|
if string.char(ch) == '(' or string.char(ch) == '.' or string.char(ch) == '[' then
|
||||||
dcd.autocomplete()
|
dcd.autocomplete()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Reference in New Issue