diff --git a/lib/livebook/intellisense.ex b/lib/livebook/intellisense.ex index 4b4461203..b91da05ce 100644 --- a/lib/livebook/intellisense.ex +++ b/lib/livebook/intellisense.ex @@ -393,21 +393,20 @@ defmodule Livebook.Intellisense do """ @spec get_details(String.t(), pos_integer(), context()) :: Runtime.details_response() | nil def get_details(line, column, context) do - case IdentifierMatcher.locate_identifier(line, column, context) do - %{matches: []} -> + %{matches: matches, range: range} = IdentifierMatcher.locate_identifier(line, column, context) + + case Enum.filter(matches, &include_in_details?/1) do + [] -> nil - %{matches: matches, range: range} -> - contents = - matches - |> Enum.filter(&include_in_details?/1) - |> Enum.map(&format_details_item/1) - + matches -> + contents = Enum.map(matches, &format_details_item/1) %{range: range, contents: contents} end end defp include_in_details?(%{kind: :function, from_default: true}), do: false + defp include_in_details?(%{kind: :bitstring_modifier}), do: false defp include_in_details?(_), do: true defp format_details_item(%{kind: :variable, name: name}), do: code(name) diff --git a/test/livebook/intellisense_test.exs b/test/livebook/intellisense_test.exs index 287e65ab4..21fa641fb 100644 --- a/test/livebook/intellisense_test.exs +++ b/test/livebook/intellisense_test.exs @@ -1285,6 +1285,13 @@ defmodule Livebook.IntellisenseTest do assert to_string_fn =~ "Converts the argument to a string" end + test "returns nil for bitstring modifiers" do + context = eval(do: nil) + + assert nil == Intellisense.get_details("<>", 6, context) + assert nil == Intellisense.get_details("<>", 10, context) + end + test "includes full module name in the docs" do context = eval(do: nil)