Skip to content

Commit 7e0f737

Browse files
committed
don't send telemetry on expected errors
1 parent b81b12a commit 7e0f737

File tree

16 files changed

+69
-64
lines changed

16 files changed

+69
-64
lines changed

apps/language_server/lib/language_server/dialyzer/analyzer.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
defmodule ElixirLS.LanguageServer.Dialyzer.Analyzer do
22
require Record
33
require Logger
4+
alias ElixirLS.LanguageServer.JsonRpc
45

56
# warn_race_condition is unsupported because it greatly increases analysis time
67
# OTP 25 dropped support for warn_race_condition

apps/language_server/lib/language_server/providers/document_symbols.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbols do
3232
{:ok, build_symbols(symbols, uri, text, hierarchical)}
3333

3434
{:error, :compilation_error} ->
35-
{:error, :server_error, "[DocumentSymbols] Compilation error while parsing source file"}
35+
{:error, :server_error, "Cannot parse source file", false}
3636
end
3737
end
3838

apps/language_server/lib/language_server/providers/execute_command.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand do
2323
handler.execute(args, state)
2424
else
2525
_ ->
26-
{:error, :invalid_request, nil}
26+
{:error, :invalid_request, nil, true}
2727
end
2828
end
2929

apps/language_server/lib/language_server/providers/execute_command/apply_spec.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.ApplySpec do
9090

9191
other ->
9292
{:error, :server_error,
93-
"cannot insert spec, workspace/applyEdit returned #{inspect(other)}"}
93+
"cannot insert spec, workspace/applyEdit returned #{inspect(other)}", true}
9494
end
9595
end
9696
end

apps/language_server/lib/language_server/providers/execute_command/get_ex_unit_tests_in_file.ex

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.GetExUnitTestsInFile
77
path = SourceFile.Path.from_uri(uri)
88

99
case ExUnitTestTracer.get_tests(path) do
10-
{:ok, tests} -> {:ok, tests}
11-
{:error, reason} -> {:error, :server_error, inspect(reason)}
10+
{:ok, tests} ->
11+
{:ok, tests}
12+
13+
{:error, reason} ->
14+
{:error, :server_error, "Cannot get tests in file: #{inspect(reason)}", true}
1215
end
1316
end
1417
end

apps/language_server/lib/language_server/providers/execute_command/manipulate_pipes.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,17 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.ManipulatePipes do
5252
{:ok, nil}
5353
else
5454
{:error, :pipe_not_found} ->
55-
{:error, :parse_error, "Pipe operator not found at cursor"}
55+
{:error, :parse_error, "Pipe operator not found at cursor", false}
5656

5757
{:error, :function_call_not_found} ->
58-
{:error, :parse_error, "Function call not found at cursor"}
58+
{:error, :parse_error, "Function call not found at cursor", false}
5959

6060
{:error, :invalid_code} ->
61-
{:error, :parse_error, "Malformed code"}
61+
{:error, :parse_error, "Malformed code", false}
6262

6363
error ->
6464
{:error, :server_error,
65-
"Cannot execute pipe conversion, workspace/applyEdit returned #{inspect(error)}"}
65+
"Cannot execute pipe conversion, workspace/applyEdit returned #{inspect(error)}", true}
6666
end
6767
end
6868

apps/language_server/lib/language_server/providers/execute_command/mix_clean.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.MixClean do
55
def execute([clean_deps?], _state) do
66
case ElixirLS.LanguageServer.Build.clean(clean_deps?) do
77
:ok -> {:ok, %{}}
8-
{:error, reason} -> {:error, :server_error, inspect(reason)}
8+
{:error, reason} -> {:error, :server_error, "Mix clean failed: #{inspect(reason)}", true}
99
end
1010
end
1111
end

apps/language_server/lib/language_server/providers/folding_range.ex

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,11 @@ defmodule ElixirLS.LanguageServer.Providers.FoldingRange do
8484
]}
8585
8686
"""
87-
@spec provide(%{text: String.t()}) :: {:ok, [t()]} | {:error, String.t()}
87+
@spec provide(%{text: String.t()}) :: {:ok, [t()]}
8888
def provide(%{text: text}) do
8989
do_provide(text)
9090
end
9191

92-
def provide(not_a_source_file) do
93-
{:error, "Expected a source file, found: #{inspect(not_a_source_file)}"}
94-
end
95-
9692
defp do_provide(text) do
9793
input = convert_text_to_input(text)
9894

apps/language_server/lib/language_server/providers/folding_range/token.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ defmodule ElixirLS.LanguageServer.Providers.FoldingRange.Token do
66
"""
77

88
alias ElixirSense.Core.Normalized.Tokenizer
9+
alias ElixirLS.LanguageServer.JsonRpc
910
require Logger
1011

1112
@type t :: {atom(), {non_neg_integer(), non_neg_integer(), any()}, any()}

apps/language_server/lib/language_server/providers/formatting.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ defmodule ElixirLS.LanguageServer.Providers.Formatting do
1515
end
1616

1717
:error ->
18-
{:error, :internal_error, "Unable to fetch formatter options"}
18+
{:error, :internal_error, "Unable to fetch formatter options", true}
1919
end
2020
else
2121
msg =
2222
"Cannot format file from current directory " <>
2323
"(Currently in #{Path.relative_to(File.cwd!(), project_dir)})"
2424

25-
{:error, :internal_error, msg}
25+
{:error, :internal_error, msg, true}
2626
end
2727
end
2828

@@ -42,7 +42,7 @@ defmodule ElixirLS.LanguageServer.Providers.Formatting do
4242
{:ok, response}
4343
rescue
4444
_e in [TokenMissingError, SyntaxError] ->
45-
{:error, :internal_error, "Unable to format due to syntax error"}
45+
{:error, :internal_error, "Unable to format due to syntax error", false}
4646
end
4747

4848
defp get_formatted(text, formatter, _) when is_function(formatter) do

apps/language_server/lib/language_server/server.ex

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -161,18 +161,20 @@ defmodule ElixirLS.LanguageServer.Server do
161161
{{_pid, command, start_time}, requests} = Map.pop!(state.requests, id)
162162

163163
case result do
164-
{:error, type, msg} ->
164+
{:error, type, msg, send_telemetry} ->
165165
JsonRpc.respond_with_error(id, type, msg)
166166

167-
JsonRpc.telemetry(
168-
"lsp_request_error",
169-
%{
170-
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
171-
"elixir_ls.lsp_error" => type,
172-
"elixir_ls.lsp_error_message" => msg
173-
},
174-
%{}
175-
)
167+
if send_telemetry do
168+
JsonRpc.telemetry(
169+
"lsp_request_error",
170+
%{
171+
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
172+
"elixir_ls.lsp_error" => type,
173+
"elixir_ls.lsp_error_message" => msg
174+
},
175+
%{}
176+
)
177+
end
176178

177179
{:ok, result} ->
178180
elapsed = System.monotonic_time(:millisecond) - start_time
@@ -706,18 +708,20 @@ defmodule ElixirLS.LanguageServer.Server do
706708

707709
state
708710

709-
{:error, type, msg, state} ->
711+
{:error, type, msg, send_telemetry, state} ->
710712
JsonRpc.respond_with_error(id, type, msg)
711713

712-
JsonRpc.telemetry(
713-
"lsp_request_error",
714-
%{
715-
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
716-
"elixir_ls.lsp_error" => type,
717-
"elixir_ls.lsp_error_message" => msg
718-
},
719-
%{}
720-
)
714+
if send_telemetry do
715+
JsonRpc.telemetry(
716+
"lsp_request_error",
717+
%{
718+
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
719+
"elixir_ls.lsp_error" => type,
720+
"elixir_ls.lsp_error_message" => msg
721+
},
722+
%{}
723+
)
724+
end
721725

722726
state
723727

@@ -999,10 +1003,10 @@ defmodule ElixirLS.LanguageServer.Server do
9991003
{:ok, spec_code_lenses ++ test_code_lenses}
10001004
else
10011005
{:error, %ElixirSense.Core.Metadata{error: {line, error_msg}}} ->
1002-
{:error, :code_lens_error, "#{line}: #{error_msg}"}
1006+
{:error, :code_lens_error, "#{line}: #{error_msg}", true}
10031007

10041008
{:error, error} ->
1005-
{:error, :code_lens_error, "Error while building code lenses: #{inspect(error)}"}
1009+
{:error, :code_lens_error, "Error while building code lenses: #{inspect(error)}", true}
10061010

10071011
error ->
10081012
error
@@ -1016,7 +1020,7 @@ defmodule ElixirLS.LanguageServer.Server do
10161020
{:async,
10171021
fn ->
10181022
case ExecuteCommand.execute(command, args, state) do
1019-
{:error, :invalid_request, _msg} = res ->
1023+
{:error, :invalid_request, _msg, _} = res ->
10201024
Logger.warning("Unmatched request: #{inspect(req)}")
10211025
res
10221026

@@ -1027,24 +1031,19 @@ defmodule ElixirLS.LanguageServer.Server do
10271031
end
10281032

10291033
defp handle_request(folding_range_req(_id, uri), state = %__MODULE__{}) do
1030-
case get_source_file(state, uri) do
1031-
nil ->
1032-
{:error, :server_error, "Missing source file", state}
1033-
1034-
source_file ->
1035-
fun = fn -> FoldingRange.provide(source_file) end
1036-
{:async, fun, state}
1037-
end
1034+
source_file = get_source_file(state, uri)
1035+
fun = fn -> FoldingRange.provide(source_file) end
1036+
{:async, fun, state}
10381037
end
10391038

10401039
defp handle_request(%{"method" => "$/" <> _}, state = %__MODULE__{}) do
10411040
# "$/" requests that the server doesn't support must return method_not_found
1042-
{:error, :method_not_found, nil, state}
1041+
{:error, :method_not_found, nil, false, state}
10431042
end
10441043

10451044
defp handle_request(req, state = %__MODULE__{}) do
10461045
Logger.warning("Unmatched request: #{inspect(req)}")
1047-
{:error, :invalid_request, nil, state}
1046+
{:error, :invalid_request, nil, false, state}
10481047
end
10491048

10501049
defp handle_request_async(id, func) do
@@ -1056,7 +1055,7 @@ defmodule ElixirLS.LanguageServer.Server do
10561055
func.()
10571056
rescue
10581057
e in InvalidParamError ->
1059-
{:error, :invalid_params, e.message}
1058+
{:error, :invalid_params, e.message, true}
10601059
end
10611060

10621061
GenServer.call(parent, {:request_finished, id, result}, :infinity)
@@ -1330,7 +1329,7 @@ defmodule ElixirLS.LanguageServer.Server do
13301329

13311330
{:error, reason} ->
13321331
if reason != :enoent do
1333-
Logger.warning("Couldn't read file #{file}: #{inspect(reason)}")
1332+
Logger.warning("Cannot read file #{file}: #{inspect(reason)}")
13341333
end
13351334

13361335
nil
@@ -1615,6 +1614,11 @@ defmodule ElixirLS.LanguageServer.Server do
16151614
{:error, err} ->
16161615
Logger.warning("Cannot create .elixir_ls/.gitignore, cause: #{Atom.to_string(err)}")
16171616

1617+
JsonRpc.show_message(
1618+
:warning,
1619+
"Cannot create .elixir_ls/.gitignore"
1620+
)
1621+
16181622
state
16191623
end
16201624
end

apps/language_server/test/providers/document_symbols_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2465,8 +2465,8 @@ defmodule ElixirLS.LanguageServer.Providers.DocumentSymbolsTest do
24652465
end
24662466
"""
24672467

2468-
assert {:error, :server_error, message} = DocumentSymbols.symbols(uri, text, true)
2469-
assert String.contains?(message, "Compilation error")
2468+
assert {:error, :server_error, message, false} = DocumentSymbols.symbols(uri, text, true)
2469+
assert String.contains?(message, "Cannot parse source file")
24702470
end
24712471

24722472
test "returns def and defp as a prefix" do

apps/language_server/test/providers/execute_command/get_ex_unit_tests_in_file_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.GetExUnitTestsInFileT
5151
in_fixture(Path.join(__DIR__, "../../../test_fixtures"), "project_with_tests", fn ->
5252
uri = SourceFile.Path.to_uri(Path.join(File.cwd!(), "test/error_test.exs"))
5353

54-
assert {:error, :server_error, "%TokenMissingError" <> _} =
54+
assert {:error, :server_error, "Cannot get tests in file: %TokenMissingError" <> _, true} =
5555
GetExUnitTestsInFile.execute([uri], nil)
5656
end)
5757
end

apps/language_server/test/providers/execute_command/manipulate_pipes_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.ManipulatePipesTest d
577577

578578
assert_never_raises(text, uri, "toPipe")
579579

580-
assert {:error, :parse_error, "Function call not found at cursor"} =
580+
assert {:error, :parse_error, "Function call not found at cursor", false} =
581581
ManipulatePipes.execute(
582582
["toPipe", uri, 4, 13],
583583
%Server{
@@ -1144,7 +1144,7 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.ManipulatePipesTest d
11441144

11451145
assert_never_raises(text, uri, "fromPipe")
11461146

1147-
assert {:error, :parse_error, "Pipe operator not found at cursor"} =
1147+
assert {:error, :parse_error, "Pipe operator not found at cursor", false} =
11481148
ManipulatePipes.execute(
11491149
["fromPipe", uri, 4, 16],
11501150
%Server{

apps/language_server/test/providers/folding_range_test.exs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ defmodule ElixirLS.LanguageServer.Providers.FoldingRangeTest do
55

66
doctest(FoldingRange)
77

8-
test "returns an :error tuple if input is not a source file" do
9-
assert {:error, _} = %{} |> FoldingRange.provide()
10-
end
11-
128
describe "indentation" do
139
setup [:fold_via_indentation]
1410

apps/language_server/test/providers/formatting_test.exs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,9 @@ defmodule ElixirLS.LanguageServer.Providers.FormattingTest do
269269

270270
project_dir = maybe_convert_path_separators(FixtureHelpers.get_path("formatter"))
271271

272-
assert {:error, :internal_error, msg} = Formatting.format(source_file, uri, project_dir)
272+
assert {:error, :internal_error, msg, false} =
273+
Formatting.format(source_file, uri, project_dir)
274+
273275
assert String.contains?(msg, "Unable to format")
274276
end)
275277
end
@@ -353,7 +355,9 @@ defmodule ElixirLS.LanguageServer.Providers.FormattingTest do
353355

354356
project_dir = maybe_convert_path_separators(FixtureHelpers.get_path("formatter"))
355357

356-
assert {:error, :internal_error, msg} = Formatting.format(source_file, uri, project_dir)
358+
assert {:error, :internal_error, msg, false} =
359+
Formatting.format(source_file, uri, project_dir)
360+
357361
assert String.contains?(msg, "Unable to format")
358362
end)
359363
end

0 commit comments

Comments
 (0)