@@ -9,7 +9,7 @@ defmodule ElixirLS.DebugAdapter.Output do
99 """
1010 alias ElixirLS.Utils.WireProtocol
1111 use GenServer
12- use ElixirLS.DebugAdapter.Protocol
12+ import ElixirLS.DebugAdapter.Protocol.Basic
1313
1414 ## Client API
1515
@@ -38,31 +38,46 @@ defmodule ElixirLS.DebugAdapter.Output do
3838 )
3939 end
4040
41- def send_event ( server \\ __MODULE__ , event , body ) do
42- GenServer . call ( server , { :send_event , event , body } , :infinity )
41+ def send_event ( server \\ __MODULE__ , body ) do
42+ GenServer . call ( server , { :send_event , body } , :infinity )
4343 end
4444
4545 def debugger_console ( server \\ __MODULE__ , str ) when is_binary ( str ) do
46- send_event ( server , "output" , % { "category" => "console" , "output" => maybe_append_newline ( str ) } )
46+ send_event ( server , % GenDAP.Events.OutputEvent {
47+ seq: nil ,
48+ body: % { category: "console" , output: maybe_append_newline ( str ) }
49+ } )
4750 end
4851
4952 def debugger_important ( server \\ __MODULE__ , str ) when is_binary ( str ) do
50- send_event ( server , "output" , % {
51- "category" => "important" ,
52- "output" => maybe_append_newline ( str )
53+ send_event ( server , % GenDAP.Events.OutputEvent {
54+ seq: nil ,
55+ body: % {
56+ category: "important" ,
57+ output: maybe_append_newline ( str )
58+ }
5359 } )
5460 end
5561
5662 def debuggee_out ( server \\ __MODULE__ , str ) when is_binary ( str ) do
57- send_event ( server , "output" , % { "category" => "stdout" , "output" => maybe_append_newline ( str ) } )
63+ send_event ( server , % GenDAP.Events.OutputEvent {
64+ seq: nil ,
65+ body: % { category: "stdout" , output: maybe_append_newline ( str ) }
66+ } )
5867 end
5968
6069 def debuggee_err ( server \\ __MODULE__ , str ) when is_binary ( str ) do
61- send_event ( server , "output" , % { "category" => "stderr" , "output" => maybe_append_newline ( str ) } )
70+ send_event ( server , % GenDAP.Events.OutputEvent {
71+ seq: nil ,
72+ body: % { category: "stderr" , output: maybe_append_newline ( str ) }
73+ } )
6274 end
6375
6476 def ex_unit_event ( server \\ __MODULE__ , data ) when is_map ( data ) do
65- send_event ( server , "output" , % { "category" => "ex_unit" , "output" => "" , "data" => data } )
77+ send_event ( server , % GenDAP.Events.OutputEvent {
78+ seq: nil ,
79+ body: % { category: "ex_unit" , output: "" , data: data }
80+ } )
6681 end
6782
6883 def telemetry ( server \\ __MODULE__ , event , properties , measurements )
@@ -82,13 +97,16 @@ defmodule ElixirLS.DebugAdapter.Output do
8297 "elixir_ls.mix_target" => Mix . target ( )
8398 }
8499
85- send_event ( server , "output" , % {
86- "category" => "telemetry" ,
87- "output" => event ,
88- "data" => % {
89- "name" => event ,
90- "properties" => Map . merge ( common_properties , properties ) ,
91- "measurements" => measurements
100+ send_event ( server , % GenDAP.Events.OutputEvent {
101+ seq: nil ,
102+ body: % {
103+ category: "telemetry" ,
104+ output: event ,
105+ data: % {
106+ "name" => event ,
107+ "properties" => Map . merge ( common_properties , properties ) ,
108+ "measurements" => measurements
109+ }
92110 }
93111 } )
94112 end
@@ -109,6 +127,15 @@ defmodule ElixirLS.DebugAdapter.Output do
109127 end
110128
111129 @ impl GenServer
130+ def handle_call ( { :send_response , request_packet , body = % struct { } } , _from , seq ) do
131+ { :ok , dumped_body } =
132+ SchematicV . dump ( struct . schematic ( ) , % { body | seq: seq , request_seq: request_packet [ "seq" ] } )
133+
134+ res = WireProtocol . send ( dumped_body )
135+
136+ { :reply , res , seq + 1 }
137+ end
138+
112139 def handle_call ( { :send_response , request_packet , body } , _from , seq ) do
113140 res = WireProtocol . send ( response ( seq , request_packet [ "seq" ] , request_packet [ "command" ] , body ) )
114141 { :reply , res , seq + 1 }
@@ -120,25 +147,39 @@ defmodule ElixirLS.DebugAdapter.Output do
120147 _from ,
121148 seq
122149 ) do
123- res =
124- WireProtocol . send (
125- error_response (
126- seq ,
127- request_packet [ "seq" ] ,
128- request_packet [ "command" ] ,
129- message ,
130- format ,
131- variables ,
132- send_telemetry ,
133- show_user
134- )
150+ { :ok , dumped_error } =
151+ SchematicV . dump (
152+ GenDAP.Structures.ErrorResponse . schematic ( ) ,
153+ % GenDAP.Structures.ErrorResponse {
154+ seq: seq ,
155+ request_seq: request_packet [ "seq" ] ,
156+ command: request_packet [ "command" ] ,
157+ type: "response" ,
158+ success: false ,
159+ message: message ,
160+ body: % {
161+ error: % GenDAP.Structures.Message {
162+ # TODO unique ids
163+ id: 1 ,
164+ format: format ,
165+ variables: variables ,
166+ send_telemetry: send_telemetry ,
167+ show_user: show_user
168+ }
169+ }
170+ }
135171 )
136172
173+ res = WireProtocol . send ( dumped_error )
174+
137175 { :reply , res , seq + 1 }
138176 end
139177
140- def handle_call ( { :send_event , event , body } , _from , seq ) do
141- res = WireProtocol . send ( event ( seq , event , body ) )
178+ def handle_call ( { :send_event , body = % struct { seq: _ } } , _from , seq ) do
179+ # IO.warn(inspect(%{body | seq: seq}))
180+ { :ok , dumped_event } = SchematicV . dump ( struct . schematic ( ) , % { body | seq: seq } )
181+ # IO.warn(inspect(dumped_event))
182+ res = WireProtocol . send ( dumped_event )
142183 { :reply , res , seq + 1 }
143184 end
144185end
0 commit comments