Skip to content

Commit 562d876

Browse files
committed
mark DAP error responses with sendToTelemetry and showUser properties
1 parent 43e17f9 commit 562d876

File tree

4 files changed

+166
-51
lines changed

4 files changed

+166
-51
lines changed

apps/elixir_ls_debugger/lib/debugger/output.ex

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,20 @@ defmodule ElixirLS.Debugger.Output do
2121
GenServer.call(server, {:send_response, request_packet, response_body})
2222
end
2323

24-
def send_error_response(server \\ __MODULE__, request_packet, message, format, variables) do
25-
GenServer.call(server, {:send_error_response, request_packet, message, format, variables})
24+
def send_error_response(
25+
server \\ __MODULE__,
26+
request_packet,
27+
message,
28+
format,
29+
variables,
30+
send_telemetry,
31+
show_user
32+
) do
33+
GenServer.call(
34+
server,
35+
{:send_error_response, request_packet, message, format, variables, send_telemetry,
36+
show_user}
37+
)
2638
end
2739

2840
def send_event(server \\ __MODULE__, event, body) do
@@ -69,7 +81,12 @@ defmodule ElixirLS.Debugger.Output do
6981
{:reply, res, seq + 1}
7082
end
7183

72-
def handle_call({:send_error_response, request_packet, message, format, variables}, _from, seq) do
84+
def handle_call(
85+
{:send_error_response, request_packet, message, format, variables, send_telemetry,
86+
show_user},
87+
_from,
88+
seq
89+
) do
7390
res =
7491
WireProtocol.send(
7592
error_response(
@@ -78,7 +95,9 @@ defmodule ElixirLS.Debugger.Output do
7895
request_packet["command"],
7996
message,
8097
format,
81-
variables
98+
variables,
99+
send_telemetry,
100+
show_user
82101
)
83102
)
84103

apps/elixir_ls_debugger/lib/debugger/protocol.basic.ex

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,16 @@ defmodule ElixirLS.Debugger.Protocol.Basic do
3636
end
3737
end
3838

39-
defmacro error_response(seq, request_seq, command, message, format, variables) do
39+
defmacro error_response(
40+
seq,
41+
request_seq,
42+
command,
43+
message,
44+
format,
45+
variables,
46+
send_telemetry,
47+
show_user
48+
) do
4049
quote do
4150
%{
4251
"type" => "response",
@@ -50,8 +59,8 @@ defmodule ElixirLS.Debugger.Protocol.Basic do
5059
"id" => unquote(seq),
5160
"format" => unquote(format),
5261
"variables" => unquote(variables),
53-
"showUser" => false,
54-
"sendTelemetry" => false
62+
"showUser" => unquote(show_user),
63+
"sendTelemetry" => unquote(send_telemetry)
5564
}
5665
}
5766
}

apps/elixir_ls_debugger/lib/debugger/server.ex

Lines changed: 50 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ defmodule ElixirLS.Debugger.Server do
1313
"""
1414

1515
defmodule ServerError do
16-
defexception [:message, :format, :variables]
16+
defexception [:message, :format, :variables, {:send_telemetry, true}, {:show_user, false}]
1717
end
1818

1919
alias ElixirLS.Debugger.{
@@ -290,7 +290,14 @@ defmodule ElixirLS.Debugger.Server do
290290

291291
case result do
292292
{:error, e = %ServerError{}} ->
293-
Output.send_error_response(packet, e.message, e.format, e.variables)
293+
Output.send_error_response(
294+
packet,
295+
e.message,
296+
e.format,
297+
e.variables,
298+
e.send_telemetry,
299+
e.show_user
300+
)
294301

295302
{:ok, response_body} ->
296303
Output.send_response(packet, response_body)
@@ -354,14 +361,22 @@ defmodule ElixirLS.Debugger.Server do
354361
end
355362
rescue
356363
e in ServerError ->
357-
Output.send_error_response(packet, e.message, e.format, e.variables)
364+
Output.send_error_response(
365+
packet,
366+
e.message,
367+
e.format,
368+
e.variables,
369+
e.send_telemetry,
370+
e.show_user
371+
)
372+
358373
{:noreply, state}
359374
catch
360375
kind, error ->
361376
{payload, stacktrace} = Exception.blame(kind, error, __STACKTRACE__)
362377
message = Exception.format(kind, payload, stacktrace)
363378
Output.debugger_console(message)
364-
Output.send_error_response(packet, "internalServerError", message, %{})
379+
Output.send_error_response(packet, "internalServerError", message, %{}, true, false)
365380
{:noreply, state}
366381
end
367382
end
@@ -444,7 +459,9 @@ defmodule ElixirLS.Debugger.Server do
444459
packet,
445460
"internalServerError",
446461
"Request handler exited with reason #{Exception.format_exit(reason)}",
447-
%{}
462+
%{},
463+
true,
464+
false
448465
)
449466

450467
if MapSet.member?(state.progresses, request_id) do
@@ -503,23 +520,26 @@ defmodule ElixirLS.Debugger.Server do
503520
raise ServerError,
504521
message: "invalidRequest",
505522
format: "0-based lines are not supported",
506-
variables: %{}
523+
variables: %{},
524+
show_user: true
507525
end
508526

509527
# columnsStartAt1 is true by default and we only support 1-based indexing
510528
if client_info["columnsStartAt1"] == false do
511529
raise ServerError,
512530
message: "invalidRequest",
513531
format: "0-based columns are not supported",
514-
variables: %{}
532+
variables: %{},
533+
show_user: true
515534
end
516535

517536
# pathFormat is `path` by default and we do not support other, e.g. `uri`
518537
if client_info["pathFormat"] not in [nil, "path"] do
519538
raise ServerError,
520539
message: "invalidRequest",
521540
format: "pathFormat {pathFormat} is not supported",
522-
variables: %{"pathFormat" => client_info["pathFormat"]}
541+
variables: %{"pathFormat" => client_info["pathFormat"]},
542+
show_user: true
523543
end
524544

525545
{capabilities(), %{state | client_info: client_info}}
@@ -542,7 +562,7 @@ defmodule ElixirLS.Debugger.Server do
542562
case requests do
543563
%{^request_or_progress_id => {pid, packet}} ->
544564
Process.exit(pid, :cancelled)
545-
Output.send_error_response(packet, "cancelled", "cancelled", %{})
565+
Output.send_error_response(packet, "cancelled", "cancelled", %{}, false, false)
546566

547567
# send progressEnd if cancelling a progress
548568
if MapSet.member?(state.progresses, request_or_progress_id) do
@@ -610,7 +630,8 @@ defmodule ElixirLS.Debugger.Server do
610630
raise ServerError,
611631
message: "invalidRequest",
612632
format: "Cannot set breakpoints when running with no debug",
613-
variables: %{}
633+
variables: %{},
634+
show_user: true
614635
end
615636

616637
defp handle_request(
@@ -659,7 +680,8 @@ defmodule ElixirLS.Debugger.Server do
659680
raise ServerError,
660681
message: "invalidRequest",
661682
format: "Cannot set function breakpoints when running with no debug",
662-
variables: %{}
683+
variables: %{},
684+
show_user: true
663685
end
664686

665687
defp handle_request(
@@ -807,7 +829,8 @@ defmodule ElixirLS.Debugger.Server do
807829
raise ServerError,
808830
message: "invalidRequest",
809831
format: "Cannot pause process when running with no debug",
810-
variables: %{}
832+
variables: %{},
833+
show_user: true
811834
end
812835

813836
defp handle_request(pause_req(_, thread_id), state = %__MODULE__{}) do
@@ -821,7 +844,8 @@ defmodule ElixirLS.Debugger.Server do
821844
format: "threadId not found: {threadId}",
822845
variables: %{
823846
"threadId" => inspect(thread_id)
824-
}
847+
},
848+
show_user: true
825849
end
826850

827851
{%{}, state}
@@ -1273,7 +1297,12 @@ defmodule ElixirLS.Debugger.Server do
12731297
message = Exception.format(kind, payload, stacktrace)
12741298

12751299
reraise(
1276-
%ServerError{message: "evaluateError", format: message, variables: %{}},
1300+
%ServerError{
1301+
message: "evaluateError",
1302+
format: message,
1303+
variables: %{},
1304+
send_telemetry: false
1305+
},
12771306
stacktrace
12781307
)
12791308
end
@@ -1531,7 +1560,8 @@ defmodule ElixirLS.Debugger.Server do
15311560
raise ServerError,
15321561
message: "argumentError",
15331562
format: "stackTraceMode must be `all`, `no_tail`, or `false`",
1534-
variables: %{}
1563+
variables: %{},
1564+
show_user: true
15351565
end
15361566

15371567
defp capabilities do
@@ -1659,7 +1689,8 @@ defmodule ElixirLS.Debugger.Server do
16591689
raise ServerError,
16601690
message: "argumentError",
16611691
format: "Unable to compile file pattern {pattern} into a regex: {error}",
1662-
variables: %{"pattern" => inspect(pattern), "error" => inspect(error)}
1692+
variables: %{"pattern" => inspect(pattern), "error" => inspect(error)},
1693+
show_user: true
16631694
end
16641695
end)
16651696

@@ -2009,7 +2040,9 @@ defmodule ElixirLS.Debugger.Server do
20092040
format: "Kernel.dbg breakpoints do not support {command} command",
20102041
variables: %{
20112042
"command" => command
2012-
}
2043+
},
2044+
show_user: true,
2045+
send_telemetry: false
20132046
end
20142047
end
20152048

0 commit comments

Comments
 (0)