@@ -45,6 +45,7 @@ package body LSP.Servers is
4545 (Self : in out Server'Class;
4646 Checker : in out LSP.Lifecycle_Checkers.Lifecycle_Checker;
4747 Map : in out LSP.Known_Requests.Known_Request_Map;
48+ Logger : Server_Message_Visitor_Access;
4849 EOF : in out Boolean);
4950 -- Read data from stdin and create a message if there is enough data.
5051 -- Then put the message into Self.Input_Queue.
@@ -175,6 +176,7 @@ package body LSP.Servers is
175176 (Self : in out Server'Class;
176177 Checker : in out LSP.Lifecycle_Checkers.Lifecycle_Checker;
177178 Map : in out LSP.Known_Requests.Known_Request_Map;
179+ Logger : Server_Message_Visitor_Access;
178180 EOF : in out Boolean)
179181 is
180182 use type Ada.Streams.Stream_Element_Count;
@@ -464,6 +466,10 @@ package body LSP.Servers is
464466 Message := Server_Message_Access (Notification);
465467 end if ;
466468
469+ if Logger /= null then
470+ Message.Visit_Server_Message_Visitor (Logger.all );
471+ end if ;
472+
467473 Checker.Check_Message (Self, Message.all , Ok, Is_Exit_Notification);
468474 -- Check initialization status and send a response if this is a
469475 -- request before initialization.
@@ -567,12 +573,14 @@ package body LSP.Servers is
567573 procedure Run
568574 (Self : in out Server;
569575 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
571579 begin
572580 Self.Tracer := Tracer;
573581 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) ;
576584
577585 -- Wait for stop signal
578586 Self.Stop_Signal.Seize;
@@ -644,8 +652,11 @@ package body LSP.Servers is
644652 Message : Server_Message_Access;
645653 Map : LSP.Known_Requests.Known_Request_Map;
646654 Checker : LSP.Lifecycle_Checkers.Lifecycle_Checker;
655+ Logger : Server_Message_Visitor_Access;
647656 begin
648- accept Start;
657+ accept Start (In_Logger : Server_Message_Visitor_Access) do
658+ Logger := In_Logger;
659+ end Start ;
649660
650661 loop
651662 loop
@@ -665,7 +676,7 @@ package body LSP.Servers is
665676 accept Stop;
666677 exit ;
667678 else
668- Server.Process_One_Message (Checker, Map, EOF);
679+ Server.Process_One_Message (Checker, Map, Logger, EOF);
669680 -- This call can block reading from stream
670681
671682 if EOF then
@@ -697,6 +708,8 @@ package body LSP.Servers is
697708 -- --------------------
698709
699710 task body Output_Task_Type is
711+ Logger : Client_Message_Visitor_Access;
712+
700713 Message : Client_Message_Access;
701714
702715 Output_Queue : Output_Message_Queues.Queue renames Server.Output_Queue;
@@ -733,13 +746,19 @@ package body LSP.Servers is
733746 end Write_JSON_RPC ;
734747
735748 begin
736- accept Start;
749+ accept Start (Out_Logger : Client_Message_Visitor_Access) do
750+ Logger := Out_Logger;
751+ end Start ;
737752
738753 loop
739754 select
740755 -- Process all available outputs before acceptiong Stop
741756 Output_Queue.Dequeue (Message);
742757
758+ if Logger /= null then
759+ Message.Visit_Client_Message_Visitor (Logger.all );
760+ end if ;
761+
743762 declare
744763 Stream : aliased VSS.Text_Streams.Memory_UTF8_Output
745764 .Memory_UTF8_Output_Stream;
0 commit comments