Skip to content

Commit b36c295

Browse files
committed
fix crash when project dir does not exists on build start
1 parent f016a5c commit b36c295

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

apps/language_server/lib/language_server/build.ex

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

66
def build(parent, root_path, opts) when is_binary(root_path) do
7-
if Path.absname(File.cwd!()) != Path.absname(root_path) do
8-
Logger.info("Skipping build because cwd changed from #{root_path} to #{File.cwd!()}")
9-
{nil, nil}
10-
else
117
spawn_monitor(fn ->
128
with_build_lock(fn ->
139
{us, result} =
@@ -71,7 +67,6 @@ defmodule ElixirLS.LanguageServer.Build do
7167
})
7268
end)
7369
end)
74-
end
7570
end
7671

7772
def clean(clean_deps? \\ false) do

apps/language_server/lib/language_server/server.ex

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1240,7 +1240,28 @@ defmodule ElixirLS.LanguageServer.Server do
12401240
not state.build_running? and build_automatically ->
12411241
fetch_deps? = Map.get(state.settings || %{}, "fetchDeps", false)
12421242

1243-
{_pid, build_ref} = Build.build(self(), project_dir, fetch_deps?: fetch_deps?)
1243+
{_pid, build_ref} = case File.cwd() do
1244+
{:ok, cwd} ->
1245+
if Path.absname(cwd) == Path.absname(project_dir) do
1246+
Build.build(self(), project_dir, fetch_deps?: fetch_deps?)
1247+
else
1248+
Logger.info("Skipping build because cwd changed from #{project_dir} to #{cwd}")
1249+
{nil, nil}
1250+
end
1251+
{:error, reason} ->
1252+
Logger.warning("cwd is not accessible: #{inspect(reason)}, trying to change directory back to #{project_dir}")
1253+
# cwd is not accessible
1254+
# try to change back to project dir
1255+
case File.cd(project_dir) do
1256+
:ok ->
1257+
Build.build(self(), project_dir, fetch_deps?: fetch_deps?)
1258+
{:error, reason} ->
1259+
message = "Cannot change directory to project dir #{project_dir}: #{inspect(reason)}"
1260+
Logger.error(message)
1261+
JsonRpc.show_message(:error, message)
1262+
{nil, nil}
1263+
end
1264+
end
12441265

12451266
%__MODULE__{
12461267
state

0 commit comments

Comments
 (0)