From cc481193c855f7876c2d63ef0215f8d0657e542f Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sat, 8 Apr 2017 19:59:37 +0200 Subject: [PATCH] fixup #369, completion after calltip broke other features --- src/server/autocomplete.d | 34 +++++++++++++++++++++++++++------- tests/tc051/expected1.txt | 2 ++ tests/tc051/file1.d | 1 + tests/tc051/run.sh | 3 +++ 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 tests/tc051/expected1.txt create mode 100644 tests/tc051/file1.d diff --git a/src/server/autocomplete.d b/src/server/autocomplete.d index 84ece04..822ac90 100644 --- a/src/server/autocomplete.d +++ b/src/server/autocomplete.d @@ -175,8 +175,12 @@ public AutocompleteResponse complete(const AutocompleteRequest request, { ImportKind kind = determineImportKind(beforeTokens); if (kind == ImportKind.neither) + { + if (beforeTokens.isUdaExpression) + beforeTokens = beforeTokens[$-1 .. $]; return dotCompletion(beforeTokens, tokenArray, request.cursorPosition, moduleCache); + } else return importCompletion(beforeTokens, kind, moduleCache); } @@ -1195,6 +1199,29 @@ private enum TYPE_IDENT_AND_LITERAL_CASES = q{ case tok!"dstringLiteral": }; +bool isUdaExpression(T)(ref T tokens) +{ + bool result; + ptrdiff_t skip; + ptrdiff_t i = tokens.length - 2; + + while (i >= 2) + { + if (skip == 0 && tokens[i].type == tok!"identifier" && tokens[i-1].type == tok!"@") + { + result = true; + break; + } + + skip += tokens[i].type == tok!")"; + skip -= tokens[i].type == tok!"("; + + --i; + } + + return result; +} + /** * @@ -1222,13 +1249,6 @@ T getExpression(T)(T beforeTokens) expressionLoop: while (true) { - - if (i > 0 && beforeTokens[i].type == tok!"identifier" && - beforeTokens[i-1].type == tok!"@" ) - { - return beforeTokens[0 .. 0]; - } - switch (beforeTokens[i].type) { case tok!"import": diff --git a/tests/tc051/expected1.txt b/tests/tc051/expected1.txt new file mode 100644 index 0000000..024c4bb --- /dev/null +++ b/tests/tc051/expected1.txt @@ -0,0 +1,2 @@ +calltips +this(int a) diff --git a/tests/tc051/file1.d b/tests/tc051/file1.d new file mode 100644 index 0000000..baf637f --- /dev/null +++ b/tests/tc051/file1.d @@ -0,0 +1 @@ +struct UDA{int a;} @UDA( diff --git a/tests/tc051/run.sh b/tests/tc051/run.sh index 96da67d..be458fd 100755 --- a/tests/tc051/run.sh +++ b/tests/tc051/run.sh @@ -3,3 +3,6 @@ set -u ../../bin/dcd-client $1 file.d -c29 > actual.txt diff actual.txt expected.txt + +../../bin/dcd-client $1 file1.d -c25 > actual1.txt +diff actual1.txt expected1.txt