Skip to content

Commit 3545a6f

Browse files
committed
bump version
1 parent e137abe commit 3545a6f

File tree

6 files changed

+87
-8
lines changed

6 files changed

+87
-8
lines changed

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
### Unreleased
22

3+
### v0.17.10: 19 November 2023
4+
5+
#### Improvements
6+
7+
- Improved validation of language server configuration
8+
- Improved validation of debugger launch configuration
9+
- Diagnostics with no file are now emitted on `mix.exs`. Previously they were skipped
10+
- Debugger emits better error messages when launch configuration is invalid
11+
- Language server made more predictable on critical errors (e.g. project directory no longer existing)
12+
13+
#### Fixes
14+
15+
- Fixed crash when callback from docs cannot be matched with callbacks from typespecs
16+
- Fixed invalid expansion of `Enum.fetch` in type inference engine
17+
- Handled a few cases of invalid unicode binaries
18+
- Fixed crash in debugger when stacktrace frame cannot be fetched
19+
- Increased timeout on variable evaluation
20+
- Fixed crash in debugger when inspecting an improper list
21+
- Fixed crash in debugger when reloading test modules and `:code.delete/1` fails
22+
323
### v0.17.9: 13 November 2023
424

525
#### Improvements

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.17.9
1+
0.17.10

apps/language_server/lib/language_server/cli.ex

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ defmodule ElixirLS.LanguageServer.CLI do
6969

7070
Launch.unload_not_needed_apps([:nimble_parsec, :mix_task_archive_deps, :elixir_ls_debugger])
7171

72+
:persistent_term.put(
73+
:language_server_lib_dir,
74+
ElixirLS.LanguageServer.module_info(:compile)[:source]
75+
)
76+
77+
:persistent_term.put(
78+
:language_server_elixir_sense_lib_dir,
79+
ElixirSense.module_info(:compile)[:source]
80+
)
81+
7282
WireProtocol.stream_packets(&JsonRpc.receive_packet/1)
7383
end
7484

@@ -81,6 +91,8 @@ defmodule ElixirLS.LanguageServer.CLI do
8191
end
8292

8393
defp start_language_server do
94+
check_otp_install_complete()
95+
8496
case Application.ensure_all_started(:language_server, :temporary) do
8597
{:ok, _} ->
8698
:ok
@@ -90,21 +102,21 @@ defmodule ElixirLS.LanguageServer.CLI do
90102

91103
JsonRpc.show_message(:error, message)
92104
Process.sleep(5000)
93-
raise message
105+
System.halt(1)
94106

95107
{:error, {:dialyzer, {~c"no such file or directory", ~c"dialyzer.app"}}} ->
96108
message = incomplete_installation_message("#dialyzer-missing")
97109

98110
JsonRpc.show_message(:error, message)
99111
Process.sleep(5000)
100-
raise message
112+
System.halt(1)
101113

102114
{:error, _} ->
103115
message = incomplete_installation_message()
104116

105117
JsonRpc.show_message(:error, message)
106118
Process.sleep(5000)
107-
raise message
119+
System.halt(1)
108120
end
109121
end
110122

@@ -175,4 +187,19 @@ defmodule ElixirLS.LanguageServer.CLI do
175187
%{}
176188
)
177189
end
190+
191+
def check_otp_install_complete do
192+
try do
193+
:io_lib.format(~c"~p", [[1]])
194+
:ok
195+
rescue
196+
e in ErlangError ->
197+
Logger.error(Exception.message(e))
198+
message = incomplete_installation_message()
199+
200+
JsonRpc.show_message(:error, message)
201+
Process.sleep(5000)
202+
System.halt(1)
203+
end
204+
end
178205
end

apps/language_server/lib/language_server/server.ex

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ defmodule ElixirLS.LanguageServer.Server do
131131

132132
@impl GenServer
133133
def terminate(reason, _state) do
134-
IO.puts(:stderr, "terminate(#{inspect(reason)})")
135-
136134
case reason do
137135
:normal ->
138136
:ok
@@ -181,6 +179,8 @@ defmodule ElixirLS.LanguageServer.Server do
181179
{:error, type, msg, send_telemetry} ->
182180
JsonRpc.respond_with_error(id, type, msg)
183181

182+
do_sanity_check(state)
183+
184184
if send_telemetry do
185185
JsonRpc.telemetry(
186186
"lsp_request_error",
@@ -374,6 +374,8 @@ defmodule ElixirLS.LanguageServer.Server do
374374
error_msg = Exception.format_exit(reason)
375375
JsonRpc.respond_with_error(id, :server_error, error_msg)
376376

377+
do_sanity_check(state)
378+
377379
JsonRpc.telemetry(
378380
"lsp_request_error",
379381
%{
@@ -819,6 +821,8 @@ defmodule ElixirLS.LanguageServer.Server do
819821
{:error, type, msg, send_telemetry, state} ->
820822
JsonRpc.respond_with_error(id, type, msg)
821823

824+
do_sanity_check(state)
825+
822826
if send_telemetry do
823827
JsonRpc.telemetry(
824828
"lsp_request_error",
@@ -863,6 +867,8 @@ defmodule ElixirLS.LanguageServer.Server do
863867
error_msg = Exception.format(kind, payload, stacktrace)
864868
JsonRpc.respond_with_error(id, :server_error, error_msg)
865869

870+
do_sanity_check(state)
871+
866872
JsonRpc.telemetry(
867873
"lsp_request_error",
868874
%{
@@ -1403,6 +1409,8 @@ defmodule ElixirLS.LanguageServer.Server do
14031409
end
14041410

14051411
defp handle_build_result(status, diagnostics, state = %__MODULE__{}) do
1412+
do_sanity_check(state)
1413+
14061414
old_diagnostics =
14071415
state.build_diagnostics ++
14081416
state.dialyzer_diagnostics ++ List.flatten(Map.values(state.parser_diagnostics))
@@ -2244,4 +2252,28 @@ defmodule ElixirLS.LanguageServer.Server do
22442252
{:error, diagnostic} -> [diagnostic | warning_diagnostics]
22452253
end
22462254
end
2255+
2256+
defp do_sanity_check(_state) do
2257+
try do
2258+
unless function_exported?(ElixirSense, :module_info, 1) and
2259+
:persistent_term.get(:language_server_lib_dir) ==
2260+
ElixirLS.LanguageServer.module_info(:compile)[:source] do
2261+
raise "sanity check failed"
2262+
end
2263+
2264+
unless function_exported?(ElixirLS.LanguageServer, :module_info, 1) and
2265+
:persistent_term.get(:language_server_elixir_sense_lib_dir) ==
2266+
ElixirSense.module_info(:compile)[:source] do
2267+
raise "sanity check failed"
2268+
end
2269+
rescue
2270+
_ ->
2271+
Logger.error("Sanity check failed. ElixirLS needs to restart.")
2272+
2273+
unless Application.get_env(:language_server, :test_mode) do
2274+
Process.sleep(2000)
2275+
System.halt(1)
2276+
end
2277+
end
2278+
end
22472279
end

dep_versions.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[
2-
elixir_sense: "85a1b96455f36d9e0eed5cb4ca8bbf56db6caa5f",
2+
elixir_sense: "16d28f78e5702678394523c6aa17486931740402",
33
dialyxir_vendored: "d50dcd7101c6ebd37b57b7ee4a7888d8cb634782",
44
jason_v: "c81537e2a5e1acacb915cf339fe400357e3c2aaa",
55
erl2ex_vendored: "073ac6b9a44282e718b6050c7b27cedf9217a12a",

mix.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"},
33
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
44
"dialyxir_vendored": {:git, "https://github.com/elixir-lsp/dialyxir.git", "d50dcd7101c6ebd37b57b7ee4a7888d8cb634782", [ref: "d50dcd7101c6ebd37b57b7ee4a7888d8cb634782"]},
5-
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "85a1b96455f36d9e0eed5cb4ca8bbf56db6caa5f", [ref: "85a1b96455f36d9e0eed5cb4ca8bbf56db6caa5f"]},
5+
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "16d28f78e5702678394523c6aa17486931740402", [ref: "16d28f78e5702678394523c6aa17486931740402"]},
66
"erl2ex_vendored": {:git, "https://github.com/elixir-lsp/erl2ex.git", "073ac6b9a44282e718b6050c7b27cedf9217a12a", [ref: "073ac6b9a44282e718b6050c7b27cedf9217a12a"]},
77
"erlex_vendored": {:git, "https://github.com/elixir-lsp/erlex.git", "82db0e82ee4896491bc26dec99f5d795f03ab9f4", [ref: "82db0e82ee4896491bc26dec99f5d795f03ab9f4"]},
88
"jason_v": {:git, "https://github.com/elixir-lsp/jason.git", "c81537e2a5e1acacb915cf339fe400357e3c2aaa", [ref: "c81537e2a5e1acacb915cf339fe400357e3c2aaa"]},

0 commit comments

Comments
 (0)