diff --git a/src/server/autocomplete.d b/src/server/autocomplete.d index 75e5169..9c0af1e 100644 --- a/src/server/autocomplete.d +++ b/src/server/autocomplete.d @@ -643,35 +643,53 @@ void setImportCompletions(T)(T tokens, ref AutocompleteResponse response, bool found = false; - foreach (importDirectory; cache.getImportPaths()) + foreach (importPath; cache.getImportPaths()) { - string p = buildPath(importDirectory, path); - if (!exists(p)) - continue; - - found = true; - - foreach (string name; dirEntries(p, SpanMode.shallow)) + if (importPath.isFile) { - import std.path: baseName; - if (name.baseName.startsWith(".#")) + if (!exists(importPath)) continue; - auto n = name.baseName(".d").baseName(".di"); - if (isFile(name) && (name.endsWith(".d") || name.endsWith(".di")) - && (partial is null || n.startsWith(partial))) + found = true; + + auto n = importPath.baseName(".d").baseName(".di"); + if (isFile(importPath) && (importPath.endsWith(".d") || importPath.endsWith(".di")) + && (partial is null || n.startsWith(partial))) { response.completions ~= n; response.completionKinds ~= CompletionKind.moduleName; } - else if (isDir(name)) + } + else + { + string p = buildPath(importPath, path); + if (!exists(p)) + continue; + + found = true; + + foreach (string name; dirEntries(p, SpanMode.shallow)) { - if (n[0] != '.' && (partial is null || n.startsWith(partial))) + import std.path: baseName; + if (name.baseName.startsWith(".#")) + continue; + + auto n = name.baseName(".d").baseName(".di"); + if (isFile(name) && (name.endsWith(".d") || name.endsWith(".di")) + && (partial is null || n.startsWith(partial))) { response.completions ~= n; - response.completionKinds ~= - exists(buildPath(name, "package.d")) || exists(buildPath(name, "package.di")) - ? CompletionKind.moduleName : CompletionKind.packageName; + response.completionKinds ~= CompletionKind.moduleName; + } + else if (isDir(name)) + { + if (n[0] != '.' && (partial is null || n.startsWith(partial))) + { + response.completions ~= n; + response.completionKinds ~= + exists(buildPath(name, "package.d")) || exists(buildPath(name, "package.di")) + ? CompletionKind.moduleName : CompletionKind.packageName; + } } } } diff --git a/tests/tc036/bar.d b/tests/tc036/bar.d new file mode 100644 index 0000000..7db5596 --- /dev/null +++ b/tests/tc036/bar.d @@ -0,0 +1,3 @@ +module tc036.bar; + +void fooBarFunc() { } diff --git a/tests/tc036/expected1.txt b/tests/tc036/expected1.txt new file mode 100644 index 0000000..a48220d --- /dev/null +++ b/tests/tc036/expected1.txt @@ -0,0 +1,2 @@ +identifiers +bar M diff --git a/tests/tc036/expected2.txt b/tests/tc036/expected2.txt new file mode 100644 index 0000000..fe208d3 --- /dev/null +++ b/tests/tc036/expected2.txt @@ -0,0 +1,2 @@ +identifiers +fooBarFunc f diff --git a/tests/tc036/file.d b/tests/tc036/file.d new file mode 100644 index 0000000..375042c --- /dev/null +++ b/tests/tc036/file.d @@ -0,0 +1,3 @@ +import tc036.bar; + +void main() { fooBarF } diff --git a/tests/tc036/run.sh b/tests/tc036/run.sh new file mode 100755 index 0000000..83844db --- /dev/null +++ b/tests/tc036/run.sh @@ -0,0 +1,10 @@ +set -e +set -u + +../../bin/dcd-client $1 -I bar.d + +../../bin/dcd-client $1 file.d -c 15 | sed s\""$(dirname "$(pwd)")"\"\" > actual1.txt +diff actual1.txt expected1.txt + +../../bin/dcd-client $1 file.d -c 40 | sed s\""$(dirname "$(pwd)")"\"\" > actual2.txt +diff actual2.txt expected2.txt