1 module dls.protocol.messages.workspace; 2 3 import dls.protocol.interfaces : SymbolInformation; 4 import dls.protocol.interfaces.workspace; 5 import dls.tools.tools : Tools; 6 import dls.util.logger : logger; 7 import dls.util.uri : Uri; 8 import std.json : JSONValue; 9 import std.typecons : Nullable; 10 11 void workspaceFolders(string id, Nullable!(WorkspaceFolder[]) folders) 12 { 13 if (!folders.isNull) 14 { 15 foreach (workspaceFolder; folders) 16 { 17 auto uri = new Uri(workspaceFolder.uri); 18 Tools.symbolTool.importPath(uri); 19 Tools.symbolTool.importSelections(uri); 20 Tools.analysisTool.addAnalysisConfigPath(uri); 21 } 22 } 23 } 24 25 void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) 26 { 27 import std.typecons : nullable; 28 29 workspaceFolders(null, params.event.added.nullable); 30 31 foreach (folder; params.event.removed) 32 { 33 auto uri = new Uri(folder.uri); 34 Tools.symbolTool.clearPath(uri); 35 Tools.analysisTool.removeAnalysisConfigPath(uri); 36 } 37 } 38 39 void configuration(string id, JSONValue[] config) 40 { 41 } 42 43 void didChangeConfiguration(DidChangeConfigurationParams params) 44 { 45 import dls.tools.configuration : Configuration; 46 import dls.util.json : convertFromJSON; 47 48 logger.info("Configuration changed"); 49 50 if ("d" in params.settings && "dls" in params.settings["d"]) 51 { 52 logger.info("Applying new configuration"); 53 Tools.setConfiguration(convertFromJSON!Configuration(params.settings["d"]["dls"])); 54 } 55 } 56 57 void didChangeWatchedFiles(DidChangeWatchedFilesParams params) 58 { 59 import dls.protocol.interfaces : MessageActionItem, MessageType, 60 ShowMessageRequestParams; 61 import dls.protocol.messages.window : Util; 62 import std.algorithm : canFind; 63 import std.path : baseName, dirName; 64 65 foreach (event; params.changes) 66 { 67 auto uri = new Uri(event.uri); 68 const fileName = baseName(uri.path); 69 70 logger.infof("File changed: %s", uri.path); 71 72 switch (fileName) 73 { 74 case "dub.json", "dub.sdl": 75 auto id = Util.sendMessageRequest( 76 Util.ShowMessageRequestType.upgradeSelections, [uri.path]); 77 Util.addMessageRequestType(id, Util.ShowMessageRequestType.upgradeSelections, uri); 78 break; 79 80 case "dub.selections.json": 81 Tools.symbolTool.importSelections(uri); 82 break; 83 84 default: 85 Tools.analysisTool.updateAnalysisConfigPath(Uri.fromPath(uri.path.dirName)); 86 break; 87 } 88 } 89 } 90 91 SymbolInformation[] symbol(WorkspaceSymbolParams params) 92 { 93 return Tools.symbolTool.symbol(params.query); 94 } 95 96 JSONValue executeCommand(ExecuteCommandParams params) 97 { 98 return JSONValue(null); 99 } 100 101 void applyEdit(string id, ApplyWorkspaceEditResponse response) 102 { 103 }