1 module dls.protocol.interfaces.general;
2 
3 public import dls.protocol.definitions;
4 import dls.protocol.interfaces.text_document : CompletionItemKind;
5 import dls.protocol.interfaces.workspace : WorkspaceFolder;
6 
7 private class WithDynamicRegistration
8 {
9     Nullable!bool dynamicRegistration;
10 }
11 
12 class InitializeParams
13 {
14     static enum Trace : string
15     {
16         off = "off",
17         messages = "messages",
18         verbose = "verbose"
19     }
20 
21     Nullable!ulong processId;
22     // deprecated Nullable!string rootPath; // TODO: add compatibility
23     Nullable!DocumentUri rootUri;
24     Nullable!JSONValue initializationOptions;
25     ClientCapabilities capabilities = new ClientCapabilities();
26     Nullable!Trace trace;
27     Nullable!(WorkspaceFolder[]) workspaceFolders;
28 }
29 
30 class WorkspaceClientCapabilities
31 {
32     static class WorkspaceEdit
33     {
34         Nullable!bool documentChanges;
35     }
36 
37     Nullable!bool applyEdit;
38     Nullable!WorkspaceEdit workspaceEdit;
39     Nullable!WithDynamicRegistration didChangeConfiguration;
40     Nullable!WithDynamicRegistration didChangeWatchedFiles;
41     Nullable!WithDynamicRegistration symbol;
42     Nullable!WithDynamicRegistration executeCommand;
43     Nullable!bool workspaceFolders;
44     Nullable!bool configuration;
45 }
46 
47 class TextDocumentClientCapabilities
48 {
49     static class Synchronisation
50     {
51         Nullable!bool dynamicRegistration;
52         Nullable!bool willSave;
53         Nullable!bool willSaveWaitUntil;
54         Nullable!bool didSave;
55     }
56 
57     static class Completion
58     {
59         static class CompletionItem
60         {
61             Nullable!bool snippetSupport;
62             Nullable!bool commitCharactersSupport;
63             Nullable!(MarkupKind[]) documentationFormat;
64         }
65 
66         static class CompletionItemKind
67         {
68             Nullable!(dls.protocol.interfaces.text_document.CompletionItemKind[]) valueSet;
69         }
70 
71         Nullable!bool dynamicRegistration;
72         Nullable!CompletionItem completionItem;
73         Nullable!CompletionItemKind completionItemKind;
74         Nullable!bool contextSupport;
75     }
76 
77     Nullable!Synchronisation synchronisation;
78     Nullable!Completion completion;
79     Nullable!WithDynamicRegistration hover;
80     Nullable!WithDynamicRegistration signatureHelp;
81     Nullable!WithDynamicRegistration references;
82     Nullable!WithDynamicRegistration documentHighlight;
83     Nullable!WithDynamicRegistration documentSymbol;
84     Nullable!WithDynamicRegistration formatting;
85     Nullable!WithDynamicRegistration rangeFormatting;
86     Nullable!WithDynamicRegistration onTypeFormatting;
87     Nullable!WithDynamicRegistration definition;
88     Nullable!WithDynamicRegistration typeDefinition;
89     Nullable!WithDynamicRegistration implementation;
90     Nullable!WithDynamicRegistration codeAction;
91     Nullable!WithDynamicRegistration codeLens;
92     Nullable!WithDynamicRegistration documentLink;
93     Nullable!WithDynamicRegistration colorProvider;
94     Nullable!WithDynamicRegistration rename;
95 }
96 
97 class ClientCapabilities
98 {
99     Nullable!WorkspaceClientCapabilities workspace;
100     Nullable!TextDocumentClientCapabilities textDocument;
101     Nullable!JSONValue experimental;
102 }
103 
104 class InitializeResult
105 {
106     ServerCapabilities capabilities = new ServerCapabilities();
107 }
108 
109 // deprecated enum InitializeErrorCode // TODO: add compatibility
110 // {
111 //     unknownProtocolVersion = 1
112 // }
113 
114 class InitializeErrorData
115 {
116     bool retry;
117 }
118 
119 enum TextDocumentSyncKind
120 {
121     none = 0,
122     full = 1,
123     incremental = 2
124 }
125 
126 private class OptionsBase
127 {
128     Nullable!bool resolveProvider;
129 }
130 
131 class CompletionOptions : OptionsBase
132 {
133     Nullable!(string[]) triggerCharacters;
134 }
135 
136 class SignatureHelpOptions
137 {
138     Nullable!(string[]) triggerCharacters;
139 }
140 
141 alias CodeLensOptions = OptionsBase;
142 
143 class DocumentOnTypeFormattingOptions
144 {
145     string firstTriggerCharacter;
146     Nullable!(string[]) moreTriggerCharacter;
147 }
148 
149 alias DocumentLinkOptions = OptionsBase;
150 
151 class ExecuteCommandOptions
152 {
153     string[] commands;
154 }
155 
156 class SaveOptions
157 {
158     Nullable!bool includeText;
159 }
160 
161 class ColorProviderOptions
162 {
163 }
164 
165 class TextDocumentSyncOptions
166 {
167     Nullable!bool openClose;
168     Nullable!TextDocumentSyncKind change;
169     Nullable!bool willSave;
170     Nullable!bool willSaveWaitUntil;
171     Nullable!SaveOptions save;
172 }
173 
174 class StaticRegistrationOptions
175 {
176     Nullable!string id;
177 }
178 
179 class ServerCapabilities
180 {
181     static class Workspace
182     {
183         static class WorkspaceFolders
184         {
185             Nullable!bool supported;
186             Nullable!JSONValue changeNotifications;
187         }
188 
189         Nullable!WorkspaceFolders workspaceFolders;
190     }
191 
192     Nullable!TextDocumentSyncOptions textDocumentSync; // TODO: add TextDocumentSyncKind compatibility
193     Nullable!bool hoverProvider;
194     Nullable!CompletionOptions completionProvider;
195     Nullable!SignatureHelpOptions signatureHelpProvider;
196     Nullable!bool definitionProvider;
197     Nullable!JSONValue typeDefinitionProvider;
198     Nullable!JSONValue implementationProvider;
199     Nullable!bool referencesProvider;
200     Nullable!bool documentHighlightProvider;
201     Nullable!bool documentSymbolProvider;
202     Nullable!bool workspaceSymbolProvider;
203     Nullable!bool codeActionProvider;
204     Nullable!CodeLensOptions codeLensProvider;
205     Nullable!bool documentFormattingProvider;
206     Nullable!bool documentRangeFormattingProvider;
207     Nullable!DocumentOnTypeFormattingOptions documentOnTypeFormattingProvider;
208     Nullable!bool renameProvider;
209     Nullable!DocumentLinkOptions documentLinkProvider;
210     Nullable!JSONValue colorProvider;
211     Nullable!ExecuteCommandOptions executeCommandProvider;
212     Nullable!Workspace workspace;
213     Nullable!JSONValue experimental;
214 }
215 
216 class CancelParams
217 {
218     JSONValue id;
219 }