1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "languagefeatures.h"
6
7namespace newlsp{
8
9std::string toJsonValueStr(const newlsp::DeclarationParams &val)
10{
11 std::string ret = json::mergeObjs(
12 {toJsonValueStr(TextDocumentPositionParams(val)),
13 toJsonValueStr(WorkDoneProgressParams(val)),
14 toJsonValueStr(PartialResultParams(val)) });
15 return ret;
16}
17
18std::string toJsonValueStr(const DefinitionParams &val)
19{
20 std::string ret = json::mergeObjs(
21 {toJsonValueStr(TextDocumentPositionParams(val)),
22 toJsonValueStr(WorkDoneProgressParams(val)),
23 toJsonValueStr(PartialResultParams(val))});
24 return ret;
25}
26
27std::string toJsonValueStr(const TypeDefinitionParams &val)
28{
29 std::string ret = json::mergeObjs(
30 {toJsonValueStr(TextDocumentPositionParams(val)),
31 toJsonValueStr(WorkDoneProgressParams(val)),
32 toJsonValueStr(PartialResultParams(val))});
33 return ret;
34}
35
36std::string toJsonValueStr(const ImplementationParams &val)
37{
38 std::string ret = json::mergeObjs(
39 {toJsonValueStr(TextDocumentPositionParams(val)),
40 toJsonValueStr(WorkDoneProgressParams(val)),
41 toJsonValueStr(PartialResultParams(val))});
42 return ret;
43}
44
45std::string toJsonValueStr(const ReferenceParams &val)
46{
47 std::string ret = json::delScope(json::mergeObjs(
48 {toJsonValueStr(TextDocumentPositionParams(val)),
49 toJsonValueStr(WorkDoneProgressParams(val)),
50 toJsonValueStr(PartialResultParams(val))}));
51 ret = json::addValue(ret, json::KV{"context", val.context});
52 return json::addScope(ret);
53}
54
55std::string toJsonValueStr(const CallHierarchyPrepareParams &val)
56{
57 std::string ret = json::mergeObjs(
58 {toJsonValueStr(TextDocumentPositionParams(val)),
59 toJsonValueStr(WorkDoneProgressParams(val))});
60 return ret;
61}
62
63std::string toJsonValueStr(const CallHierarchyIncomingCallsParams &val)
64{
65 std::string ret = json::delScope(json::mergeObjs(
66 {toJsonValueStr(WorkDoneProgressParams(val)),
67 toJsonValueStr(PartialResultParams(val))}));
68 ret = json::addValue(ret, json::KV{"item", val.item});
69 return json::addScope(ret);
70}
71
72std::string toJsonValueStr(const CallHierarchyOutgoingCallsParams &val)
73{
74 std::string ret = json::delScope(json::mergeObjs(
75 {toJsonValueStr(WorkDoneProgressParams(val)),
76 toJsonValueStr(PartialResultParams(val))}));
77 ret = json::addValue(ret, json::KV{"item", val.item});
78 return json::addScope(ret);
79}
80
81std::string toJsonValueStr(const CallHierarchyItem &val)
82{
83 std::string ret;
84 ret = json::addValue(ret, json::KV{"name", val.name});
85 ret = json::addValue(ret, json::KV{"kind", val.kind});
86 ret = json::addValue(ret, json::KV{"tags", val.tags});
87 ret = json::addValue(ret, json::KV{"detail", val.detail});
88 ret = json::addValue(ret, json::KV{"uri", val.uri});
89 ret = json::addValue(ret, json::KV{"range", val.range});
90 ret = json::addValue(ret, json::KV{"selectionRange", val.selectionRange});
91 ret = json::addValue(ret, json::KV{"data", val.data});
92 return json::addScope(ret);
93}
94
95std::string toJsonValueStr(const ReferenceParams::ReferenceContext &val)
96{
97 std::string ret;
98 ret = json::addValue(ret, json::KV{"includeDeclaration", val.includeDeclaration});
99 return json::addScope(ret);
100}
101
102std::string toJsonValueStr(const TypeHierarchyPrepareParams &val)
103{
104 std::string ret = json::mergeObjs(
105 {toJsonValueStr(TextDocumentPositionParams(val)),
106 toJsonValueStr(WorkDoneProgressParams(val))});
107 return ret;
108}
109
110std::string toJsonValueStr(const TypeHierarchySupertypesParams &val)
111{
112 std::string ret = json::delScope(json::mergeObjs(
113 {toJsonValueStr(WorkDoneProgressParams(val)),
114 toJsonValueStr(PartialResultParams(val))}));
115 ret = json::addValue(ret, json::KV{"item", val.item});
116 return json::addScope(ret);
117}
118
119std::string toJsonValueStr(const TypeHierarchyItem &val)
120{
121 std::string ret;
122 ret = json::addValue(ret, json::KV{"name", val.name});
123 ret = json::addValue(ret, json::KV{"kind", val.kind});
124 ret = json::addValue(ret, json::KV{"tags", val.tags});
125 ret = json::addValue(ret, json::KV{"detail", val.detail});
126 ret = json::addValue(ret, json::KV{"uri", val.uri});
127 ret = json::addValue(ret, json::KV{"range", val.range});
128 ret = json::addValue(ret, json::KV{"selectionRange", val.selectionRange});
129 ret = json::addValue(ret, json::KV{"data", val.data});
130 return json::addScope(ret);
131}
132
133std::string toJsonValueStr(const TypeHierarchySubtypesParams &val)
134{
135 std::string ret = json::delScope(json::mergeObjs(
136 {toJsonValueStr(WorkDoneProgressParams(val)),
137 toJsonValueStr(PartialResultParams(val))}));
138 ret = json::addValue(ret, json::KV{"item", val.item});
139 return json::addScope(ret);
140}
141
142std::string toJsonValueStr(const DocumentHighlightParams &val)
143{
144 std::string ret = json::mergeObjs(
145 {toJsonValueStr(TextDocumentPositionParams(val)),
146 toJsonValueStr(WorkDoneProgressParams(val)),
147 toJsonValueStr(PartialResultParams(val))});
148 return ret;
149}
150
151std::string toJsonValueStr(const DocumentLinkParams &val)
152{
153 std::string ret = json::delScope(json::mergeObjs(
154 {toJsonValueStr(WorkDoneProgressParams(val)),
155 toJsonValueStr(PartialResultParams(val))}));
156 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
157 return json::addScope(ret);
158}
159
160std::string toJsonValueStr(const DocumentLink &val)
161{
162 std::string ret;
163 ret = json::addValue(ret, json::KV{"range", val.range});
164 ret = json::addValue(ret, json::KV{"target", val.target});
165 ret = json::addValue(ret, json::KV{"tooltip", val.tooltip});
166 ret = json::addValue(ret, json::KV{"data", val.data});
167 return json::addScope(ret);
168}
169
170std::string toJsonValueStr(const HoverParams &val)
171{
172 std::string ret = json::mergeObjs(
173 {toJsonValueStr(TextDocumentPositionParams(val)),
174 toJsonValueStr(WorkDoneProgressParams(val))});
175 return ret;
176}
177
178std::string toJsonValueStr(const CodeLensParams &val)
179{
180 std::string ret = json::delScope(json::mergeObjs(
181 {toJsonValueStr(WorkDoneProgressParams(val)),
182 toJsonValueStr(PartialResultParams(val))}));
183 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
184 return json::addScope(ret);
185}
186
187std::string toJsonValueStr(const CodeLens &val)
188{
189 std::string ret;
190 ret = json::addValue(ret, json::KV{"range", val.range});
191 ret = json::addValue(ret, json::KV{"command", val.command});
192 ret = json::addValue(ret, json::KV{"data", val.data});
193 return json::addScope(ret);
194}
195
196std::string toJsonValueStr(const FoldingRangeParams &val)
197{
198 std::string ret = json::delScope(json::mergeObjs(
199 {toJsonValueStr(WorkDoneProgressParams(val)),
200 toJsonValueStr(PartialResultParams(val))}));
201 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
202 return json::addScope(ret);
203}
204
205std::string toJsonValueStr(const SelectionRangeParams &val)
206{
207 std::string ret = json::delScope(json::mergeObjs(
208 {toJsonValueStr(WorkDoneProgressParams(val)),
209 toJsonValueStr(PartialResultParams(val))}));
210 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
211 ret = json::addValue(ret, json::KV{"positions", val.positions});
212 return json::addScope(ret);
213}
214
215std::string toJsonValueStr(const DocumentSymbolParams &val)
216{
217 std::string ret = json::delScope(json::mergeObjs(
218 {toJsonValueStr(WorkDoneProgressParams(val)),
219 toJsonValueStr(PartialResultParams(val))}));
220 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
221 return json::addScope(ret);
222}
223
224std::string toJsonValueStr(const SemanticTokensParams &val)
225{
226 std::string ret = json::delScope(json::mergeObjs(
227 {toJsonValueStr(WorkDoneProgressParams(val)),
228 toJsonValueStr(PartialResultParams(val))}));
229 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
230 return json::addScope(ret);
231}
232
233std::string toJsonValueStr(const SemanticTokensDeltaParams &val)
234{
235 std::string ret = json::delScope(json::mergeObjs(
236 {toJsonValueStr(WorkDoneProgressParams(val)),
237 toJsonValueStr(PartialResultParams(val))}));
238 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
239 ret = json::addValue(ret, json::KV{"previousResultId", val.previousResultId});
240 return json::addScope(ret);
241}
242
243std::string toJsonValueStr(const SemanticTokensRangeParams &val)
244{
245 std::string ret = json::delScope(json::mergeObjs(
246 {toJsonValueStr(WorkDoneProgressParams(val)),
247 toJsonValueStr(PartialResultParams(val))}));
248 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
249 ret = json::addValue(ret, json::KV{"range", val.range});
250 return json::addScope(ret);
251}
252
253std::string toJsonValueStr(const InlayHintParams &val)
254{
255 std::string ret = json::delScope(toJsonValueStr(WorkDoneProgressParams(val)));
256 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
257 ret = json::addValue(ret, json::KV{"range", val.range});
258 return json::addScope(ret);
259}
260
261std::string toJsonValueStr(const InlineValueParams &val)
262{
263 std::string ret = json::delScope(toJsonValueStr(WorkDoneProgressParams(val)));
264 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
265 ret = json::addValue(ret, json::KV{"range", val.range});
266 ret = json::addValue(ret, json::KV{"context", val.context});
267 return json::addScope(ret);
268}
269
270std::string toJsonValueStr(const InlineValueContext &val)
271{
272 std::string ret;
273 ret = json::addValue(ret, json::KV{"frameId", val.frameId});
274 ret = json::addValue(ret, json::KV{"stoppedLocation", val.stoppedLocation});
275 return json::addScope(ret);
276}
277
278std::string toJsonValueStr(const MonikerParams &val)
279{
280 std::string ret = json::mergeObjs(
281 {toJsonValueStr(TextDocumentPositionParams(val)),
282 toJsonValueStr(WorkDoneProgressParams(val)),
283 toJsonValueStr(PartialResultParams(val)) });
284 return ret;
285}
286
287std::string toJsonValueStr(const CompletionContext &val)
288{
289 std::string ret;
290 ret = json::addValue(ret, json::KV{"triggerKind", val.triggerKind});
291 ret = json::addValue(ret, json::KV{"triggerCharacter", val.triggerCharacter});
292 return json::addScope(ret);
293}
294
295std::string toJsonValueStr(const CompletionParams &val)
296{
297 std::string ret = json::delScope(json::mergeObjs(
298 {toJsonValueStr(TextDocumentPositionParams(val)),
299 toJsonValueStr(WorkDoneProgressParams(val)),
300 toJsonValueStr(PartialResultParams(val))}));
301 ret = json::addValue(ret, json::KV{"context", val.context});
302 return json::addScope(ret);
303}
304
305std::string toJsonValueStr(const DocumentDiagnosticParams &val)
306{
307 std::string ret = json::delScope(json::mergeObjs(
308 {toJsonValueStr(WorkDoneProgressParams(val)),
309 toJsonValueStr(PartialResultParams(val))}));
310 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
311 ret = json::addValue(ret, json::KV{"identifier", val.identifier});
312 ret = json::addValue(ret, json::KV{"previousResultId", val.previousResultId});
313 return json::addScope(ret);
314}
315
316std::string toJsonValueStr(const PreviousResultId &val)
317{
318 std::string ret;
319 ret = json::addValue(ret, json::KV{"uri", val.uri});
320 ret = json::addValue(ret, json::KV{"value", val.value});
321 return json::addScope(ret);
322}
323
324std::string toJsonValueStr(const WorkspaceDiagnosticParams &val)
325{
326 std::string ret = json::delScope(json::mergeObjs(
327 {toJsonValueStr(WorkDoneProgressParams(val)),
328 toJsonValueStr(PartialResultParams(val))}));
329 ret = json::addValue(ret, json::KV{"identifier", val.identifier});
330 ret = json::addValue(ret, json::KV{"previousResultIds", val.previousResultIds});
331 return json::addScope(ret);
332}
333
334std::string toJsonValueStr(const SignatureHelpParams::SignatureHelpContext::SignatureHelp::SignatureInformation::ParameterInformation &val)
335{
336 std::string ret;
337 ret = json::addValue(ret, json::KV{"label", val.label});
338 ret = json::addValue(ret, json::KV{"documentation", val.documentation});
339 return json::addScope(ret);
340}
341
342std::string toJsonValueStr(const SignatureHelpParams::SignatureHelpContext::SignatureHelp::SignatureInformation &val)
343{
344 std::string ret;
345 ret = json::addValue(ret, json::KV{"label", val.label});
346 ret = json::addValue(ret, json::KV{"parameters", val.parameters});
347 ret = json::addValue(ret, json::KV{"documentation", val.documentation});
348 ret = json::addValue(ret, json::KV{"activeParameter", val.activeParameter});
349 return json::addScope(ret);
350}
351
352std::string toJsonValueStr(const SignatureHelpParams::SignatureHelpContext::SignatureHelp &val)
353{
354 std::string ret;
355 ret = json::addValue(ret, json::KV{"signatures", val.signatures});
356 ret = json::addValue(ret, json::KV{"activeParameter", val.activeParameter});
357 ret = json::addValue(ret, json::KV{"activeSignature", val.activeSignature});
358 return json::addScope(ret);
359}
360
361std::string toJsonValueStr(const SignatureHelpParams::SignatureHelpContext &val)
362{
363 std::string ret;
364 ret = json::addValue(ret, json::KV{"isRetrigger", val.isRetrigger});
365 ret = json::addValue(ret, json::KV{"triggerKind", val.triggerKind});
366 ret = json::addValue(ret, json::KV{"triggerCharacter", val.triggerCharacter});
367 ret = json::addValue(ret, json::KV{"activeSignatureHelp", val.activeSignatureHelp});
368 return json::addScope(ret);
369}
370
371std::string toJsonValueStr(const SignatureHelpParams &val)
372{
373 std::string ret = json::delScope(json::mergeObjs(
374 {toJsonValueStr(TextDocumentPositionParams(val)),
375 toJsonValueStr(WorkDoneProgressParams(val))}));
376 ret = json::addValue(ret, json::KV{"isRetrigger", val.context});
377 return json::addScope(ret);
378}
379
380std::string toJsonValueStr(const CodeActionParams &val)
381{
382 std::string ret = json::delScope(json::mergeObjs(
383 {toJsonValueStr(WorkDoneProgressParams(val)),
384 toJsonValueStr(PartialResultParams(val))}));
385 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
386 ret = json::addValue(ret, json::KV{"range", val.range});
387 ret = json::addValue(ret, json::KV{"context", val.context});
388 return json::addScope(ret);
389}
390
391std::string toJsonValueStr(const CodeAction::Disabled &val)
392{
393 std::string ret;
394 ret = json::addValue(ret, json::KV{"reason", val.reason});
395 return json::addScope(ret);
396}
397
398std::string toJsonValueStr(const CodeAction &val)
399{
400 std::string ret;
401 ret = json::addValue(ret, json::KV{"title", val.title});
402 ret = json::addValue(ret, json::KV{"kind", val.kind});
403 ret = json::addValue(ret, json::KV{"diagnostics", val.diagnostics});
404 ret = json::addValue(ret, json::KV{"isPreferred", val.isPreferred});
405 ret = json::addValue(ret, json::KV{"disabled", val.disabled});
406 ret = json::addValue(ret, json::KV{"edit", val.edit});
407 ret = json::addValue(ret, json::KV{"command", val.command});
408 ret = json::addValue(ret, json::KV{"data", val.data});
409 return json::addScope(ret);
410}
411
412std::string toJsonValueStr(const CodeActionContext &val)
413{
414 std::string ret;
415 ret = json::addValue(ret, json::KV{"only", val.only});
416 ret = json::addValue(ret, json::KV{"diagnostics", val.diagnostics});
417 ret = json::addValue(ret, json::KV{"triggerKind", val.triggerKind});
418 return json::addScope(ret);
419}
420
421std::string toJsonValueStr(const DocumentColorParams &val)
422{
423 std::string ret = json::delScope(json::mergeObjs(
424 {toJsonValueStr(WorkDoneProgressParams(val)),
425 toJsonValueStr(PartialResultParams(val))}));
426 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
427 return json::addScope(ret);
428}
429
430std::string toJsonValueStr(const Color &val)
431{
432 std::string ret;
433 ret = json::addValue(ret, json::KV{"red", val.red});
434 ret = json::addValue(ret, json::KV{"blue", val.blue});
435 ret = json::addValue(ret, json::KV{"green", val.green});
436 ret = json::addValue(ret, json::KV{"alpha", val.alpha});
437 return json::addScope(ret);
438}
439
440std::string toJsonValueStr(const ColorPresentationParams &val)
441{
442 std::string ret = json::delScope(json::mergeObjs(
443 {toJsonValueStr(WorkDoneProgressParams(val)),
444 toJsonValueStr(PartialResultParams(val))}));
445 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
446 ret = json::addValue(ret, json::KV{"color", val.color});
447 ret = json::addValue(ret, json::KV{"range", val.range});
448 return json::addScope(ret);
449}
450
451std::string toJsonValueStr(const FormattingOptions &val)
452{
453 std::string ret;
454 ret = json::addValue(ret, json::KV{"tabSize", val.tabSize});
455 ret = json::addValue(ret, json::KV{"insertSpaces", val.insertSpaces});
456 ret = json::addValue(ret, json::KV{"trimTrailingWhitespace", val.trimTrailingWhitespace});
457 ret = json::addValue(ret, json::KV{"insertFinalNewline", val.insertFinalNewline});
458 ret = json::addValue(ret, json::KV{"trimFinalNewlines", val.trimFinalNewlines});
459 for (auto &&pairVal : val) {
460 if (any_contrast<bool>(pairVal.second)) {
461 ret = json::addValue(ret, json::KV{pairVal.first, std::any_cast<bool>(pairVal.second)});
462 } else if(any_contrast<int>(pairVal.second)) {
463 ret = json::addValue(ret, json::KV{pairVal.first, std::any_cast<int>(pairVal.second)});
464 } else if(any_contrast<std::string>(pairVal.second)) {
465 ret = json::addValue(ret, json::KV{pairVal.first, std::any_cast<std::string>(pairVal.second)});
466 }
467 }
468 return json::addScope(ret);
469}
470
471std::string toJsonValueStr(const DocumentFormattingParams &val)
472{
473 std::string ret = json::delScope(toJsonValueStr(WorkDoneProgressParams(val)));
474 ret = json::addValue(ret, json::KV{"options", val.options});
475 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
476 return json::addScope(ret);
477}
478
479std::string toJsonValueStr(const DocumentRangeFormattingParams &val)
480{
481 std::string ret = json::delScope(toJsonValueStr(WorkDoneProgressParams(val)));
482 ret = json::addValue(ret, json::KV{"options", val.options});
483 ret = json::addValue(ret, json::KV{"range", val.range});
484 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
485 return json::addScope(ret);
486}
487
488std::string toJsonValueStr(const DocumentOnTypeFormattingParams &val)
489{
490 std::string ret;
491 ret = json::addValue(ret, json::KV{"textDocument", val.textDocument});
492 ret = json::addValue(ret, json::KV{"options", val.options});
493 ret = json::addValue(ret, json::KV{"ch", val.ch});
494 ret = json::addValue(ret, json::KV{"position", val.position});
495 return json::addScope(ret);
496}
497
498std::string toJsonValueStr(const RenameParams &val)
499{
500 std::string ret = json::delScope(json::mergeObjs(
501 {toJsonValueStr(TextDocumentPositionParams(val)),
502 toJsonValueStr(WorkDoneProgressParams(val))}));
503 ret = json::addValue(ret, json::KV{"newName", val.newName});
504 return json::addScope(ret);
505}
506
507std::string toJsonValueStr(const PrepareRenameParams &val)
508{
509 std::string ret = json::delScope(json::mergeObjs(
510 {toJsonValueStr(TextDocumentPositionParams(val)),
511 toJsonValueStr(WorkDoneProgressParams(val))}));
512 return json::addScope(ret);
513}
514
515std::string toJsonValueStr(const LinkedEditingRangeParams &val)
516{
517 std::string ret = json::delScope(json::mergeObjs(
518 {toJsonValueStr(TextDocumentPositionParams(val)),
519 toJsonValueStr(WorkDoneProgressParams(val))}));
520 return json::addScope(ret);
521}
522
523} // namespace newlsp
524