1 /*
2  *Copyright (C) 2018 Laurent Tréguier
3  *
4  *This file is part of DLS.
5  *
6  *DLS is free software: you can redistribute it and/or modify
7  *it under the terms of the GNU General Public License as published by
8  *the Free Software Foundation, either version 3 of the License, or
9  *(at your option) any later version.
10  *
11  *DLS is distributed in the hope that it will be useful,
12  *but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *GNU General Public License for more details.
15  *
16  *You should have received a copy of the GNU General Public License
17  *along with DLS.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 module dls.protocol.messages.text_document;
22 
23 import dls.protocol.definitions;
24 import dls.protocol.interfaces.text_document;
25 import std.json : JSONValue;
26 import std.typecons : Nullable;
27 
28 void didOpen(DidOpenTextDocumentParams params)
29 {
30     import dls.protocol.logger : logger;
31     import dls.util.document : Document;
32     import dls.util.uri : Uri;
33 
34     auto uri = new Uri(params.textDocument.uri);
35     logger.info("Document opened: %s", uri.path);
36 
37     if (!Document.open(params.textDocument))
38     {
39         logger.warning("Document %s is already open", uri.path);
40     }
41 }
42 
43 void didChange(DidChangeTextDocumentParams params)
44 {
45     import dls.protocol.logger : logger;
46     import dls.util.document : Document;
47     import dls.util.uri : Uri;
48 
49     auto uri = new Uri(params.textDocument.uri);
50     logger.info("Document changed: %s", uri.path);
51 
52     if (!Document.change(params.textDocument, params.contentChanges))
53     {
54         logger.warning("Document %s is not open", uri.path);
55     }
56 }
57 
58 void willSave(WillSaveTextDocumentParams params)
59 {
60 }
61 
62 TextEdit[] willSaveWaitUntil(WillSaveTextDocumentParams params)
63 {
64     return [];
65 }
66 
67 void didSave(DidSaveTextDocumentParams params)
68 {
69     import dls.protocol.logger : logger;
70     import dls.util.uri : Uri;
71 
72     auto uri = new Uri(params.textDocument.uri);
73     logger.info("Document saved: %s", uri.path);
74 }
75 
76 void didClose(DidCloseTextDocumentParams params)
77 {
78     import dls.protocol.logger : logger;
79     import dls.util.document : Document;
80     import dls.util.uri : Uri;
81 
82     auto uri = new Uri(params.textDocument.uri);
83     logger.info("Document closed: %s", uri.path);
84 
85     if (!Document.close(params.textDocument))
86     {
87         logger.warning("Document %s is not open", uri.path);
88     }
89 }
90 
91 CompletionItem[] completion(CompletionParams params)
92 {
93     return [];
94 }
95 
96 @("completionItem", "resolve")
97 CompletionItem completionItem_resolve(CompletionItem item)
98 {
99     return null;
100 }
101 
102 Hover hover(TextDocumentPositionParams params)
103 {
104     return null;
105 }
106 
107 SignatureHelp signatureHelp(TextDocumentPositionParams params)
108 {
109     return null;
110 }
111 
112 Location[] declaration(TextDocumentPositionParams params)
113 {
114     return [];
115 }
116 
117 Location[] definition(TextDocumentPositionParams params)
118 {
119     return [];
120 }
121 
122 Location[] typeDefinition(TextDocumentPositionParams params)
123 {
124     return [];
125 }
126 
127 Location implementation(TextDocumentPositionParams params)
128 {
129     return null;
130 }
131 
132 Location[] references(ReferenceParams params)
133 {
134     return [];
135 }
136 
137 DocumentHighlight[] documentHighlight(TextDocumentPositionParams params)
138 {
139     return [];
140 }
141 
142 JSONValue documentSymbol(DocumentSymbolParams params) // (DocumentSymbol | SymbolInformation)[]
143 {
144     return JSONValue();
145 }
146 
147 JSONValue codeAction(CodeActionParams params) // (Command | CodeAction)[]
148 {
149     return JSONValue();
150 }
151 
152 CodeLens[] codeLens(CodeLensParams params)
153 {
154     return [];
155 }
156 
157 @("codeLens", "resolve")
158 CodeLens codeLens_resolve(CodeLens codeLens)
159 {
160     return codeLens;
161 }
162 
163 DocumentLink[] documentLink(DocumentLinkParams params)
164 {
165     return [];
166 }
167 
168 @("documentLink", "resolve")
169 DocumentLink documentLink_resolve(DocumentLink link)
170 {
171     return link;
172 }
173 
174 ColorInformation[] documentColor(DocumentColorParams params)
175 {
176     return [];
177 }
178 
179 ColorPresentation[] colorPresentation(ColorPresentationParams params)
180 {
181     return [];
182 }
183 
184 TextEdit[] formatting(DocumentFormattingParams params)
185 {
186     return [];
187 }
188 
189 TextEdit[] rangeFormatting(DocumentRangeFormattingParams params)
190 {
191     return [];
192 }
193 
194 TextEdit[] onTypeFormatting(DocumentOnTypeFormattingParams params)
195 {
196     return [];
197 }
198 
199 WorkspaceEdit rename(RenameParams params)
200 {
201     return null;
202 }
203 
204 Range prepareRename(TextDocumentPositionParams params)
205 {
206     return null;
207 }
208 
209 FoldingRange[] foldingRange(FoldingRangeParams params)
210 {
211     return [];
212 }