diff --git a/src/dcd/server/autocomplete/complete.d b/src/dcd/server/autocomplete/complete.d index 75e1ae8..657833a 100644 --- a/src/dcd/server/autocomplete/complete.d +++ b/src/dcd/server/autocomplete/complete.d @@ -57,6 +57,15 @@ public AutocompleteResponse complete(const AutocompleteRequest request, auto stringCache = StringCache(StringCache.defaultBucketCount); auto beforeTokens = getTokensBeforeCursor(request.sourceCode, request.cursorPosition, stringCache, tokenArray); + + // allows to get completion on keyword, typically "is" + if (beforeTokens.length && isKeyword(beforeTokens[$-1].type)) + { + Token* fakeIdent = cast(Token*) (&beforeTokens[$-1]); + fakeIdent.text = str(fakeIdent.type); + fakeIdent.type = tok!"identifier"; + } + if (beforeTokens.length >= 2) { if (beforeTokens[$ - 1] == tok!"(" || beforeTokens[$ - 1] == tok!"[" diff --git a/tests/tc_complete_kw/expected1.txt b/tests/tc_complete_kw/expected1.txt new file mode 100644 index 0000000..1a08044 --- /dev/null +++ b/tests/tc_complete_kw/expected1.txt @@ -0,0 +1,2 @@ +identifiers +isBig v diff --git a/tests/tc_complete_kw/file1.d b/tests/tc_complete_kw/file1.d new file mode 100644 index 0000000..2fbbd12 --- /dev/null +++ b/tests/tc_complete_kw/file1.d @@ -0,0 +1 @@ +bool isBig; void foo(){is} diff --git a/tests/tc_complete_kw/file2.d b/tests/tc_complete_kw/file2.d new file mode 100644 index 0000000..ceb1a9a --- /dev/null +++ b/tests/tc_complete_kw/file2.d @@ -0,0 +1 @@ +struct F{bool isBig;} void foo(){F f; f.is} diff --git a/tests/tc_complete_kw/run.sh b/tests/tc_complete_kw/run.sh new file mode 100755 index 0000000..0d34510 --- /dev/null +++ b/tests/tc_complete_kw/run.sh @@ -0,0 +1,8 @@ +set -e +set -u + +../../bin/dcd-client $1 file1.d -c25 > actual1.txt +diff actual1.txt expected1.txt + +../../bin/dcd-client $1 file2.d -c42 > actual2.txt +diff actual2.txt expected1.txt