diff --git a/src/dcd/server/autocomplete/util.d b/src/dcd/server/autocomplete/util.d index ad1829c..9bc6439 100644 --- a/src/dcd/server/autocomplete/util.d +++ b/src/dcd/server/autocomplete/util.d @@ -189,9 +189,12 @@ DSymbol*[] getSymbolsByTokenChain(T)(Scope* completionScope, { size_t j; tokens.skipParen(j, tok!"(", tok!")"); - symbols = getSymbolsByTokenChain(completionScope, tokens[1 .. j], + if (j > 1) + { + symbols = getSymbolsByTokenChain(completionScope, tokens[1 .. j], cursorPosition, completionType); - tokens = tokens[j + 1 .. $]; + tokens = tokens[j + 1 .. $]; + } //writeln("<<<"); //dumpTokens(tokens.release); //writeln("<<<"); @@ -514,12 +517,14 @@ T getExpression(T)(T beforeTokens) i = bookmark + 1; break expressionLoop; case tok!"!": - if (skipCount == 1) + // only break if the bang is for a template instance + if (i - 2 >= 0 && beforeTokens[i - 2].type == tok!"identifier" && skipCount == 1) { sliceEnd = i - 1; i -= 2; + break expressionLoop; } - break expressionLoop; + break; default: break; } diff --git a/tests/tc_bang_op_or_template/expected1.txt b/tests/tc_bang_op_or_template/expected1.txt new file mode 100644 index 0000000..9a132a4 --- /dev/null +++ b/tests/tc_bang_op_or_template/expected1.txt @@ -0,0 +1,8 @@ +identifiers +alignof k +init k +mangleof k +max k +min k +sizeof k +stringof k diff --git a/tests/tc_bang_op_or_template/expected2.txt b/tests/tc_bang_op_or_template/expected2.txt new file mode 100644 index 0000000..73205b3 --- /dev/null +++ b/tests/tc_bang_op_or_template/expected2.txt @@ -0,0 +1,9 @@ +identifiers +T h +alignof k +i v +init k +mangleof k +sizeof k +stringof k +tupleof k diff --git a/tests/tc_bang_op_or_template/file.d b/tests/tc_bang_op_or_template/file.d new file mode 100644 index 0000000..3ff40ba --- /dev/null +++ b/tests/tc_bang_op_or_template/file.d @@ -0,0 +1,7 @@ +void main() +{ + char[][] a; + if (!(a[0][0]). ){} + template Foo(T) { int i;} + if (Foo!(int). ){} +} diff --git a/tests/tc_bang_op_or_template/run.sh b/tests/tc_bang_op_or_template/run.sh new file mode 100755 index 0000000..2a6da11 --- /dev/null +++ b/tests/tc_bang_op_or_template/run.sh @@ -0,0 +1,7 @@ +set -e +set -u + +../../bin/dcd-client $1 file.d -c49 > actual1.txt +diff actual1.txt expected1.txt +../../bin/dcd-client $1 file.d -c103 > actual2.txt +diff actual2.txt expected2.txt