Skip to content

Commit 58e2301

Browse files
committed
put test tracer under build lock
Fixes #919
1 parent 88dd761 commit 58e2301

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

apps/language_server/lib/language_server/ex_unit_test_tracer.ex

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule ElixirLS.LanguageServer.ExUnitTestTracer do
22
use GenServer
3+
alias ElixirLS.LanguageServer.Build
34

45
@tables ~w(tests)a
56

@@ -38,32 +39,35 @@ defmodule ElixirLS.LanguageServer.ExUnitTestTracer do
3839
@impl true
3940
def handle_call({:get_tests, path}, _from, state) do
4041
:ets.delete_all_objects(table_name(:tests))
41-
tracers = Code.compiler_options()[:tracers]
42-
# TODO build lock?
43-
Code.put_compiler_option(:tracers, [__MODULE__])
4442

4543
result =
46-
try do
47-
# TODO parallel compiler and diagnostics?
48-
_ = Code.compile_file(path)
49-
50-
result =
51-
:ets.tab2list(table_name(:tests))
52-
|> Enum.map(fn {{_file, module, line}, describes} ->
53-
%{
54-
module: inspect(module),
55-
line: line,
56-
describes: describes
57-
}
58-
end)
59-
60-
{:ok, result}
61-
rescue
62-
e ->
63-
{:error, e}
64-
after
65-
Code.put_compiler_option(:tracers, tracers)
66-
end
44+
Build.with_build_lock(fn ->
45+
tracers = Code.compiler_options()[:tracers]
46+
47+
Code.put_compiler_option(:tracers, [__MODULE__])
48+
49+
try do
50+
# parallel compiler and diagnostics?
51+
_ = Code.compile_file(path)
52+
53+
result =
54+
:ets.tab2list(table_name(:tests))
55+
|> Enum.map(fn {{_file, module, line}, describes} ->
56+
%{
57+
module: inspect(module),
58+
line: line,
59+
describes: describes
60+
}
61+
end)
62+
63+
{:ok, result}
64+
rescue
65+
e ->
66+
{:error, e}
67+
after
68+
Code.put_compiler_option(:tracers, tracers)
69+
end
70+
end)
6771

6872
{:reply, result, state}
6973
end

0 commit comments

Comments
 (0)