mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-12-18 14:09:38 +08:00
Improve intellisense modules handling (#2745)
This commit is contained in:
parent
1983e4ca21
commit
8544419137
4 changed files with 41 additions and 9 deletions
|
|
@ -24,9 +24,38 @@ defmodule Livebook.Intellisense do
|
||||||
map_binding: (Code.binding() -> any())
|
map_binding: (Code.binding() -> any())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Adjusts the system for more accurate intellisense.
|
||||||
|
"""
|
||||||
|
@spec load() :: :ok
|
||||||
|
def load() do
|
||||||
|
# Completion looks for modules in loaded applications, so we ensure
|
||||||
|
# that the most relevant built-in applications are loaded
|
||||||
|
apps = [:erts, :crypto, :inets, :public_key, :runtime_tools, :ex_unit, :iex]
|
||||||
|
|
||||||
|
for app <- apps do
|
||||||
|
Application.load(app)
|
||||||
|
end
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Clears all cache stored by the intellisense modules.
|
||||||
|
"""
|
||||||
|
@spec clear_cache() :: :ok
|
||||||
|
def clear_cache() do
|
||||||
|
for node <- Node.list() do
|
||||||
|
clear_cache(node)
|
||||||
|
end
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Clear any cache stored related to the given node.
|
Clear any cache stored related to the given node.
|
||||||
"""
|
"""
|
||||||
|
@spec clear_cache(node()) :: :ok
|
||||||
def clear_cache(node) do
|
def clear_cache(node) do
|
||||||
IdentifierMatcher.clear_all_loaded(node)
|
IdentifierMatcher.clear_all_loaded(node)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,10 @@ defmodule Livebook.Runtime.ErlDist.NodeManager do
|
||||||
Code.prepend_path(ebin_path)
|
Code.prepend_path(ebin_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Livebook.Intellisense.load()
|
||||||
|
|
||||||
|
:net_kernel.monitor_nodes(true, node_type: :all)
|
||||||
|
|
||||||
{:ok,
|
{:ok,
|
||||||
%{
|
%{
|
||||||
unload_modules_on_termination: unload_modules_on_termination,
|
unload_modules_on_termination: unload_modules_on_termination,
|
||||||
|
|
@ -163,6 +167,8 @@ defmodule Livebook.Runtime.ErlDist.NodeManager do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def terminate(_reason, state) do
|
def terminate(_reason, state) do
|
||||||
|
Livebook.Intellisense.clear_cache()
|
||||||
|
|
||||||
Code.compiler_options(ignore_module_conflict: state.initial_ignore_module_conflict)
|
Code.compiler_options(ignore_module_conflict: state.initial_ignore_module_conflict)
|
||||||
|
|
||||||
if ansi_syntax_colors = state.initial_ansi_syntax_colors do
|
if ansi_syntax_colors = state.initial_ansi_syntax_colors do
|
||||||
|
|
@ -238,6 +244,11 @@ defmodule Livebook.Runtime.ErlDist.NodeManager do
|
||||||
{:noreply, state}
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_info({:nodedown, node, _metadata}, state) do
|
||||||
|
Livebook.Intellisense.clear_cache(node)
|
||||||
|
{:noreply, state}
|
||||||
|
end
|
||||||
|
|
||||||
def handle_info(_message, state), do: {:noreply, state}
|
def handle_info(_message, state), do: {:noreply, state}
|
||||||
|
|
||||||
defp make_tmp_dir() do
|
defp make_tmp_dir() do
|
||||||
|
|
|
||||||
|
|
@ -335,7 +335,7 @@ defmodule Livebook.Runtime.ErlDist.RuntimeServer do
|
||||||
@impl true
|
@impl true
|
||||||
def init(opts) do
|
def init(opts) do
|
||||||
Process.send_after(self(), :check_owner, @await_owner_timeout)
|
Process.send_after(self(), :check_owner, @await_owner_timeout)
|
||||||
:net_kernel.monitor_nodes(true, node_type: :all)
|
|
||||||
schedule_memory_usage_report()
|
schedule_memory_usage_report()
|
||||||
|
|
||||||
{:ok, evaluator_supervisor} = ErlDist.EvaluatorSupervisor.start_link()
|
{:ok, evaluator_supervisor} = ErlDist.EvaluatorSupervisor.start_link()
|
||||||
|
|
@ -383,11 +383,6 @@ defmodule Livebook.Runtime.ErlDist.RuntimeServer do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_info({:nodedown, node, _metadata}, state) do
|
|
||||||
Livebook.Intellisense.clear_cache(node)
|
|
||||||
{:noreply, state}
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_info({:DOWN, _, :process, owner, _}, %{owner: owner} = state) do
|
def handle_info({:DOWN, _, :process, owner, _}, %{owner: owner} = state) do
|
||||||
{:stop, :shutdown, state}
|
{:stop, :shutdown, state}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,6 @@ Livebook.Runtime.ErlDist.NodeManager.start(
|
||||||
unload_modules_on_termination: false
|
unload_modules_on_termination: false
|
||||||
)
|
)
|
||||||
|
|
||||||
# We load erts so we can access its modules for completion.
|
|
||||||
Application.load(:erts)
|
|
||||||
|
|
||||||
# Use the embedded runtime in tests by default, so they are cheaper
|
# Use the embedded runtime in tests by default, so they are cheaper
|
||||||
# to run. Other runtimes can be tested by setting them explicitly
|
# to run. Other runtimes can be tested by setting them explicitly
|
||||||
Application.put_env(:livebook, :default_runtime, Livebook.Runtime.Embedded.new())
|
Application.put_env(:livebook, :default_runtime, Livebook.Runtime.Embedded.new())
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue