Skip to content

Commit

Permalink
improve sanity checks
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaszsamson committed Jan 21, 2024
1 parent ddf6dca commit 5ff43c5
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
7 changes: 7 additions & 0 deletions apps/language_server/lib/language_server/providers/hover.ex
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ defmodule ElixirLS.LanguageServer.Providers.Hover do
}
rescue
e ->
if match?({_, _}, docs) do
Logger.error("Sanity check failed. ElixirLS needs to restart.")

Process.sleep(2000)
System.halt(1)
end

raise "#{inspect(e.__struct__)}\n#{inspect(__STACKTRACE__)}\nline:\n#{Enum.at(lines, line - 1)}\nchar: #{character}\n#{inspect(docs)}"
end
end
Expand Down
17 changes: 11 additions & 6 deletions apps/language_server/lib/language_server/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ defmodule ElixirLS.LanguageServer.Server do
{:error, type, msg, send_telemetry} ->
JsonRpc.respond_with_error(id, type, msg)

do_sanity_check()
do_sanity_check(msg || to_string(type))

if send_telemetry do
JsonRpc.telemetry(
Expand Down Expand Up @@ -427,7 +427,7 @@ defmodule ElixirLS.LanguageServer.Server do
error_msg = Exception.format_exit(reason)
JsonRpc.respond_with_error(id, :internal_error, error_msg)

do_sanity_check()
do_sanity_check(error_msg)

JsonRpc.telemetry(
"lsp_request_error",
Expand Down Expand Up @@ -788,7 +788,7 @@ defmodule ElixirLS.LanguageServer.Server do
"retry" => false
})

do_sanity_check()
do_sanity_check(error_msg)

JsonRpc.telemetry(
"lsp_request_error",
Expand Down Expand Up @@ -855,7 +855,7 @@ defmodule ElixirLS.LanguageServer.Server do
{:error, type, msg, send_telemetry, state} ->
JsonRpc.respond_with_error(id, type, msg)

do_sanity_check()
do_sanity_check(msg)

if send_telemetry do
JsonRpc.telemetry(
Expand Down Expand Up @@ -901,7 +901,7 @@ defmodule ElixirLS.LanguageServer.Server do
error_msg = Exception.format(kind, payload, stacktrace)
JsonRpc.respond_with_error(id, :internal_error, error_msg)

do_sanity_check()
do_sanity_check(error_msg)

JsonRpc.telemetry(
"lsp_request_error",
Expand Down Expand Up @@ -2244,8 +2244,12 @@ defmodule ElixirLS.LanguageServer.Server do
end
end

def do_sanity_check() do
def do_sanity_check(message \\ nil) do
try do
if message != nil and String.contains?(message, "UndefinedFunctionError") do
raise "sanity check failed"
end

unless :persistent_term.get(:language_server_test_mode, false) do
unless function_exported?(ElixirSense, :module_info, 1) and
:persistent_term.get(:language_server_lib_dir) ==
Expand All @@ -2262,6 +2266,7 @@ defmodule ElixirLS.LanguageServer.Server do
rescue
_ ->
Logger.error("Sanity check failed. ElixirLS needs to restart.")
IO.warn("sanity")

Process.sleep(2000)
System.halt(1)
Expand Down

0 comments on commit 5ff43c5

Please sign in to comment.