diff --git a/.formatter.exs b/.formatter.exs index a3438b7..04529cf 100644 --- a/.formatter.exs +++ b/.formatter.exs @@ -16,6 +16,7 @@ "{config,lib,}/**/*.{ex,exs}", "test/credo_language_server_test.exs", "test/test_helper.exs", - "test/credo_language_server/**/*.{ex,exs}" + "test/credo_language_server/**/*.{ex,exs}", + "priv/**/*.ex" ] ] diff --git a/lib/credo_language_server.ex b/lib/credo_language_server.ex index db34174..7098ace 100644 --- a/lib/credo_language_server.ex +++ b/lib/credo_language_server.ex @@ -330,7 +330,7 @@ defmodule CredoLanguageServer do issues = CredoLanguageServer.Runtime.call( lsp.assigns.runtime, - {:_credo_language_server_private, :issues, [dir]} + {:_credo_language_server_private_credo, :issues, [dir]} ) for issue <- issues do diff --git a/lib/credo_language_server/runtime.ex b/lib/credo_language_server/runtime.ex index be4126d..4299cdb 100644 --- a/lib/credo_language_server/runtime.ex +++ b/lib/credo_language_server/runtime.ex @@ -6,6 +6,14 @@ defmodule CredoLanguageServer.Runtime do |> Path.join("cmd") |> Path.absname() + unless macro_exported?(Kernel, :then, 2) do + defmacrop then(value, fun) do + quote do + unquote(fun).(unquote(value)) + end + end + end + def start_link(opts) do GenServer.start_link(__MODULE__, opts, Keyword.take(opts, [:name])) end @@ -48,7 +56,8 @@ defmodule CredoLanguageServer.Runtime do :stream, cd: working_dir, env: [ - {'MIX_ENV', 'credolsp'} + {'MIX_ENV', 'dev'}, + {'MIX_BUILD_ROOT', '.elixir-tools/_build'} ], args: [ System.find_executable("elixir"), @@ -72,14 +81,23 @@ defmodule CredoLanguageServer.Runtime do true <- connect(node, port, 120) do send(parent, {:log, "Connected to node #{node}"}) - file = - Path.join( - :code.priv_dir(:credo_language_server), - "monkey/_credo_language_server_private.ex" + :credo_language_server + |> :code.priv_dir() + |> Path.join("monkey/_credo_language_server_private_compiler.ex") + |> then(&:rpc.call(node, Code, :compile_file, [&1])) + + :ok = + :rpc.call( + node, + :_credo_language_server_private_compiler, + :compile, + [] ) - :rpc.call(node, Code, :compile_file, [file]) - :ok = :rpc.call(node, :_credo_language_server_private, :compile, []) + :credo_language_server + |> :code.priv_dir() + |> Path.join("monkey/_credo_language_server_private_credo.ex") + |> then(&:rpc.call(node, Code, :compile_file, [&1])) send(me, {:node, node}) else diff --git a/priv/monkey/_credo_language_server_private.ex b/priv/monkey/_credo_language_server_private_compiler.ex similarity index 53% rename from priv/monkey/_credo_language_server_private.ex rename to priv/monkey/_credo_language_server_private_compiler.ex index 292fc8b..b448811 100644 --- a/priv/monkey/_credo_language_server_private.ex +++ b/priv/monkey/_credo_language_server_private_compiler.ex @@ -1,12 +1,6 @@ -defmodule :_credo_language_server_private do +defmodule :_credo_language_server_private_compiler do @moduledoc false - def issues(dir) do - ["--strict", "--all", "--working-dir", dir] - |> Credo.run() - |> Credo.Execution.get_issues() - end - def compile() do # keep stdout on this node Process.group_leader(self(), Process.whereis(:user)) @@ -16,6 +10,6 @@ defmodule :_credo_language_server_private do :ok rescue - _ -> :error + e -> {:error, e} end end diff --git a/priv/monkey/_credo_language_server_private_credo.ex b/priv/monkey/_credo_language_server_private_credo.ex new file mode 100644 index 0000000..e616a6b --- /dev/null +++ b/priv/monkey/_credo_language_server_private_credo.ex @@ -0,0 +1,9 @@ +defmodule :_credo_language_server_private_credo do + @moduledoc false + + def issues(dir) do + ["--strict", "--all", "--working-dir", dir] + |> Credo.run() + |> Credo.Execution.get_issues() + end +end diff --git a/test/test_helper.exs b/test/test_helper.exs index 0bbf6c6..d88b689 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -7,7 +7,7 @@ timeout = if System.get_env("CI", "false") == "true" do 60_000 else - 10_000 + 30_000 end -ExUnit.start(assert_receive_timeout: timeout) +ExUnit.start(assert_receive_timeout: timeout, timeout: 120_000)