diff --git a/client.d b/client.d index bb7a6d8..cab3d6b 100644 --- a/client.d +++ b/client.d @@ -73,15 +73,6 @@ int main(string[] args) scope (exit) { socket.shutdown(SocketShutdown.BOTH); socket.close(); } return sendRequest(socket, request) ? 0 : 1; } - else if (importPaths.length > 0) - { - AutocompleteRequest request; - request.kind = RequestKind.addImport; - request.importPaths = importPaths.map!(a => absolutePath(a)).array; - TcpSocket socket = createSocket(port); - scope (exit) { socket.shutdown(SocketShutdown.BOTH); socket.close(); } - return sendRequest(socket, request) ? 0 : 1; - } else if (cursorPos == size_t.max) { // cursor position is a required argument @@ -122,12 +113,19 @@ int main(string[] args) request.importPaths = importPaths; request.sourceCode = sourceCode; request.cursorPosition = cursorPos; + + if (importPaths.length > 0) + { + request.kind |= RequestKind.addImport; + request.importPaths = importPaths.map!(a => absolutePath(a)).array; + } + if (symbolLocation) - request.kind = RequestKind.symbolLocation; + request.kind |= RequestKind.symbolLocation; else if (doc) - request.kind = RequestKind.doc; + request.kind |= RequestKind.doc; else - request.kind = RequestKind.autocomplete; + request.kind |= RequestKind.autocomplete; // Send message to server TcpSocket socket = createSocket(port); diff --git a/messages.d b/messages.d index 841b71d..70d2f59 100644 --- a/messages.d +++ b/messages.d @@ -111,18 +111,19 @@ enum CompletionType : string */ enum RequestKind : ubyte { + uninitialized = 0b00000000, /// Autocompletion - autocomplete, + autocomplete = 0b00000001, /// Clear the completion cache - clearCache, + clearCache = 0b00000010, /// Add import directory to server - addImport, + addImport = 0b00000100, /// Shut down the server - shutdown, + shutdown = 0b00001000, /// Get declaration location of given symbol - symbolLocation, + symbolLocation = 0b00010000, /// Get the doc comments for the symbol - doc + doc = 0b00100000, } /** diff --git a/server.d b/server.d index 27349b1..d14cdd0 100644 --- a/server.d +++ b/server.d @@ -145,32 +145,28 @@ int main(string[] args) AutocompleteRequest request; msgpack.unpack(buffer[size_t.sizeof .. bytesReceived], request); - final switch (request.kind) - { - case RequestKind.addImport: + if (request.kind & RequestKind.addImport) ModuleCache.addImportPaths(request.importPaths); - break; - case RequestKind.clearCache: + if (request.kind & RequestKind.clearCache) + { Log.info("Clearing cache."); ModuleCache.clear(); - break; - case RequestKind.shutdown: + } + else if (request.kind & RequestKind.shutdown) + { Log.info("Shutting down."); break serverLoop; - case RequestKind.autocomplete: -// try -// { - AutocompleteResponse response = complete(request); - ubyte[] responseBytes = msgpack.pack(response); - s.send(responseBytes); -// } -// catch (Exception e) -// { -// Log.error("Could not handle autocomplete request due to an exception:", -// e.msg); -// } - break; - case RequestKind.doc: + } + else if (request.kind & RequestKind.autocomplete) + { + Log.info("Getting completions"); + AutocompleteResponse response = complete(request); + ubyte[] responseBytes = msgpack.pack(response); + s.send(responseBytes); + } + else if (request.kind & RequestKind.doc) + { + Log.info("Getting doc comment"); try { AutocompleteResponse response = getDoc(request); @@ -181,9 +177,9 @@ int main(string[] args) { Log.error("Could not get DDoc information", e.msg); } - - break; - case RequestKind.symbolLocation: + } + else if (request.kind & RequestKind.symbolLocation) + { try { AutocompleteResponse response = findDeclaration(request); @@ -194,8 +190,9 @@ int main(string[] args) { Log.error("Could not get symbol location", e.msg); } - break; } + else + Log.error("Unknown request type"); Log.info("Request processed in ", requestWatch.peek().to!("msecs", float), " milliseconds"); } return 0;