Skip to content

Commit c25e22d

Browse files
authored
Vendor erlex, erl2ex, unload not needed apps (#989)
* update dialyxir to 1.4.1 vendor erlex * vendor erl2ex lock path_glob * unload and remove not wanted apps from code path * remove unloaded apps from code path
1 parent bf60d17 commit c25e22d

File tree

10 files changed

+73
-23
lines changed

10 files changed

+73
-23
lines changed

apps/elixir_ls_debugger/lib/debugger/cli.ex

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
defmodule ElixirLS.Debugger.CLI do
2+
alias ElixirLS.Utils
23
alias ElixirLS.Utils.{WireProtocol, Launch}
34
alias ElixirLS.Debugger.{Output, Server}
45

@@ -32,15 +33,26 @@ defmodule ElixirLS.Debugger.CLI do
3233

3334
Launch.limit_num_schedulers()
3435
warn_if_unsupported_version()
36+
37+
Launch.unload_not_needed_apps([
38+
:nimble_parsec,
39+
:mix_task_archive_deps,
40+
:language_server,
41+
:dialyxir_vendored,
42+
:path_glob_vendored,
43+
:erlex_vendored,
44+
:erl2ex_vendored
45+
])
46+
3547
WireProtocol.stream_packets(&Server.receive_packet/1)
3648
end
3749

3850
defp warn_if_unsupported_version do
39-
with {:error, message} <- ElixirLS.Utils.MinimumVersion.check_elixir_version() do
51+
with {:error, message} <- Utils.MinimumVersion.check_elixir_version() do
4052
Output.debugger_important("WARNING: " <> message)
4153
end
4254

43-
with {:error, message} <- ElixirLS.Utils.MinimumVersion.check_otp_version() do
55+
with {:error, message} <- Utils.MinimumVersion.check_otp_version() do
4456
Output.debugger_important("WARNING: " <> message)
4557
end
4658
end

apps/elixir_ls_utils/lib/launch.ex

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,26 @@ defmodule ElixirLS.Utils.Launch do
231231
raise Mix.NoTaskError, task: task
232232
end
233233
end
234+
235+
def unload_not_needed_apps(apps) do
236+
for app <- apps do
237+
modules =
238+
case :application.get_key(app, :modules) do
239+
{:ok, modules} -> modules
240+
_ -> []
241+
end
242+
243+
for module <- modules do
244+
:code.purge(module)
245+
:code.delete(module)
246+
end
247+
248+
lib_dir = :code.lib_dir(app)
249+
Application.unload(app)
250+
251+
if is_list(lib_dir) do
252+
:code.del_path(:filename.join(lib_dir, ~c"ebin"))
253+
end
254+
end
255+
end
234256
end

apps/elixir_ls_utils/test/support/mix_test.case.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ defmodule ElixirLS.Utils.MixTest.Case do
2020
statistex
2121
patch
2222
deep_merge
23-
erlex
23+
erlex_vendored
2424
benchee
2525
path_glob_vendored
2626
dialyzer
2727
dialyxir_vendored
28-
erl2ex
28+
erl2ex_vendored
2929
jason_v
3030
)a
3131

apps/language_server/lib/language_server/build.ex

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ defmodule ElixirLS.LanguageServer.Build do
297297
end
298298

299299
defp purge_app(app) do
300-
# TODO use hack with ets
301300
modules =
302301
case :application.get_key(app, :modules) do
303302
{:ok, modules} -> modules
@@ -314,12 +313,27 @@ defmodule ElixirLS.LanguageServer.Build do
314313
case Application.stop(app) do
315314
:ok -> :ok
316315
{:error, :not_started} -> :ok
317-
{:error, error} -> Logger.error("Application.stop failed for #{app}: #{inspect(error)}")
316+
{:error, error} -> Logger.warning("Application.stop failed for #{app}: #{inspect(error)}")
318317
end
319318

319+
lib_dir = :code.lib_dir(app)
320+
320321
case Application.unload(app) do
321322
:ok -> :ok
322-
{:error, error} -> Logger.error("Application.unload failed for #{app}: #{inspect(error)}")
323+
{:error, error} -> Logger.warning("Application.unload failed for #{app}: #{inspect(error)}")
324+
end
325+
326+
if is_list(lib_dir) do
327+
case :code.del_path(:filename.join(lib_dir, ~c"ebin")) do
328+
true ->
329+
:ok
330+
331+
false ->
332+
:ok
333+
334+
{:error, reason} ->
335+
Logger.warning("Unable to clean code path for #{app}: #{inspect(reason)}")
336+
end
323337
end
324338
end
325339

@@ -359,15 +373,13 @@ defmodule ElixirLS.LanguageServer.Build do
359373
:language_server,
360374
:elixir_ls_utils,
361375
:elixir_sense,
362-
:stream_data,
363376
:jason_v,
364377
:path_glob_vendored,
365378
:dialyxir_vendored,
366-
:erl2ex,
367-
:patch,
368-
:benchee
379+
:erlex_vendored,
380+
:erl2ex_vendored
369381
] do
370-
raise "Unloading #{app}"
382+
raise "Unloading required #{app}"
371383
end
372384

373385
for path <- Mix.Dep.load_paths(dep) do

apps/language_server/lib/language_server/cli.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ defmodule ElixirLS.LanguageServer.CLI do
6565

6666
Mix.shell(ElixirLS.LanguageServer.MixShell)
6767

68+
Launch.unload_not_needed_apps([:nimble_parsec, :mix_task_archive_deps, :elixir_ls_debugger])
69+
6870
WireProtocol.stream_packets(&JsonRpc.receive_packet/1)
6971
end
7072

apps/language_server/lib/language_server/providers/code_lens/type_spec/contract_translator.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule ElixirLS.LanguageServer.Providers.CodeLens.TypeSpec.ContractTranslator do
22
@moduledoc false
3-
alias Erl2ex.Convert.{Context, ErlForms}
4-
alias Erl2ex.Pipeline.{Parse, ModuleData, ExSpec}
3+
alias Erl2exVendored.Convert.{Context, ErlForms}
4+
alias Erl2exVendored.Pipeline.{Parse, ModuleData, ExSpec}
55

66
def translate_contract(fun, contract, is_macro, mod) do
77
# FIXME: Private module

apps/language_server/lib/language_server/server.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ defmodule ElixirLS.LanguageServer.Server do
285285
case source_files[uri] do
286286
%SourceFile{} = source_file ->
287287
file = SourceFile.Path.from_uri(uri)
288+
288289
case parse_file(source_file.text, file) do
289290
[] ->
290291
Map.delete(state.parser_diagnostics, uri)

apps/language_server/mix.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ defmodule ElixirLS.LanguageServer.Mixfile do
3838
[
3939
{:elixir_ls_utils, in_umbrella: true},
4040
{:elixir_sense, github: "elixir-lsp/elixir_sense", ref: @dep_versions[:elixir_sense]},
41-
{:erl2ex, github: "dazuma/erl2ex"},
41+
{:erl2ex_vendored, github: "elixir-lsp/erl2ex", ref: @dep_versions[:erl2ex_vendored]},
4242
{:dialyxir_vendored,
4343
github: "elixir-lsp/dialyxir", ref: @dep_versions[:dialyxir_vendored], runtime: false},
4444
{:jason_v, github: "elixir-lsp/jason", ref: @dep_versions[:jason_v]},
4545
{:stream_data, "~> 0.5", only: [:dev, :test], runtime: false},
46-
{:path_glob_vendored, github: "elixir-lsp/path_glob", branch: "vendored"},
46+
{:path_glob_vendored, github: "elixir-lsp/path_glob", ref: @dep_versions[:path_glob_vendored]},
4747
{:patch, "~> 0.12.0", only: [:dev, :test], runtime: false},
4848
{:benchee, "~> 1.0", only: :dev, runtime: false}
4949
]

dep_versions.exs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
[
22
elixir_sense: "6a9f011ce5148b84de0fa1b142e38ccdbc26340c",
3-
dialyxir_vendored: "7e908b4d760c7329046e0ee3076be9156cd784e1",
4-
jason_v: "c81537e2a5e1acacb915cf339fe400357e3c2aaa"
3+
dialyxir_vendored: "d50dcd7101c6ebd37b57b7ee4a7888d8cb634782",
4+
jason_v: "c81537e2a5e1acacb915cf339fe400357e3c2aaa",
5+
erl2ex_vendored: "073ac6b9a44282e718b6050c7b27cedf9217a12a",
6+
path_glob_vendored: "965350dc41def7be4a70a23904195c733a2ecc84"
57
]

mix.lock

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
%{
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"},
4-
"dialyxir_vendored": {:git, "https://github.com/elixir-lsp/dialyxir.git", "7e908b4d760c7329046e0ee3076be9156cd784e1", [ref: "7e908b4d760c7329046e0ee3076be9156cd784e1"]},
4+
"dialyxir_vendored": {:git, "https://github.com/elixir-lsp/dialyxir.git", "d50dcd7101c6ebd37b57b7ee4a7888d8cb634782", [ref: "d50dcd7101c6ebd37b57b7ee4a7888d8cb634782"]},
55
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "6a9f011ce5148b84de0fa1b142e38ccdbc26340c", [ref: "6a9f011ce5148b84de0fa1b142e38ccdbc26340c"]},
6-
"erl2ex": {:git, "https://github.com/dazuma/erl2ex.git", "244c2d9ed5805ef4855a491d8616b8842fef7ca4", []},
7-
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
6+
"erl2ex_vendored": {:git, "https://github.com/elixir-lsp/erl2ex.git", "073ac6b9a44282e718b6050c7b27cedf9217a12a", [ref: "073ac6b9a44282e718b6050c7b27cedf9217a12a"]},
7+
"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"]},
9-
"jason_vendored": {:git, "https://github.com/elixir-lsp/jason.git", "e23c65b98411a3066ca73534b4aed1d23bcf0356", [branch: "vendored"]},
109
"mix_task_archive_deps": {:git, "https://github.com/elixir-lsp/mix_task_archive_deps.git", "30fa76221def649286835685fec5d151be83c354", []},
1110
"nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"},
1211
"patch": {:hex, :patch, "0.12.0", "2da8967d382bade20344a3e89d618bfba563b12d4ac93955468e830777f816b0", [:mix], [], "hexpm", "ffd0e9a7f2ad5054f37af84067ee88b1ad337308a1cb227e181e3967127b0235"},
13-
"path_glob_vendored": {:git, "https://github.com/elixir-lsp/path_glob.git", "965350dc41def7be4a70a23904195c733a2ecc84", [branch: "vendored"]},
12+
"path_glob_vendored": {:git, "https://github.com/elixir-lsp/path_glob.git", "965350dc41def7be4a70a23904195c733a2ecc84", [ref: "965350dc41def7be4a70a23904195c733a2ecc84"]},
1413
"statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"},
1514
"stream_data": {:hex, :stream_data, "0.5.0", "b27641e58941685c75b353577dc602c9d2c12292dd84babf506c2033cd97893e", [:mix], [], "hexpm", "012bd2eec069ada4db3411f9115ccafa38540a3c78c4c0349f151fc761b9e271"},
1615
}

0 commit comments

Comments
 (0)