Skip to content

Commit cb07aee

Browse files
committed
Use in/out loggers to dump messages.
Refs #1170
1 parent e709d67 commit cb07aee

File tree

3 files changed

+48
-12
lines changed

3 files changed

+48
-12
lines changed

source/ada/lsp-ada_driver.adb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,11 +311,20 @@ begin
311311

312312
begin
313313
if VSS.Command_Line.Is_Specified (Language_GPR_Option) then
314-
Server.Run (GPR_Handler'Unchecked_Access, Tracer'Unchecked_Access);
314+
Server.Run
315+
(GPR_Handler'Unchecked_Access,
316+
Tracer'Unchecked_Access,
317+
In_Logger => null,
318+
Out_Logger => null);
315319

316320
else
317321
Register_Commands;
318-
Server.Run (Ada_Handler'Unchecked_Access, Tracer'Unchecked_Access);
322+
323+
Server.Run
324+
(Ada_Handler'Unchecked_Access,
325+
Tracer'Unchecked_Access,
326+
In_Logger => null,
327+
Out_Logger => null);
319328
end if;
320329
exception
321330
when E : others =>

source/server/lsp-servers.adb

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

source/server/lsp-servers.ads

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
with Ada.Streams;
2424

2525
with LSP.Client_Message_Receivers;
26+
with LSP.Client_Message_Visitors;
2627
with LSP.Server_Message_Visitors;
2728
with LSP.Structures;
2829

@@ -62,14 +63,21 @@ package LSP.Servers is
6263
LSP.Server_Message_Visitors.Server_Message_Visitor'Class
6364
with Storage_Size => 0;
6465

66+
type Client_Message_Visitor_Access is access all
67+
LSP.Client_Message_Visitors.Client_Message_Visitor'Class
68+
with Storage_Size => 0;
69+
6570
procedure Run
6671
(Self : in out Server;
6772
Handler : not null Server_Message_Visitor_Access;
68-
Tracer : not null LSP.Tracers.Tracer_Access);
73+
Tracer : not null LSP.Tracers.Tracer_Access;
74+
In_Logger : Server_Message_Visitor_Access;
75+
Out_Logger : Client_Message_Visitor_Access);
6976
-- Run the server using given Request and Notification handler.
7077
-- Tracer object provides tracing/logging capabilities for the main trace,
7178
-- all input & output traces for debugging purposes.
72-
-- Call On_Error in case of uncaught exceptions.
79+
-- In/out loggers are used to dump client-to-server and server-to-client
80+
-- messages.
7381

7482
procedure Stop (Self : in out Server);
7583
-- Ask server to stop
@@ -177,7 +185,7 @@ private
177185
task type Output_Task_Type
178186
(Server : access LSP.Servers.Server)
179187
is
180-
entry Start;
188+
entry Start (Out_Logger : Client_Message_Visitor_Access);
181189
-- Start the task. Should be called once.
182190

183191
entry Stop;
@@ -188,7 +196,7 @@ private
188196
task type Input_Task_Type
189197
(Server : access LSP.Servers.Server)
190198
is
191-
entry Start;
199+
entry Start (In_Logger : Server_Message_Visitor_Access);
192200
-- Start the task. Should be called once.
193201

194202
entry Stop;

0 commit comments

Comments
 (0)