Skip to content

Commit b519601

Browse files
committed
don't crash language server if suggest_contracts fails
1 parent 7d4c147 commit b519601

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

apps/language_server/lib/language_server/dialyzer.ex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,16 @@ defmodule ElixirLS.LanguageServer.Dialyzer do
8282
def suggest_contracts(_server, []), do: []
8383

8484
def suggest_contracts(server, files) do
85-
GenServer.call(server, {:suggest_contracts, files}, :infinity)
85+
try do
86+
GenServer.call(server, {:suggest_contracts, files}, :infinity)
87+
catch
88+
kind, payload ->
89+
{payload, stacktrace} = Exception.blame(kind, payload, __STACKTRACE__)
90+
error_msg = Exception.format(kind, payload, stacktrace)
91+
92+
Logger.error("Unable to suggest contracts: #{error_msg}")
93+
[]
94+
end
8695
end
8796

8897
# Server callbacks

apps/language_server/lib/language_server/dialyzer/manifest.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer.Manifest do
3232

3333
JsonRpc.show_message(
3434
:error,
35-
"Unable to build dialyzer PLT. Most likely there are problems with your OTP and elixir installation."
35+
"Unable to build dialyzer PLT. Please make sure that #{elixir_plt_path()} is writable and your OTP install is complete. Visit https://github.com/elixir-lsp/elixir-ls/issues/540 for help"
3636
)
3737

3838
Logger.error("Dialyzer PLT build process exited with reason: #{error_msg}")

0 commit comments

Comments
 (0)