1 module dls.protocol.definitions;
2 
3 public import std.json : JSONValue;
4 public import std.typecons : Nullable, nullable;
5 
6 alias DocumentUri = string;
7 
8 class Position
9 {
10     size_t line;
11     size_t character;
12 }
13 
14 class Range
15 {
16     Position start = new Position();
17     Position end = new Position();
18 }
19 
20 class Location
21 {
22     DocumentUri uri;
23     Range range = new Range();
24 }
25 
26 class Diagnostic
27 {
28     Range range = new Range();
29     Nullable!DiagnosticSeverity severity;
30     Nullable!JSONValue code;
31     Nullable!string source;
32     string message;
33 }
34 
35 enum DiagnosticSeverity
36 {
37     error = 1,
38     warning = 2,
39     information = 3,
40     hint = 4
41 }
42 
43 class Command
44 {
45     string title;
46     string command;
47     Nullable!(JSONValue[]) arguments;
48 }
49 
50 class TextEdit
51 {
52     Range range = new Range();
53     string newText;
54 }
55 
56 class TextDocumentEdit
57 {
58     VersionedTextDocumentIdentifier textDocument = new VersionedTextDocumentIdentifier();
59     TextEdit[] edits;
60 }
61 
62 class WorkspaceEdit
63 {
64     Nullable!(TextEdit[string]) changes;
65     Nullable!(TextDocumentEdit[]) documentChanges;
66 }
67 
68 class TextDocumentIdentifier
69 {
70     DocumentUri uri;
71 }
72 
73 class TextDocumentItem
74 {
75     DocumentUri uri;
76     string languageId;
77     ulong version_;
78     string text;
79 }
80 
81 class VersionedTextDocumentIdentifier : TextDocumentIdentifier
82 {
83     ulong version_;
84 }
85 
86 class TextDocumentPositionParams
87 {
88     TextDocumentIdentifier textDocument = new TextDocumentIdentifier();
89     Position position = new Position();
90 }
91 
92 class DocumentFilter
93 {
94     Nullable!string languageId;
95     Nullable!string scheme;
96     Nullable!string pattern;
97 }
98 
99 alias DocumentSelector = DocumentFilter[];
100 
101 enum MarkupKind
102 {
103     plaintext = "plaintext",
104     markdown = "markdown"
105 }
106 
107 class MarkupContent
108 {
109     MarkupContent content;
110     string value;
111 }