From 5a8b2f7838f42148686eed0f09d51cedfb4fd7b9 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Tue, 24 Apr 2018 23:58:31 +0200 Subject: [PATCH] fix #382 - No completion when current string is a keyword --- src/dcd/server/autocomplete/complete.d | 9 +++++++++ tests/tc_complete_kw/expected1.txt | 2 ++ tests/tc_complete_kw/file1.d | 1 + tests/tc_complete_kw/file2.d | 1 + tests/tc_complete_kw/run.sh | 8 ++++++++ 5 files changed, 21 insertions(+) create mode 100644 tests/tc_complete_kw/expected1.txt create mode 100644 tests/tc_complete_kw/file1.d create mode 100644 tests/tc_complete_kw/file2.d create mode 100755 tests/tc_complete_kw/run.sh 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