From cb2074a152dda5ebcc8d03ec275b715cf34fa848 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Fri, 7 Apr 2017 17:26:44 +0200 Subject: [PATCH] prevent a range error, close #368 --- src/server/autocomplete.d | 11 +++++++++-- tests/tc052/file.d | 1 + tests/tc052/run.sh | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 tests/tc052/file.d create mode 100755 tests/tc052/run.sh diff --git a/src/server/autocomplete.d b/src/server/autocomplete.d index e689c9e..84ece04 100644 --- a/src/server/autocomplete.d +++ b/src/server/autocomplete.d @@ -791,10 +791,14 @@ DSymbol*[] getSymbolsByTokenChain(T)(Scope* completionScope, //writeln("<<<"); //dumpTokens(tokens.release); //writeln("<<<"); + if (tokens.length == 0) // workaround (#371) + return []; } else if (tokens[0] == tok!"." && tokens.length > 1) { tokens = tokens[1 .. $]; + if (tokens.length == 0) // workaround (#371) + return []; symbols = completionScope.getSymbolsAtGlobalScope(stringToken(tokens[0])); } else @@ -802,8 +806,11 @@ DSymbol*[] getSymbolsByTokenChain(T)(Scope* completionScope, if (symbols.length == 0) { - warning("Could not find declaration of ", stringToken(tokens[0]), - " from position ", cursorPosition); + //TODO: better bugfix for issue #368, see test case 52 or pull #371 + if (tokens.length) + warning("Could not find declaration of ", stringToken(tokens[0]), + " from position ", cursorPosition); + else assert(0, "internal error"); return []; } diff --git a/tests/tc052/file.d b/tests/tc052/file.d new file mode 100644 index 0000000..ae4e197 --- /dev/null +++ b/tests/tc052/file.d @@ -0,0 +1 @@ +void main(){assert(te.caretRightText == "tà");} diff --git a/tests/tc052/run.sh b/tests/tc052/run.sh new file mode 100755 index 0000000..c2f589e --- /dev/null +++ b/tests/tc052/run.sh @@ -0,0 +1,4 @@ +set -e +set -u + +../../bin/dcd-client $1 file.d -c46 -d