Implement #193
This commit is contained in:
parent
d81ed84101
commit
7da5d006c0
|
@ -101,12 +101,19 @@ public AutocompleteResponse complete(const AutocompleteRequest request)
|
|||
auto cache = StringCache(StringCache.defaultBucketCount);
|
||||
auto beforeTokens = getTokensBeforeCursor(request.sourceCode,
|
||||
request.cursorPosition, &cache, tokenArray);
|
||||
if (beforeTokens.length >= 2 && (beforeTokens[$ - 1] == tok!"("
|
||||
|| beforeTokens[$ - 1] == tok!"["))
|
||||
if (beforeTokens.length >= 2)
|
||||
{
|
||||
if (beforeTokens[$ - 1] == tok!"(" || beforeTokens[$ - 1] == tok!"[")
|
||||
{
|
||||
return parenCompletion(beforeTokens, tokenArray, request.cursorPosition);
|
||||
}
|
||||
else if (beforeTokens.length >= 2)
|
||||
else if (beforeTokens[$ - 1] == tok!",")
|
||||
{
|
||||
immutable size_t end = goBackToOpenParen(beforeTokens);
|
||||
if (end != size_t.max)
|
||||
return parenCompletion(beforeTokens[0 .. end], tokenArray, request.cursorPosition);
|
||||
}
|
||||
else
|
||||
{
|
||||
ImportKind kind = determineImportKind(beforeTokens);
|
||||
if (kind == ImportKind.neither)
|
||||
|
@ -114,10 +121,8 @@ public AutocompleteResponse complete(const AutocompleteRequest request)
|
|||
else
|
||||
return importCompletion(beforeTokens, kind);
|
||||
}
|
||||
else
|
||||
{
|
||||
return dotCompletion(beforeTokens, tokenArray, request.cursorPosition);
|
||||
}
|
||||
return dotCompletion(beforeTokens, tokenArray, request.cursorPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -922,12 +927,7 @@ body
|
|||
return generatedStructConstructorCalltip;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
T getExpression(T)(T beforeTokens)
|
||||
{
|
||||
enum TYPE_IDENT_AND_LITERAL_CASES = q{
|
||||
private enum TYPE_IDENT_AND_LITERAL_CASES = q{
|
||||
case tok!"int":
|
||||
case tok!"uint":
|
||||
case tok!"long":
|
||||
|
@ -956,8 +956,14 @@ T getExpression(T)(T beforeTokens)
|
|||
case tok!"stringLiteral":
|
||||
case tok!"wstringLiteral":
|
||||
case tok!"dstringLiteral":
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
T getExpression(T)(T beforeTokens)
|
||||
{
|
||||
enum EXPRESSION_LOOP_BREAK = q{
|
||||
if (i + 1 < beforeTokens.length) switch (beforeTokens[i + 1].type)
|
||||
{
|
||||
|
@ -1057,6 +1063,75 @@ T getExpression(T)(T beforeTokens)
|
|||
return beforeTokens[i .. sliceEnd];
|
||||
}
|
||||
|
||||
size_t goBackToOpenParen(T)(T beforeTokens)
|
||||
in
|
||||
{
|
||||
assert (beforeTokens.length > 0);
|
||||
}
|
||||
body
|
||||
{
|
||||
size_t i = beforeTokens.length - 1;
|
||||
IdType open;
|
||||
IdType close;
|
||||
while (true) switch (beforeTokens[i].type)
|
||||
{
|
||||
case tok!",":
|
||||
case tok!".":
|
||||
case tok!"doubleLiteral":
|
||||
case tok!"floatLiteral":
|
||||
case tok!"idoubleLiteral":
|
||||
case tok!"ifloatLiteral":
|
||||
case tok!"intLiteral":
|
||||
case tok!"longLiteral":
|
||||
case tok!"realLiteral":
|
||||
case tok!"irealLiteral":
|
||||
case tok!"uintLiteral":
|
||||
case tok!"ulongLiteral":
|
||||
case tok!"characterLiteral":
|
||||
mixin(TYPE_IDENT_AND_LITERAL_CASES);
|
||||
if (i == 0)
|
||||
return size_t.max;
|
||||
else
|
||||
i--;
|
||||
break;
|
||||
case tok!"(":
|
||||
case tok!"[":
|
||||
return i + 1;
|
||||
case tok!")":
|
||||
open = tok!")";
|
||||
close = tok!"(";
|
||||
goto skip;
|
||||
case tok!"}":
|
||||
open = tok!"}";
|
||||
close = tok!"{";
|
||||
goto skip;
|
||||
case tok!"]":
|
||||
open = tok!"]";
|
||||
close = tok!"[";
|
||||
skip:
|
||||
if (i == 0)
|
||||
return size_t.max;
|
||||
else
|
||||
i--;
|
||||
int depth = 1;
|
||||
do
|
||||
{
|
||||
if (depth == 0 || i == 0)
|
||||
break;
|
||||
else
|
||||
i--;
|
||||
if (beforeTokens[i].type == open)
|
||||
depth++;
|
||||
else if (beforeTokens[i].type == close)
|
||||
depth--;
|
||||
} while (true);
|
||||
break;
|
||||
default:
|
||||
return size_t.max;
|
||||
}
|
||||
return size_t.max;
|
||||
}
|
||||
|
||||
/**
|
||||
* Params:
|
||||
* completionType = the completion type being requested
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
calltips
|
||||
void doStuff(int a, int b)
|
|
@ -0,0 +1,7 @@
|
|||
void doStuff(int a, int b) { return; }
|
||||
int getInt() { return 10; }
|
||||
void main(string[] args)
|
||||
{
|
||||
doStuff(getInt(), );
|
||||
auto x = 10, 20;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
set -e
|
||||
set -u
|
||||
|
||||
dcd-client file.d -c113 > actual1.txt
|
||||
diff actual1.txt expected1.txt
|
Loading…
Reference in New Issue