lsp.proto

  1syntax = "proto3";
  2package zed.messages;
  3
  4import "core.proto";
  5import "worktree.proto";
  6import "buffer.proto";
  7
  8message GetDefinition {
  9     uint64 project_id = 1;
 10     uint64 buffer_id = 2;
 11     Anchor position = 3;
 12     repeated VectorClockEntry version = 4;
 13}
 14
 15message GetDefinitionResponse {
 16    repeated LocationLink links = 1;
 17}
 18
 19message GetDeclaration {
 20     uint64 project_id = 1;
 21     uint64 buffer_id = 2;
 22     Anchor position = 3;
 23     repeated VectorClockEntry version = 4;
 24}
 25
 26message GetDeclarationResponse {
 27    repeated LocationLink links = 1;
 28}
 29
 30message GetTypeDefinition {
 31     uint64 project_id = 1;
 32     uint64 buffer_id = 2;
 33     Anchor position = 3;
 34     repeated VectorClockEntry version = 4;
 35 }
 36
 37message GetTypeDefinitionResponse {
 38    repeated LocationLink links = 1;
 39}
 40message GetImplementation {
 41     uint64 project_id = 1;
 42     uint64 buffer_id = 2;
 43     Anchor position = 3;
 44     repeated VectorClockEntry version = 4;
 45 }
 46
 47message GetImplementationResponse {
 48    repeated LocationLink links = 1;
 49}
 50
 51message GetReferences {
 52     uint64 project_id = 1;
 53     uint64 buffer_id = 2;
 54     Anchor position = 3;
 55     repeated VectorClockEntry version = 4;
 56 }
 57
 58message GetReferencesResponse {
 59    repeated Location locations = 1;
 60}
 61
 62message GetDocumentHighlights {
 63     uint64 project_id = 1;
 64     uint64 buffer_id = 2;
 65     Anchor position = 3;
 66     repeated VectorClockEntry version = 4;
 67 }
 68
 69message GetDocumentHighlightsResponse {
 70    repeated DocumentHighlight highlights = 1;
 71}
 72
 73message LocationLink {
 74    optional Location origin = 1;
 75    Location target = 2;
 76}
 77
 78message DocumentHighlight {
 79    Kind kind = 1;
 80    Anchor start = 2;
 81    Anchor end = 3;
 82
 83    enum Kind {
 84        Text = 0;
 85        Read = 1;
 86        Write = 2;
 87    }
 88}
 89
 90message GetProjectSymbols {
 91    uint64 project_id = 1;
 92    string query = 2;
 93}
 94
 95message GetProjectSymbolsResponse {
 96    repeated Symbol symbols = 4;
 97}
 98
 99message Symbol {
100    uint64 source_worktree_id = 1;
101    uint64 worktree_id = 2;
102    string language_server_name = 3;
103    string name = 4;
104    int32 kind = 5;
105    string path = 6;
106    // Cannot use generate anchors for unopened files,
107    // so we are forced to use point coords instead
108    PointUtf16 start = 7;
109    PointUtf16 end = 8;
110    bytes signature = 9;
111    uint64 language_server_id = 10;
112}
113
114message GetDocumentSymbols {
115    uint64 project_id = 1;
116    uint64 buffer_id = 2;
117    repeated VectorClockEntry version = 3;
118}
119
120message GetDocumentSymbolsResponse {
121    repeated DocumentSymbol symbols = 1;
122}
123
124message DocumentSymbol {
125    string name = 1;
126    int32 kind = 2;
127    // Cannot use generate anchors for unopened files,
128    // so we are forced to use point coords instead
129    PointUtf16 start = 3;
130    PointUtf16 end = 4;
131    PointUtf16 selection_start = 5;
132    PointUtf16 selection_end = 6;
133    repeated DocumentSymbol children = 7;
134}
135
136message InlayHints {
137    uint64 project_id = 1;
138    uint64 buffer_id = 2;
139    Anchor start = 3;
140    Anchor end = 4;
141    repeated VectorClockEntry version = 5;
142}
143
144message InlayHintsResponse {
145    repeated InlayHint hints = 1;
146    repeated VectorClockEntry version = 2;
147}
148
149message PointUtf16 {
150    uint32 row = 1;
151    uint32 column = 2;
152}
153
154message LspExtExpandMacro {
155    uint64 project_id = 1;
156    uint64 buffer_id = 2;
157    Anchor position = 3;
158}
159
160message LspExtExpandMacroResponse {
161    string name = 1;
162    string expansion = 2;
163}
164
165message LspExtOpenDocs {
166    uint64 project_id = 1;
167    uint64 buffer_id = 2;
168    Anchor position = 3;
169}
170
171message LspExtOpenDocsResponse {
172    optional string web = 1;
173    optional string local = 2;
174}
175
176message LspExtSwitchSourceHeader {
177    uint64 project_id = 1;
178    uint64 buffer_id = 2;
179}
180
181message LspExtSwitchSourceHeaderResponse {
182    string target_file = 1;
183}
184
185message LspExtGoToParentModule {
186    uint64 project_id = 1;
187    uint64 buffer_id = 2;
188    Anchor position = 3;
189}
190
191message LspExtGoToParentModuleResponse {
192    repeated LocationLink links = 1;
193}
194
195message GetCompletionsResponse {
196    repeated Completion completions = 1;
197    repeated VectorClockEntry version = 2;
198    // `!is_complete`, inverted for a default of `is_complete = true`
199    bool can_reuse = 3;
200}
201
202message ApplyCompletionAdditionalEdits {
203    uint64 project_id = 1;
204    uint64 buffer_id = 2;
205    Completion completion = 3;
206}
207
208message ApplyCompletionAdditionalEditsResponse {
209    Transaction transaction = 1;
210}
211
212message Completion {
213    Anchor old_replace_start = 1;
214    Anchor old_replace_end = 2;
215    string new_text = 3;
216    uint64 server_id = 4;
217    bytes lsp_completion = 5;
218    bool resolved = 6;
219    Source source = 7;
220    optional bytes lsp_defaults = 8;
221    optional Anchor buffer_word_start = 9;
222    optional Anchor buffer_word_end = 10;
223    Anchor old_insert_start = 11;
224    Anchor old_insert_end = 12;
225    optional string sort_text = 13;
226
227    enum Source {
228        Lsp = 0;
229        Custom = 1;
230        BufferWord = 2;
231        Dap = 3;
232    }
233}
234
235message GetCodeActions {
236    uint64 project_id = 1;
237    uint64 buffer_id = 2;
238    Anchor start = 3;
239    Anchor end = 4;
240    repeated VectorClockEntry version = 5;
241}
242
243message GetCodeActionsResponse {
244    repeated CodeAction actions = 1;
245    repeated VectorClockEntry version = 2;
246}
247
248message GetSignatureHelp {
249    uint64 project_id = 1;
250    uint64 buffer_id = 2;
251    Anchor position = 3;
252    repeated VectorClockEntry version = 4;
253}
254
255message GetSignatureHelpResponse {
256    optional SignatureHelp signature_help = 1;
257}
258
259message SignatureHelp {
260    repeated SignatureInformation signatures = 1;
261    optional uint32 active_signature = 2;
262    optional uint32 active_parameter = 3;
263}
264
265message SignatureInformation {
266    string label = 1;
267    optional Documentation documentation = 2;
268    repeated ParameterInformation parameters = 3;
269    optional uint32 active_parameter = 4;
270}
271
272message Documentation {
273    oneof content {
274        string value = 1;
275        MarkupContent markup_content = 2;
276    }
277}
278
279enum MarkupKind {
280    PlainText = 0;
281    Markdown = 1;
282}
283
284message ParameterInformation {
285    oneof label {
286        string simple = 1;
287        LabelOffsets label_offsets = 2;
288    }
289    optional Documentation documentation = 3;
290}
291
292message LabelOffsets {
293    uint32 start = 1;
294    uint32 end = 2;
295}
296
297message GetHover {
298    uint64 project_id = 1;
299    uint64 buffer_id = 2;
300    Anchor position = 3;
301    repeated VectorClockEntry version = 5;
302}
303
304message GetHoverResponse {
305    optional Anchor start = 1;
306    optional Anchor end = 2;
307    repeated HoverBlock contents = 3;
308}
309
310message HoverBlock {
311    string text = 1;
312    optional string language = 2;
313    bool is_markdown = 3;
314}
315
316message ApplyCodeAction {
317    uint64 project_id = 1;
318    uint64 buffer_id = 2;
319    CodeAction action = 3;
320}
321
322message ApplyCodeActionResponse {
323    ProjectTransaction transaction = 1;
324}
325
326message PrepareRename {
327    uint64 project_id = 1;
328    uint64 buffer_id = 2;
329    Anchor position = 3;
330    repeated VectorClockEntry version = 4;
331}
332
333message PrepareRenameResponse {
334    bool can_rename = 1;
335    Anchor start = 2;
336    Anchor end = 3;
337    repeated VectorClockEntry version = 4;
338    bool only_unprepared_rename_supported = 5;
339}
340
341message PerformRename {
342    uint64 project_id = 1;
343    uint64 buffer_id = 2;
344    Anchor position = 3;
345    string new_name = 4;
346    repeated VectorClockEntry version = 5;
347}
348
349message OnTypeFormatting {
350    uint64 project_id = 1;
351    uint64 buffer_id = 2;
352    Anchor position = 3;
353    string trigger = 4;
354    repeated VectorClockEntry version = 5;
355}
356
357message OnTypeFormattingResponse {
358    Transaction transaction = 1;
359}
360
361
362message LinkedEditingRange {
363    uint64 project_id = 1;
364    uint64 buffer_id = 2;
365    Anchor position = 3;
366    repeated VectorClockEntry version = 4;
367}
368
369message LinkedEditingRangeResponse {
370    repeated AnchorRange items = 1;
371    repeated VectorClockEntry version = 4;
372}
373
374message InlayHint {
375    Anchor position = 1;
376    InlayHintLabel label = 2;
377    optional string kind = 3;
378    bool padding_left = 4;
379    bool padding_right = 5;
380    InlayHintTooltip tooltip = 6;
381    ResolveState resolve_state = 7;
382}
383
384message InlayHintLabel {
385    oneof label {
386        string value = 1;
387        InlayHintLabelParts label_parts = 2;
388    }
389}
390
391message InlayHintLabelParts {
392    repeated InlayHintLabelPart parts = 1;
393}
394
395message InlayHintLabelPart {
396    string value = 1;
397    InlayHintLabelPartTooltip tooltip = 2;
398    optional string location_url = 3;
399    PointUtf16 location_range_start = 4;
400    PointUtf16 location_range_end = 5;
401    optional uint64 language_server_id = 6;
402}
403
404message InlayHintTooltip {
405    oneof content {
406        string value = 1;
407        MarkupContent markup_content = 2;
408    }
409}
410
411message InlayHintLabelPartTooltip {
412    oneof content {
413        string value = 1;
414        MarkupContent markup_content = 2;
415    }
416}
417
418message ResolveState {
419    State state = 1;
420    LspResolveState lsp_resolve_state = 2;
421
422    enum State {
423        Resolved = 0;
424        CanResolve = 1;
425        Resolving = 2;
426    }
427
428    message LspResolveState {
429        optional string value = 1;
430        uint64 server_id = 2;
431    }
432}
433
434// This type is used to resolve more than just
435// the documentation, but for backwards-compatibility
436// reasons we can't rename the type.
437message ResolveCompletionDocumentation {
438    uint64 project_id = 1;
439    uint64 language_server_id = 2;
440    bytes lsp_completion = 3;
441    uint64 buffer_id = 4;
442}
443
444message ResolveCompletionDocumentationResponse {
445    string documentation = 1;
446    bool documentation_is_markdown = 2;
447    Anchor old_replace_start = 3;
448    Anchor old_replace_end = 4;
449    string new_text = 5;
450    bytes lsp_completion = 6;
451    Anchor old_insert_start = 7;
452    Anchor old_insert_end = 8;
453}
454
455message ResolveInlayHint {
456    uint64 project_id = 1;
457    uint64 buffer_id = 2;
458    uint64 language_server_id = 3;
459    InlayHint hint = 4;
460}
461
462message ResolveInlayHintResponse {
463    InlayHint hint = 1;
464}
465
466message RefreshInlayHints {
467    uint64 project_id = 1;
468    uint64 server_id = 2;
469    optional uint64 request_id = 3;
470}
471
472message CodeLens {
473    bytes lsp_lens = 1;
474}
475
476message GetCodeLens {
477    uint64 project_id = 1;
478    uint64 buffer_id = 2;
479    repeated VectorClockEntry version = 3;
480}
481
482message GetCodeLensResponse {
483    repeated CodeAction lens_actions = 1;
484    repeated VectorClockEntry version = 2;
485}
486
487message RefreshCodeLens {
488    uint64 project_id = 1;
489}
490
491message MarkupContent {
492    bool is_markdown = 1;
493    string value = 2;
494}
495
496message PerformRenameResponse {
497    ProjectTransaction transaction = 2;
498}
499
500message CodeAction {
501    uint64 server_id = 1;
502    Anchor start = 2;
503    Anchor end = 3;
504    bytes lsp_action = 4;
505    Kind kind = 5;
506    bool resolved = 6;
507    enum Kind {
508        Action = 0;
509        Command = 1;
510        CodeLens = 2;
511    }
512}
513
514message LanguageServer {
515    uint64 id = 1;
516    string name = 2;
517    optional uint64 worktree_id = 3;
518}
519
520message StartLanguageServer {
521    uint64 project_id = 1;
522    LanguageServer server = 2;
523    string capabilities = 3;
524}
525
526message UpdateDiagnosticSummary {
527    uint64 project_id = 1;
528    uint64 worktree_id = 2;
529    DiagnosticSummary summary = 3;
530    repeated DiagnosticSummary more_summaries = 4;
531}
532
533message DiagnosticSummary {
534    string path = 1;
535    uint64 language_server_id = 2;
536    uint32 error_count = 3;
537    uint32 warning_count = 4;
538}
539
540message UpdateLanguageServer {
541    uint64 project_id = 1;
542    uint64 language_server_id = 2;
543    optional string server_name = 8;
544    oneof variant {
545        LspWorkStart work_start = 3;
546        LspWorkProgress work_progress = 4;
547        LspWorkEnd work_end = 5;
548        LspDiskBasedDiagnosticsUpdating disk_based_diagnostics_updating = 6;
549        LspDiskBasedDiagnosticsUpdated disk_based_diagnostics_updated = 7;
550        StatusUpdate status_update = 9;
551        RegisteredForBuffer registered_for_buffer = 10;
552        ServerMetadataUpdated metadata_updated = 11;
553    }
554}
555
556message ProgressToken {
557    oneof value {
558        int32 number = 1;
559        string string = 2;
560    }
561}
562
563message LspWorkStart {
564    reserved 1;
565    optional string title = 4;
566    optional string message = 2;
567    optional uint32 percentage = 3;
568    optional bool is_cancellable = 5;
569    ProgressToken token = 6;
570}
571
572message LspWorkProgress {
573    reserved 1;
574    optional string message = 2;
575    optional uint32 percentage = 3;
576    optional bool is_cancellable = 4;
577    ProgressToken token = 5;
578}
579
580message LspWorkEnd {
581    reserved 1;
582    ProgressToken token = 2;
583}
584
585message LspDiskBasedDiagnosticsUpdating {}
586
587message LspDiskBasedDiagnosticsUpdated {}
588
589message StatusUpdate {
590    optional string message = 1;
591    oneof status {
592        ServerBinaryStatus binary = 2;
593        ServerHealth health = 3;
594    }
595}
596
597enum ServerHealth {
598    OK = 0;
599    WARNING = 1;
600    ERROR = 2;
601}
602
603enum ServerBinaryStatus {
604    NONE = 0;
605    CHECKING_FOR_UPDATE = 1;
606    DOWNLOADING = 2;
607    STARTING = 3;
608    STOPPING = 4;
609    STOPPED = 5;
610    FAILED = 6;
611}
612
613message RegisteredForBuffer {
614    string buffer_abs_path = 1;
615    uint64 buffer_id = 2;
616}
617
618message LanguageServerBinaryInfo {
619    string path = 1;
620    repeated string arguments = 2;
621}
622
623message ServerMetadataUpdated {
624    optional string capabilities = 1;
625    optional LanguageServerBinaryInfo binary = 2;
626    optional string configuration = 3;
627    repeated string workspace_folders = 4;
628}
629
630message LanguageServerLog {
631    uint64 project_id = 1;
632    uint64 language_server_id = 2;
633    string message = 3;
634    oneof log_type {
635        LogMessage log = 4;
636        TraceMessage trace = 5;
637        RpcMessage rpc = 6;
638    }
639}
640
641message LogMessage {
642    LogLevel level = 1;
643
644    enum LogLevel {
645        LOG = 0;
646        INFO = 1;
647        WARNING = 2;
648        ERROR = 3;
649    }
650}
651
652message TraceMessage {
653    optional string verbose_info = 1;
654}
655
656message RpcMessage {
657    Kind kind = 1;
658
659    enum Kind {
660        RECEIVED = 0;
661        SENT = 1;
662    }
663}
664
665message LspLogTrace {
666    optional string message = 1;
667}
668
669message ApplyCodeActionKind {
670    uint64 project_id = 1;
671    string kind = 2;
672    repeated uint64 buffer_ids = 3;
673}
674
675message ApplyCodeActionKindResponse {
676    ProjectTransaction transaction = 1;
677}
678
679message RegisterBufferWithLanguageServers {
680    uint64 project_id = 1;
681    uint64 buffer_id = 2;
682    repeated LanguageServerSelector only_servers = 3;
683}
684
685enum FormatTrigger {
686    Save = 0;
687    Manual = 1;
688}
689
690message OpenBufferForSymbol {
691    uint64 project_id = 1;
692    Symbol symbol = 2;
693}
694
695message OpenBufferForSymbolResponse {
696    uint64 buffer_id = 1;
697}
698
699message FormatBuffers {
700    uint64 project_id = 1;
701    FormatTrigger trigger = 2;
702    repeated uint64 buffer_ids = 3;
703}
704
705message FormatBuffersResponse {
706    ProjectTransaction transaction = 1;
707}
708
709message GetCompletions {
710    uint64 project_id = 1;
711    uint64 buffer_id = 2;
712    Anchor position = 3;
713    repeated VectorClockEntry version = 4;
714    optional uint64 server_id = 5;
715}
716
717message CancelLanguageServerWork {
718    uint64 project_id = 1;
719
720    oneof work {
721        Buffers buffers = 2;
722        LanguageServerWork language_server_work = 3;
723    }
724
725    message Buffers {
726        repeated uint64 buffer_ids = 2;
727    }
728
729    message LanguageServerWork {
730        uint64 language_server_id = 1;
731        reserved 2;
732        optional ProgressToken token = 3;
733    }
734}
735
736message LanguageServerPromptRequest {
737    uint64 project_id = 1;
738
739    oneof level {
740        Info info = 2;
741        Warning warning = 3;
742        Critical critical = 4;
743    }
744
745    message Info {}
746    message Warning {}
747    message Critical {}
748
749    string message = 5;
750    repeated string actions = 6;
751    string lsp_name = 7;
752}
753
754message LanguageServerPromptResponse {
755    optional uint64 action_response = 1;
756}
757
758message GetDocumentColor {
759    uint64 project_id = 1;
760    uint64 buffer_id = 2;
761    repeated VectorClockEntry version = 3;
762
763}
764
765message GetDocumentColorResponse {
766    repeated ColorInformation colors = 1;
767    repeated VectorClockEntry version = 2;
768
769}
770
771message ColorInformation {
772    PointUtf16 lsp_range_start = 1;
773    PointUtf16 lsp_range_end = 2;
774    float red = 3;
775    float green = 4;
776    float blue = 5;
777    float alpha = 6;
778}
779
780message GetColorPresentation {
781    uint64 project_id = 1;
782    uint64 buffer_id = 2;
783    ColorInformation color = 3;
784    uint64 server_id = 4;
785}
786
787message GetColorPresentationResponse {
788    repeated ColorPresentation presentations = 1;
789}
790
791message ColorPresentation {
792    string label = 1;
793    optional TextEdit text_edit = 2;
794    repeated TextEdit additional_text_edits = 3;
795}
796
797message TextEdit {
798    string new_text = 1;
799    PointUtf16 lsp_range_start = 2;
800    PointUtf16 lsp_range_end = 3;
801}
802
803message LspQuery {
804    uint64 project_id = 1;
805    uint64 lsp_request_id = 2;
806    optional uint64 server_id = 15;
807    oneof request {
808        GetReferences get_references = 3;
809        GetDocumentColor get_document_color = 4;
810        GetHover get_hover = 5;
811        GetCodeActions get_code_actions = 6;
812        GetSignatureHelp get_signature_help = 7;
813        GetCodeLens get_code_lens = 8;
814        GetDocumentDiagnostics get_document_diagnostics = 9;
815        GetDefinition get_definition = 10;
816        GetDeclaration get_declaration = 11;
817        GetTypeDefinition get_type_definition = 12;
818        GetImplementation get_implementation = 13;
819        InlayHints inlay_hints = 14;
820    }
821}
822
823message LspQueryResponse {
824    uint64 project_id = 1;
825    uint64 lsp_request_id = 2;
826    repeated LspResponse responses = 3;
827}
828
829message LspResponse {
830    oneof response {
831        GetHoverResponse get_hover_response = 1;
832        GetCodeActionsResponse get_code_actions_response = 2;
833        GetSignatureHelpResponse get_signature_help_response = 3;
834        GetCodeLensResponse get_code_lens_response = 4;
835        GetDocumentDiagnosticsResponse get_document_diagnostics_response = 5;
836        GetDocumentColorResponse get_document_color_response = 6;
837        GetDefinitionResponse get_definition_response = 8;
838        GetDeclarationResponse get_declaration_response = 9;
839        GetTypeDefinitionResponse get_type_definition_response = 10;
840        GetImplementationResponse get_implementation_response = 11;
841        GetReferencesResponse get_references_response = 12;
842        InlayHintsResponse inlay_hints_response = 13;
843    }
844    uint64 server_id = 7;
845}
846
847message AllLanguageServers {}
848
849message LanguageServerSelector {
850    oneof selector {
851        uint64 server_id = 1;
852        string name = 2;
853    }
854}
855
856message RestartLanguageServers {
857    uint64 project_id = 1;
858    repeated uint64 buffer_ids = 2;
859    repeated LanguageServerSelector only_servers = 3;
860    bool all = 4;
861}
862
863message StopLanguageServers {
864    uint64 project_id = 1;
865    repeated uint64 buffer_ids = 2;
866    repeated LanguageServerSelector also_servers = 3;
867    bool all = 4;
868}
869
870message LspExtRunnables {
871    uint64 project_id = 1;
872    uint64 buffer_id = 2;
873    optional Anchor position = 3;
874}
875
876message LspExtRunnablesResponse {
877    repeated LspRunnable runnables = 1;
878}
879
880message LspRunnable {
881    bytes task_template = 1;
882    optional LocationLink location = 2;
883}
884
885message LspExtCancelFlycheck {
886    uint64 project_id = 1;
887    uint64 language_server_id = 2;
888}
889
890message LspExtRunFlycheck {
891    uint64 project_id = 1;
892    optional uint64 buffer_id = 2;
893    uint64 language_server_id = 3;
894    bool current_file_only = 4;
895}
896
897message LspExtClearFlycheck {
898    uint64 project_id = 1;
899    uint64 language_server_id = 2;
900}
901
902message LspDiagnosticRelatedInformation {
903    optional string location_url = 1;
904    PointUtf16 location_range_start = 2;
905    PointUtf16 location_range_end = 3;
906    string message = 4;
907}
908
909enum LspDiagnosticTag {
910    None = 0;
911    Unnecessary = 1;
912    Deprecated = 2;
913}
914
915message LspDiagnostic {
916    PointUtf16 start = 1;
917    PointUtf16 end = 2;
918    Severity severity = 3;
919    optional string code = 4;
920    optional string code_description = 5;
921    optional string source = 6;
922    string message = 7;
923    repeated LspDiagnosticRelatedInformation related_information = 8;
924    repeated LspDiagnosticTag tags = 9;
925    optional string data = 10;
926
927    enum Severity {
928        None = 0;
929        Error = 1;
930        Warning = 2;
931        Information = 3;
932        Hint = 4;
933    }
934}
935
936message GetDocumentDiagnostics {
937    uint64 project_id = 1;
938    uint64 buffer_id = 2;
939    repeated VectorClockEntry version = 3;
940}
941
942message GetDocumentDiagnosticsResponse {
943    repeated PulledDiagnostics pulled_diagnostics = 1;
944}
945
946message PulledDiagnostics {
947    uint64 server_id = 1;
948    string uri = 2;
949    optional string result_id = 3;
950    bool changed = 4;
951    repeated LspDiagnostic diagnostics = 5;
952    optional string registration_id = 6;
953}
954
955message PullWorkspaceDiagnostics {
956    uint64 project_id = 1;
957    uint64 server_id = 2;
958}
959
960message ToggleLspLogs {
961    uint64 project_id = 1;
962    LogType log_type = 2;
963    uint64 server_id = 3;
964    bool enabled = 4;
965
966    enum LogType {
967        LOG = 0;
968        TRACE = 1;
969        RPC = 2;
970    }
971}