@@ -45,6 +45,7 @@ package body LSP.Servers is
45
45
(Self : in out Server'Class;
46
46
Checker : in out LSP.Lifecycle_Checkers.Lifecycle_Checker;
47
47
Map : in out LSP.Known_Requests.Known_Request_Map;
48
+ Logger : Server_Message_Visitor_Access;
48
49
EOF : in out Boolean);
49
50
-- Read data from stdin and create a message if there is enough data.
50
51
-- Then put the message into Self.Input_Queue.
@@ -175,6 +176,7 @@ package body LSP.Servers is
175
176
(Self : in out Server'Class;
176
177
Checker : in out LSP.Lifecycle_Checkers.Lifecycle_Checker;
177
178
Map : in out LSP.Known_Requests.Known_Request_Map;
179
+ Logger : Server_Message_Visitor_Access;
178
180
EOF : in out Boolean)
179
181
is
180
182
use type Ada.Streams.Stream_Element_Count;
@@ -464,6 +466,10 @@ package body LSP.Servers is
464
466
Message := Server_Message_Access (Notification);
465
467
end if ;
466
468
469
+ if Logger /= null then
470
+ Message.Visit_Server_Message_Visitor (Logger.all );
471
+ end if ;
472
+
467
473
Checker.Check_Message (Self, Message.all , Ok, Is_Exit_Notification);
468
474
-- Check initialization status and send a response if this is a
469
475
-- request before initialization.
@@ -567,12 +573,14 @@ package body LSP.Servers is
567
573
procedure Run
568
574
(Self : in out Server;
569
575
Handler : not null Server_Message_Visitor_Access;
570
- Tracer : not null LSP.Tracers.Tracer_Access) is
576
+ Tracer : not null LSP.Tracers.Tracer_Access;
577
+ In_Logger : Server_Message_Visitor_Access;
578
+ Out_Logger : Client_Message_Visitor_Access) is
571
579
begin
572
580
Self.Tracer := Tracer;
573
581
Self.Processing_Task.Start (Handler);
574
- Self.Output_Task.Start;
575
- Self.Input_Task.Start;
582
+ Self.Output_Task.Start (Out_Logger) ;
583
+ Self.Input_Task.Start (In_Logger) ;
576
584
577
585
-- Wait for stop signal
578
586
Self.Stop_Signal.Seize;
@@ -644,8 +652,11 @@ package body LSP.Servers is
644
652
Message : Server_Message_Access;
645
653
Map : LSP.Known_Requests.Known_Request_Map;
646
654
Checker : LSP.Lifecycle_Checkers.Lifecycle_Checker;
655
+ Logger : Server_Message_Visitor_Access;
647
656
begin
648
- accept Start;
657
+ accept Start (In_Logger : Server_Message_Visitor_Access) do
658
+ Logger := In_Logger;
659
+ end Start ;
649
660
650
661
loop
651
662
loop
@@ -665,7 +676,7 @@ package body LSP.Servers is
665
676
accept Stop;
666
677
exit ;
667
678
else
668
- Server.Process_One_Message (Checker, Map, EOF);
679
+ Server.Process_One_Message (Checker, Map, Logger, EOF);
669
680
-- This call can block reading from stream
670
681
671
682
if EOF then
@@ -697,6 +708,8 @@ package body LSP.Servers is
697
708
-- --------------------
698
709
699
710
task body Output_Task_Type is
711
+ Logger : Client_Message_Visitor_Access;
712
+
700
713
Message : Client_Message_Access;
701
714
702
715
Output_Queue : Output_Message_Queues.Queue renames Server.Output_Queue;
@@ -733,13 +746,19 @@ package body LSP.Servers is
733
746
end Write_JSON_RPC ;
734
747
735
748
begin
736
- accept Start;
749
+ accept Start (Out_Logger : Client_Message_Visitor_Access) do
750
+ Logger := Out_Logger;
751
+ end Start ;
737
752
738
753
loop
739
754
select
740
755
-- Process all available outputs before acceptiong Stop
741
756
Output_Queue.Dequeue (Message);
742
757
758
+ if Logger /= null then
759
+ Message.Visit_Client_Message_Visitor (Logger.all );
760
+ end if ;
761
+
743
762
declare
744
763
Stream : aliased VSS.Text_Streams.Memory_UTF8_Output
745
764
.Memory_UTF8_Output_Stream;
0 commit comments