Skip to content

Commit a82d4dd

Browse files
committed
workaround a crash on windows in OTP 27
1 parent 7ee31d4 commit a82d4dd

File tree

5 files changed

+13
-21
lines changed

5 files changed

+13
-21
lines changed

apps/language_server/lib/language_server/providers/workspace_symbols.ex

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
6767
GenServer.start_link(__MODULE__, :ok, opts |> Keyword.put_new(:name, __MODULE__))
6868
end
6969

70-
def notify_settings_stored() do
71-
GenServer.cast(__MODULE__, :notify_settings_stored)
70+
def notify_settings_stored(project_dir) do
71+
GenServer.cast(__MODULE__, {:notify_settings_stored, project_dir})
7272
end
7373

7474
def notify_build_complete(server \\ __MODULE__) do
@@ -150,9 +150,7 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
150150
end
151151

152152
@impl GenServer
153-
def handle_cast(:notify_settings_stored, state) do
154-
project_dir = :persistent_term.get(:language_server_project_dir)
155-
153+
def handle_cast({:notify_settings_stored, project_dir}, state) do
156154
# as of LSP 3.17 only one tag is defined and clients are required to silently ignore unknown tags
157155
# so there's no need to pass the list
158156
tag_support =

apps/language_server/lib/language_server/server.ex

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,9 +1865,8 @@ defmodule ElixirLS.LanguageServer.Server do
18651865
state = create_gitignore(state)
18661866

18671867
if state.mix_project? do
1868-
:persistent_term.put(:language_server_project_dir, state.project_dir)
1869-
WorkspaceSymbols.notify_settings_stored()
1870-
Tracer.notify_settings_stored()
1868+
WorkspaceSymbols.notify_settings_stored(state.project_dir)
1869+
Tracer.notify_settings_stored(state.project_dir)
18711870
end
18721871

18731872
JsonRpc.telemetry(

apps/language_server/lib/language_server/tracer.ex

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ defmodule ElixirLS.LanguageServer.Tracer do
2020
GenServer.start_link(__MODULE__, args, name: __MODULE__)
2121
end
2222

23-
def notify_settings_stored() do
24-
GenServer.cast(__MODULE__, :notify_settings_stored)
23+
def notify_settings_stored(project_dir) do
24+
GenServer.cast(__MODULE__, {:notify_settings_stored, project_dir})
2525
end
2626

2727
defp get_project_dir() do
@@ -53,8 +53,7 @@ defmodule ElixirLS.LanguageServer.Tracer do
5353
])
5454
end
5555

56-
project_dir = :persistent_term.get(:language_server_project_dir, nil)
57-
state = %{project_dir: project_dir}
56+
state = %{project_dir: nil}
5857

5958
{:ok, state}
6059
end
@@ -65,9 +64,7 @@ defmodule ElixirLS.LanguageServer.Tracer do
6564
end
6665

6766
@impl true
68-
def handle_cast(:notify_settings_stored, state) do
69-
project_dir = :persistent_term.get(:language_server_project_dir)
70-
67+
def handle_cast({:notify_settings_stored, project_dir}, state) do
7168
for table <- @tables do
7269
table_name = table_name(table)
7370
:ets.delete_all_objects(table_name)

apps/language_server/test/providers/references_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ defmodule ElixirLS.LanguageServer.Providers.ReferencesTest do
1313
File.rm_rf!(FixtureHelpers.get_path(".elixir_ls/calls.dets"))
1414
{:ok, pid} = Tracer.start_link([])
1515
project_path = FixtureHelpers.get_path("")
16-
:persistent_term.put(:language_server_project_dir, project_path)
17-
Tracer.notify_settings_stored()
16+
17+
Tracer.notify_settings_stored(project_path)
1818

1919
compiler_options = Code.compiler_options()
2020
Build.set_compiler_options(ignore_module_conflict: true)

apps/language_server/test/tracer_test.exs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,16 @@ defmodule ElixirLS.LanguageServer.TracerTest do
1414

1515
test "set project dir" do
1616
project_path = FixtureHelpers.get_path("")
17-
:persistent_term.put(:language_server_project_dir, project_path)
1817

19-
Tracer.notify_settings_stored()
18+
Tracer.notify_settings_stored(project_path)
2019

2120
assert GenServer.call(Tracer, :get_project_dir) == project_path
2221
end
2322

2423
describe "call trace" do
2524
setup context do
2625
project_path = FixtureHelpers.get_path("")
27-
:persistent_term.put(:language_server_project_dir, project_path)
28-
Tracer.notify_settings_stored()
26+
Tracer.notify_settings_stored(project_path)
2927
GenServer.call(Tracer, :get_project_dir)
3028

3129
{:ok, context}

0 commit comments

Comments
 (0)