Skip docs requests for remote node intellisense (#2447)

This commit is contained in:
Jonatan Kłosko 2024-01-25 12:03:34 +01:00 committed by GitHub
parent 9c2df06b5d
commit 0056a81b7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 10 deletions

View file

@ -1,6 +1,12 @@
defmodule Livebook.Intellisense.Docs do
# This module is responsible for extracting and normalizing
# 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 :: %{
kind: member_kind(),
@ -38,6 +44,8 @@ defmodule Livebook.Intellisense.Docs do
Fetches documentation for the given module if available.
"""
@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
case :erpc.call(node, Code, :fetch_docs, [module]) do
{:docs_v1, _, _, format, %{"en" => docstring}, _, _} ->
@ -75,7 +83,11 @@ defmodule Livebook.Intellisense.Docs do
node(),
keyword()
) :: 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)
kinds = opts[:kinds] || [:function, :macro, :type]

View file

@ -74,7 +74,7 @@ defmodule Livebook.RemoteIntellisenseTest do
label: "RemoteModule",
kind: :module,
detail: "module",
documentation: "RemoteModule module docs",
documentation: "No documentation available",
insert_text: "RemoteModule"
} in Intellisense.get_completion_items("RemoteModule", context, node)
end
@ -85,8 +85,8 @@ defmodule Livebook.RemoteIntellisenseTest do
assert %{
label: "hello/1",
kind: :function,
detail: "RemoteModule.hello(message)",
documentation: "Hello doc",
detail: nil,
documentation: "No documentation available",
insert_text: "hello(${})"
} in Intellisense.get_completion_items("RemoteModule.hel", context, node)
end
@ -97,20 +97,20 @@ defmodule Livebook.RemoteIntellisenseTest do
assert [
%{
label: "all_keys/1",
label: "unsubscribe/1",
kind: :function,
detail: ":mnesia.all_keys/1",
documentation: _all_keys_doc,
insert_text: "all_keys(${})"
detail: nil,
documentation: "No documentation available",
insert_text: "unsubscribe(${})"
}
] = Intellisense.get_completion_items(":mnesia.all", context, node)
] = Intellisense.get_completion_items(":mnesia.unsub", context, node)
end
test "get details", %{node: node} do
context = eval(do: nil)
assert %{contents: [content]} = Intellisense.get_details("RemoteModule", 6, context, node)
assert content =~ "RemoteModule module docs"
assert content =~ "No documentation available"
end
end
end