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 }