1 module dls.protocol.messages.text_document; 2 3 import dls.protocol.definitions; 4 import dls.protocol.interfaces.text_document; 5 import dls.protocol.jsonrpc : send; 6 import dls.tools.tools : Tools; 7 import dls.util.document : Document; 8 import dls.util.logger : logger; 9 import dls.util.uri : Uri; 10 import std.typecons : Nullable; 11 12 void didOpen(DidOpenTextDocumentParams params) 13 { 14 if (params.textDocument.languageId == "d") 15 { 16 auto uri = new Uri(params.textDocument.uri); 17 logger.infof("Document opened: %s", uri.path); 18 Document.open(params.textDocument); 19 send("textDocument/publishDiagnostics", 20 new PublishDiagnosticsParams(uri, Tools.analysisTool.scan(uri))); 21 } 22 } 23 24 void didChange(DidChangeTextDocumentParams params) 25 { 26 auto uri = new Uri(params.textDocument.uri); 27 logger.infof("Document changed: %s", uri.path); 28 Document.change(params.textDocument, params.contentChanges); 29 } 30 31 void willSave(WillSaveTextDocumentParams params) 32 { 33 } 34 35 TextEdit[] willSaveWaitUntil(WillSaveTextDocumentParams params) 36 { 37 return []; 38 } 39 40 void didSave(DidSaveTextDocumentParams params) 41 { 42 auto uri = new Uri(params.textDocument.uri); 43 44 if (Document[uri]) 45 { 46 logger.infof("Document saved: %s", uri.path); 47 send("textDocument/publishDiagnostics", 48 new PublishDiagnosticsParams(uri, Tools.analysisTool.scan(uri))); 49 } 50 } 51 52 void didClose(DidCloseTextDocumentParams params) 53 { 54 auto uri = new Uri(params.textDocument.uri); 55 logger.infof("Document closed: %s", uri.path); 56 Document.close(params.textDocument); 57 send("textDocument/publishDiagnostics", new PublishDiagnosticsParams(uri, [])); 58 } 59 60 CompletionItem[] completion(CompletionParams params) 61 { 62 return Tools.symbolTool.completion(new Uri(params.textDocument.uri), params.position); 63 } 64 65 @("completionItem", "resolve") 66 CompletionItem completionItem_resolve(CompletionItem item) 67 { 68 return Tools.symbolTool.completionResolve(item); 69 } 70 71 Hover hover(TextDocumentPositionParams params) 72 { 73 return Tools.symbolTool.hover(new Uri(params.textDocument.uri), params.position); 74 } 75 76 SignatureHelp signatureHelp(TextDocumentPositionParams params) 77 { 78 return null; 79 } 80 81 Location definition(TextDocumentPositionParams params) 82 { 83 return Tools.symbolTool.definition(new Uri(params.textDocument.uri), params.position); 84 } 85 86 Nullable!Location typeDefinition(TextDocumentPositionParams params) 87 { 88 return Nullable!Location(); 89 } 90 91 Nullable!Location implementation(TextDocumentPositionParams params) 92 { 93 return Nullable!Location(); 94 } 95 96 Location[] references(ReferenceParams params) 97 { 98 return []; 99 } 100 101 DocumentHighlight[] documentHighlight(TextDocumentPositionParams params) 102 { 103 return Tools.symbolTool.highlight(new Uri(params.textDocument.uri), params.position); 104 } 105 106 SymbolInformation[] documentSymbol(DocumentSymbolParams params) 107 { 108 return Tools.symbolTool.symbol("", new Uri(params.textDocument.uri)); 109 } 110 111 Command[] codeAction(CodeActionParams params) 112 { 113 return []; 114 } 115 116 CodeLens[] codeLens(CodeLensParams params) 117 { 118 return []; 119 } 120 121 @("codeLens", "resolve") 122 CodeLens codeLens_resolve(CodeLens codeLens) 123 { 124 return codeLens; 125 } 126 127 DocumentLink[] documentLink(DocumentLinkParams params) 128 { 129 return []; 130 } 131 132 @("documentLink", "resolve") 133 DocumentLink documentLink_resolve(DocumentLink link) 134 { 135 return link; 136 } 137 138 ColorInformation[] documentColor(DocumentColorParams params) 139 { 140 return []; 141 } 142 143 ColorPresentation[] colorPresentation(ColorPresentationParams params) 144 { 145 return []; 146 } 147 148 TextEdit[] formatting(DocumentFormattingParams params) 149 { 150 auto uri = new Uri(params.textDocument.uri); 151 logger.infof("Formatting %s", uri.path); 152 return Tools.formatTool.formatting(uri, params.options); 153 } 154 155 TextEdit[] rangeFormatting(DocumentRangeFormattingParams params) 156 { 157 return []; 158 } 159 160 TextEdit[] onTypeFormatting(DocumentOnTypeFormattingParams params) 161 { 162 return []; 163 } 164 165 WorkspaceEdit[] rename(RenameParams params) 166 { 167 return []; 168 }