From 53c7f46233bbf2d296a66fc2db9e541a082b13ec Mon Sep 17 00:00:00 2001 From: alaran Date: Sun, 17 Jun 2012 11:14:15 +0000 Subject: [PATCH] import completion now works --- README.md | 2 ++ autocomplete.d | 24 ++++++++++++++++++++---- build.sh | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d84d92a..a01e64c 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ present. * k -- keyword, built-in version, scope statement * f -- function or method * g -- enum name +* P -- package +* M -- module # Paren Completion diff --git a/autocomplete.d b/autocomplete.d index 26d707f..7d62bf6 100644 --- a/autocomplete.d +++ b/autocomplete.d @@ -98,6 +98,7 @@ body case TokenType.Delete: case TokenType.LBrace: case TokenType.LParen: + case TokenType.Import: case TokenType.LBracket: case TokenType.Comma: case TokenType.Semicolon: @@ -293,10 +294,11 @@ struct AutoComplete string dotComplete(size_t cursor) { + stderr.writeln("dotComplete"); auto index = assumeSorted(tokens).lowerBound(cursor).length - 1; Token t = tokens[index]; size_t startIndex = findBeginningOfExpression(tokens, index); - + stderr.writeln("Token before startIndex is ", tokens[startIndex - 1]); if (startIndex - 1 < tokens.length && tokens[startIndex - 1] == TokenType.Import) { return importComplete(splitCallChain(tokens[startIndex .. index])); @@ -312,16 +314,30 @@ struct AutoComplete auto app = appender!(string[])(); foreach (k, t; typeMap) app.put(k ~ " " ~ t[1]); - return to!string(array(join(sort!"a.toLower() < b.toLower()"(app.data), "\n"))); + return to!string(array(join(sort!("a.toLower() < b.toLower()")(app.data), "\n"))); } string importComplete(const(Token)[] tokens) { - string part = tokens.map("a.value").join("/").array(); + stderr.writeln("importComplete"); + auto app = appender!(string[])(); + string part = to!string(map!"a.value.dup"(tokens).join("/").array()); foreach (path; context.importDirectories) { - if (exists()) + stderr.writeln("Searching for ", path, "/", part); + if (!exists(path ~ "/" ~ part)) + continue; + stderr.writeln("found it"); + foreach (DirEntry dirEntry; dirEntries(path ~ "/" ~ part, + SpanMode.shallow)) + { + if (dirEntry.isDir) + app.put(baseName(dirEntry.name) ~ " P"); + else if (dirEntry.name.endsWith(".d", ".di")) + app.put(stripExtension(baseName(dirEntry.name)) ~ " M"); + } } + return to!string(sort!("a.toLower() < b.toLower()")(app.data).join("\n").array()); } const(Token)[] tokens; diff --git a/build.sh b/build.sh index c976e38..da0e8a0 100755 --- a/build.sh +++ b/build.sh @@ -1,2 +1,2 @@ #dmd *.d -release -noboundscheck -O -w -wi -m64 -property -ofdscanner #-inline -dmd *.d -g -m64 -w -wi -property -ofdscanner +dmd *.d -g -m64 -w -wi -property -ofdscanner