Skip to content

Commit 4c06707

Browse files
committed
Properly get beam file for preloaded modules
1 parent 3095d2d commit 4c06707

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

apps/language_server/lib/language_server/dialyzer.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer do
359359

360360
files_to_analyze =
361361
for module <- modules_to_analyze do
362-
temp_modules[module] || :code.which(module)
362+
temp_modules[module] || Utils.get_beam_file(module)
363363
end
364364

365365
# Clear warnings for files that changed or need to be re-analyzed

apps/language_server/lib/language_server/dialyzer/manifest.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
defmodule ElixirLS.LanguageServer.Dialyzer.Manifest do
2-
alias ElixirLS.LanguageServer.{Dialyzer, JsonRpc}
2+
alias ElixirLS.LanguageServer.{Dialyzer, Dialyzer.Utils, JsonRpc}
33
import Record
44
import Dialyzer.Utils
55

@@ -125,7 +125,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer.Manifest do
125125
|> Path.wildcard()
126126
|> Enum.map(&pathname_to_module/1)
127127
|> expand_references()
128-
|> Enum.map(&:code.which/1)
128+
|> Enum.map(&Utils.get_beam_file/1)
129129
|> Enum.filter(&is_list/1)
130130

131131
File.mkdir_p!(Path.dirname(elixir_plt_path()))

apps/language_server/lib/language_server/dialyzer/utils.ex

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
11
defmodule ElixirLS.LanguageServer.Dialyzer.Utils do
22
@epoch_gregorian_seconds 62_167_219_200
33

4+
@spec dialyzable?(module()) :: boolean()
45
def dialyzable?(module) do
5-
file = :code.which(module)
6+
file = get_beam_file(module)
67
is_list(file) and match?({:ok, _}, :dialyzer_utils.get_core_from_beam(file))
78
end
89

10+
@spec get_beam_file(module()) :: charlist() | :preloaded | :non_existing | :cover_compiled
11+
def get_beam_file(module) do
12+
case :code.which(module) do
13+
file when is_list(file) ->
14+
file
15+
16+
other ->
17+
case :code.get_object_code(module) do
18+
{_module, _binary, beam_filename} -> beam_filename
19+
:error -> other
20+
end
21+
end
22+
end
23+
924
def pathname_to_module(path) do
1025
String.to_atom(Path.basename(path, ".beam"))
1126
end

0 commit comments

Comments
 (0)