mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-09 21:16:26 +08:00
Skip docs requests for remote node intellisense (#2447)
This commit is contained in:
parent
9c2df06b5d
commit
0056a81b7f
2 changed files with 22 additions and 10 deletions
|
@ -1,6 +1,12 @@
|
||||||
defmodule Livebook.Intellisense.Docs do
|
defmodule Livebook.Intellisense.Docs do
|
||||||
# This module is responsible for extracting and normalizing
|
# This module is responsible for extracting and normalizing
|
||||||
# information like documentation, signatures and specs.
|
# information like documentation, signatures and specs.
|
||||||
|
#
|
||||||
|
# Note that we only extract the docs information when requested for
|
||||||
|
# for the current node. For remote nodes, making several requests
|
||||||
|
# for docs (which may be necessary if there are multiple modules)
|
||||||
|
# adds to the overall latency. Remote intellisense is primarily used
|
||||||
|
# with remote release nodes, which have docs stripped out anyway.
|
||||||
|
|
||||||
@type member_info :: %{
|
@type member_info :: %{
|
||||||
kind: member_kind(),
|
kind: member_kind(),
|
||||||
|
@ -38,6 +44,8 @@ defmodule Livebook.Intellisense.Docs do
|
||||||
Fetches documentation for the given module if available.
|
Fetches documentation for the given module if available.
|
||||||
"""
|
"""
|
||||||
@spec get_module_documentation(module(), node()) :: documentation()
|
@spec get_module_documentation(module(), node()) :: documentation()
|
||||||
|
def get_module_documentation(_module, node) when node != node(), do: nil
|
||||||
|
|
||||||
def get_module_documentation(module, node) do
|
def get_module_documentation(module, node) do
|
||||||
case :erpc.call(node, Code, :fetch_docs, [module]) do
|
case :erpc.call(node, Code, :fetch_docs, [module]) do
|
||||||
{:docs_v1, _, _, format, %{"en" => docstring}, _, _} ->
|
{:docs_v1, _, _, format, %{"en" => docstring}, _, _} ->
|
||||||
|
@ -75,7 +83,11 @@ defmodule Livebook.Intellisense.Docs do
|
||||||
node(),
|
node(),
|
||||||
keyword()
|
keyword()
|
||||||
) :: list(member_info())
|
) :: list(member_info())
|
||||||
def lookup_module_members(module, members, node, opts \\ []) do
|
def lookup_module_members(module, members, node, opts \\ [])
|
||||||
|
|
||||||
|
def lookup_module_members(_module, _members, node, _opts) when node != node(), do: []
|
||||||
|
|
||||||
|
def lookup_module_members(module, members, node, opts) do
|
||||||
members = MapSet.new(members)
|
members = MapSet.new(members)
|
||||||
kinds = opts[:kinds] || [:function, :macro, :type]
|
kinds = opts[:kinds] || [:function, :macro, :type]
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ defmodule Livebook.RemoteIntellisenseTest do
|
||||||
label: "RemoteModule",
|
label: "RemoteModule",
|
||||||
kind: :module,
|
kind: :module,
|
||||||
detail: "module",
|
detail: "module",
|
||||||
documentation: "RemoteModule module docs",
|
documentation: "No documentation available",
|
||||||
insert_text: "RemoteModule"
|
insert_text: "RemoteModule"
|
||||||
} in Intellisense.get_completion_items("RemoteModule", context, node)
|
} in Intellisense.get_completion_items("RemoteModule", context, node)
|
||||||
end
|
end
|
||||||
|
@ -85,8 +85,8 @@ defmodule Livebook.RemoteIntellisenseTest do
|
||||||
assert %{
|
assert %{
|
||||||
label: "hello/1",
|
label: "hello/1",
|
||||||
kind: :function,
|
kind: :function,
|
||||||
detail: "RemoteModule.hello(message)",
|
detail: nil,
|
||||||
documentation: "Hello doc",
|
documentation: "No documentation available",
|
||||||
insert_text: "hello(${})"
|
insert_text: "hello(${})"
|
||||||
} in Intellisense.get_completion_items("RemoteModule.hel", context, node)
|
} in Intellisense.get_completion_items("RemoteModule.hel", context, node)
|
||||||
end
|
end
|
||||||
|
@ -97,20 +97,20 @@ defmodule Livebook.RemoteIntellisenseTest do
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
%{
|
%{
|
||||||
label: "all_keys/1",
|
label: "unsubscribe/1",
|
||||||
kind: :function,
|
kind: :function,
|
||||||
detail: ":mnesia.all_keys/1",
|
detail: nil,
|
||||||
documentation: _all_keys_doc,
|
documentation: "No documentation available",
|
||||||
insert_text: "all_keys(${})"
|
insert_text: "unsubscribe(${})"
|
||||||
}
|
}
|
||||||
] = Intellisense.get_completion_items(":mnesia.all", context, node)
|
] = Intellisense.get_completion_items(":mnesia.unsub", context, node)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "get details", %{node: node} do
|
test "get details", %{node: node} do
|
||||||
context = eval(do: nil)
|
context = eval(do: nil)
|
||||||
|
|
||||||
assert %{contents: [content]} = Intellisense.get_details("RemoteModule", 6, context, node)
|
assert %{contents: [content]} = Intellisense.get_details("RemoteModule", 6, context, node)
|
||||||
assert content =~ "RemoteModule module docs"
|
assert content =~ "No documentation available"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue