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 ServerMetadataUpdated {
619    optional string capabilities = 1;
620}
621
622message LanguageServerLog {
623    uint64 project_id = 1;
624    uint64 language_server_id = 2;
625    string message = 3;
626    oneof log_type {
627        LogMessage log = 4;
628        TraceMessage trace = 5;
629        RpcMessage rpc = 6;
630    }
631}
632
633message LogMessage {
634    LogLevel level = 1;
635
636    enum LogLevel {
637        LOG = 0;
638        INFO = 1;
639        WARNING = 2;
640        ERROR = 3;
641    }
642}
643
644message TraceMessage {
645    optional string verbose_info = 1;
646}
647
648message RpcMessage {
649    Kind kind = 1;
650
651    enum Kind {
652        RECEIVED = 0;
653        SENT = 1;
654    }
655}
656
657message LspLogTrace {
658    optional string message = 1;
659}
660
661message ApplyCodeActionKind {
662    uint64 project_id = 1;
663    string kind = 2;
664    repeated uint64 buffer_ids = 3;
665}
666
667message ApplyCodeActionKindResponse {
668    ProjectTransaction transaction = 1;
669}
670
671message RegisterBufferWithLanguageServers {
672    uint64 project_id = 1;
673    uint64 buffer_id = 2;
674    repeated LanguageServerSelector only_servers = 3;
675}
676
677enum FormatTrigger {
678    Save = 0;
679    Manual = 1;
680}
681
682message OpenBufferForSymbol {
683    uint64 project_id = 1;
684    Symbol symbol = 2;
685}
686
687message OpenBufferForSymbolResponse {
688    uint64 buffer_id = 1;
689}
690
691message FormatBuffers {
692    uint64 project_id = 1;
693    FormatTrigger trigger = 2;
694    repeated uint64 buffer_ids = 3;
695}
696
697message FormatBuffersResponse {
698    ProjectTransaction transaction = 1;
699}
700
701message GetCompletions {
702    uint64 project_id = 1;
703    uint64 buffer_id = 2;
704    Anchor position = 3;
705    repeated VectorClockEntry version = 4;
706}
707
708message CancelLanguageServerWork {
709    uint64 project_id = 1;
710
711    oneof work {
712        Buffers buffers = 2;
713        LanguageServerWork language_server_work = 3;
714    }
715
716    message Buffers {
717        repeated uint64 buffer_ids = 2;
718    }
719
720    message LanguageServerWork {
721        uint64 language_server_id = 1;
722        reserved 2;
723        optional ProgressToken token = 3;
724    }
725}
726
727message LanguageServerPromptRequest {
728    uint64 project_id = 1;
729
730    oneof level {
731        Info info = 2;
732        Warning warning = 3;
733        Critical critical = 4;
734    }
735
736    message Info {}
737    message Warning {}
738    message Critical {}
739
740    string message = 5;
741    repeated string actions = 6;
742    string lsp_name = 7;
743}
744
745message LanguageServerPromptResponse {
746    optional uint64 action_response = 1;
747}
748
749message GetDocumentColor {
750    uint64 project_id = 1;
751    uint64 buffer_id = 2;
752    repeated VectorClockEntry version = 3;
753
754}
755
756message GetDocumentColorResponse {
757    repeated ColorInformation colors = 1;
758    repeated VectorClockEntry version = 2;
759
760}
761
762message ColorInformation {
763    PointUtf16 lsp_range_start = 1;
764    PointUtf16 lsp_range_end = 2;
765    float red = 3;
766    float green = 4;
767    float blue = 5;
768    float alpha = 6;
769}
770
771message GetColorPresentation {
772    uint64 project_id = 1;
773    uint64 buffer_id = 2;
774    ColorInformation color = 3;
775    uint64 server_id = 4;
776}
777
778message GetColorPresentationResponse {
779    repeated ColorPresentation presentations = 1;
780}
781
782message ColorPresentation {
783    string label = 1;
784    optional TextEdit text_edit = 2;
785    repeated TextEdit additional_text_edits = 3;
786}
787
788message TextEdit {
789    string new_text = 1;
790    PointUtf16 lsp_range_start = 2;
791    PointUtf16 lsp_range_end = 3;
792}
793
794message LspQuery {
795    uint64 project_id = 1;
796    uint64 lsp_request_id = 2;
797    optional uint64 server_id = 15;
798    oneof request {
799        GetReferences get_references = 3;
800        GetDocumentColor get_document_color = 4;
801        GetHover get_hover = 5;
802        GetCodeActions get_code_actions = 6;
803        GetSignatureHelp get_signature_help = 7;
804        GetCodeLens get_code_lens = 8;
805        GetDocumentDiagnostics get_document_diagnostics = 9;
806        GetDefinition get_definition = 10;
807        GetDeclaration get_declaration = 11;
808        GetTypeDefinition get_type_definition = 12;
809        GetImplementation get_implementation = 13;
810        InlayHints inlay_hints = 14;
811    }
812}
813
814message LspQueryResponse {
815    uint64 project_id = 1;
816    uint64 lsp_request_id = 2;
817    repeated LspResponse responses = 3;
818}
819
820message LspResponse {
821    oneof response {
822        GetHoverResponse get_hover_response = 1;
823        GetCodeActionsResponse get_code_actions_response = 2;
824        GetSignatureHelpResponse get_signature_help_response = 3;
825        GetCodeLensResponse get_code_lens_response = 4;
826        GetDocumentDiagnosticsResponse get_document_diagnostics_response = 5;
827        GetDocumentColorResponse get_document_color_response = 6;
828        GetDefinitionResponse get_definition_response = 8;
829        GetDeclarationResponse get_declaration_response = 9;
830        GetTypeDefinitionResponse get_type_definition_response = 10;
831        GetImplementationResponse get_implementation_response = 11;
832        GetReferencesResponse get_references_response = 12;
833        InlayHintsResponse inlay_hints_response = 13;
834    }
835    uint64 server_id = 7;
836}
837
838message AllLanguageServers {}
839
840message LanguageServerSelector {
841    oneof selector {
842        uint64 server_id = 1;
843        string name = 2;
844    }
845}
846
847message RestartLanguageServers {
848    uint64 project_id = 1;
849    repeated uint64 buffer_ids = 2;
850    repeated LanguageServerSelector only_servers = 3;
851    bool all = 4;
852}
853
854message StopLanguageServers {
855    uint64 project_id = 1;
856    repeated uint64 buffer_ids = 2;
857    repeated LanguageServerSelector also_servers = 3;
858    bool all = 4;
859}
860
861message LspExtRunnables {
862    uint64 project_id = 1;
863    uint64 buffer_id = 2;
864    optional Anchor position = 3;
865}
866
867message LspExtRunnablesResponse {
868    repeated LspRunnable runnables = 1;
869}
870
871message LspRunnable {
872    bytes task_template = 1;
873    optional LocationLink location = 2;
874}
875
876message LspExtCancelFlycheck {
877    uint64 project_id = 1;
878    uint64 language_server_id = 2;
879}
880
881message LspExtRunFlycheck {
882    uint64 project_id = 1;
883    optional uint64 buffer_id = 2;
884    uint64 language_server_id = 3;
885    bool current_file_only = 4;
886}
887
888message LspExtClearFlycheck {
889    uint64 project_id = 1;
890    uint64 language_server_id = 2;
891}
892
893message LspDiagnosticRelatedInformation {
894    optional string location_url = 1;
895    PointUtf16 location_range_start = 2;
896    PointUtf16 location_range_end = 3;
897    string message = 4;
898}
899
900enum LspDiagnosticTag {
901    None = 0;
902    Unnecessary = 1;
903    Deprecated = 2;
904}
905
906message LspDiagnostic {
907    PointUtf16 start = 1;
908    PointUtf16 end = 2;
909    Severity severity = 3;
910    optional string code = 4;
911    optional string code_description = 5;
912    optional string source = 6;
913    string message = 7;
914    repeated LspDiagnosticRelatedInformation related_information = 8;
915    repeated LspDiagnosticTag tags = 9;
916    optional string data = 10;
917
918    enum Severity {
919        None = 0;
920        Error = 1;
921        Warning = 2;
922        Information = 3;
923        Hint = 4;
924    }
925}
926
927message GetDocumentDiagnostics {
928    uint64 project_id = 1;
929    uint64 buffer_id = 2;
930    repeated VectorClockEntry version = 3;
931}
932
933message GetDocumentDiagnosticsResponse {
934    repeated PulledDiagnostics pulled_diagnostics = 1;
935}
936
937message PulledDiagnostics {
938    uint64 server_id = 1;
939    string uri = 2;
940    optional string result_id = 3;
941    bool changed = 4;
942    repeated LspDiagnostic diagnostics = 5;
943}
944
945message PullWorkspaceDiagnostics {
946    uint64 project_id = 1;
947    uint64 server_id = 2;
948}
949
950message ToggleLspLogs {
951    uint64 project_id = 1;
952    LogType log_type = 2;
953    uint64 server_id = 3;
954    bool enabled = 4;
955
956    enum LogType {
957        LOG = 0;
958        TRACE = 1;
959        RPC = 2;
960    }
961}