Allow -I to appear with other options. Fix #134

This commit is contained in:
Hackerpilot 2014-05-27 11:48:17 -07:00
parent 21576ca9a8
commit 059726b662
3 changed files with 39 additions and 43 deletions

View File

@ -73,15 +73,6 @@ int main(string[] args)
scope (exit) { socket.shutdown(SocketShutdown.BOTH); socket.close(); } scope (exit) { socket.shutdown(SocketShutdown.BOTH); socket.close(); }
return sendRequest(socket, request) ? 0 : 1; 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) else if (cursorPos == size_t.max)
{ {
// cursor position is a required argument // cursor position is a required argument
@ -122,12 +113,19 @@ int main(string[] args)
request.importPaths = importPaths; request.importPaths = importPaths;
request.sourceCode = sourceCode; request.sourceCode = sourceCode;
request.cursorPosition = cursorPos; request.cursorPosition = cursorPos;
if (importPaths.length > 0)
{
request.kind |= RequestKind.addImport;
request.importPaths = importPaths.map!(a => absolutePath(a)).array;
}
if (symbolLocation) if (symbolLocation)
request.kind = RequestKind.symbolLocation; request.kind |= RequestKind.symbolLocation;
else if (doc) else if (doc)
request.kind = RequestKind.doc; request.kind |= RequestKind.doc;
else else
request.kind = RequestKind.autocomplete; request.kind |= RequestKind.autocomplete;
// Send message to server // Send message to server
TcpSocket socket = createSocket(port); TcpSocket socket = createSocket(port);

View File

@ -111,18 +111,19 @@ enum CompletionType : string
*/ */
enum RequestKind : ubyte enum RequestKind : ubyte
{ {
uninitialized = 0b00000000,
/// Autocompletion /// Autocompletion
autocomplete, autocomplete = 0b00000001,
/// Clear the completion cache /// Clear the completion cache
clearCache, clearCache = 0b00000010,
/// Add import directory to server /// Add import directory to server
addImport, addImport = 0b00000100,
/// Shut down the server /// Shut down the server
shutdown, shutdown = 0b00001000,
/// Get declaration location of given symbol /// Get declaration location of given symbol
symbolLocation, symbolLocation = 0b00010000,
/// Get the doc comments for the symbol /// Get the doc comments for the symbol
doc doc = 0b00100000,
} }
/** /**

View File

@ -145,32 +145,28 @@ int main(string[] args)
AutocompleteRequest request; AutocompleteRequest request;
msgpack.unpack(buffer[size_t.sizeof .. bytesReceived], request); msgpack.unpack(buffer[size_t.sizeof .. bytesReceived], request);
final switch (request.kind) if (request.kind & RequestKind.addImport)
{
case RequestKind.addImport:
ModuleCache.addImportPaths(request.importPaths); ModuleCache.addImportPaths(request.importPaths);
break; if (request.kind & RequestKind.clearCache)
case RequestKind.clearCache: {
Log.info("Clearing cache."); Log.info("Clearing cache.");
ModuleCache.clear(); ModuleCache.clear();
break; }
case RequestKind.shutdown: else if (request.kind & RequestKind.shutdown)
{
Log.info("Shutting down."); Log.info("Shutting down.");
break serverLoop; break serverLoop;
case RequestKind.autocomplete: }
// try else if (request.kind & RequestKind.autocomplete)
// { {
AutocompleteResponse response = complete(request); Log.info("Getting completions");
ubyte[] responseBytes = msgpack.pack(response); AutocompleteResponse response = complete(request);
s.send(responseBytes); ubyte[] responseBytes = msgpack.pack(response);
// } s.send(responseBytes);
// catch (Exception e) }
// { else if (request.kind & RequestKind.doc)
// Log.error("Could not handle autocomplete request due to an exception:", {
// e.msg); Log.info("Getting doc comment");
// }
break;
case RequestKind.doc:
try try
{ {
AutocompleteResponse response = getDoc(request); AutocompleteResponse response = getDoc(request);
@ -181,9 +177,9 @@ int main(string[] args)
{ {
Log.error("Could not get DDoc information", e.msg); Log.error("Could not get DDoc information", e.msg);
} }
}
break; else if (request.kind & RequestKind.symbolLocation)
case RequestKind.symbolLocation: {
try try
{ {
AutocompleteResponse response = findDeclaration(request); AutocompleteResponse response = findDeclaration(request);
@ -194,8 +190,9 @@ int main(string[] args)
{ {
Log.error("Could not get symbol location", e.msg); 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"); Log.info("Request processed in ", requestWatch.peek().to!("msecs", float), " milliseconds");
} }
return 0; return 0;