From 22f9bbbe593d8ef4594222d5bc740dbbd41e6883 Mon Sep 17 00:00:00 2001 From: Lukasz Samson Date: Sun, 2 Mar 2025 21:52:34 +0100 Subject: [PATCH 1/2] Fix autocomplete crash when expanding struct with __MODULE__ --- lib/iex/lib/iex/autocomplete.ex | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/iex/lib/iex/autocomplete.ex b/lib/iex/lib/iex/autocomplete.ex index 97a002e17a4..5263bd5edaf 100644 --- a/lib/iex/lib/iex/autocomplete.ex +++ b/lib/iex/lib/iex/autocomplete.ex @@ -381,7 +381,8 @@ defmodule IEx.Autocomplete do case Code.Fragment.container_cursor_to_quoted(code) do {:ok, quoted} -> case Macro.path(quoted, &match?({:__cursor__, _, []}, &1)) do - [cursor, {:%{}, _, pairs}, {:%, _, [{:__aliases__, _, aliases}, _map]} | _] -> + [cursor, {:%{}, _, pairs}, {:%, _, [{:__aliases__, _, aliases = [h | _]}, _map]} | _] + when is_atom(h) -> container_context_struct(cursor, pairs, aliases, shell) [ @@ -389,8 +390,9 @@ defmodule IEx.Autocomplete do pairs, {:|, _, _}, {:%{}, _, _}, - {:%, _, [{:__aliases__, _, aliases}, _map]} | _ - ] -> + {:%, _, [{:__aliases__, _, aliases = [h | _]}, _map]} | _ + ] + when is_atom(h) -> container_context_struct(cursor, pairs, aliases, shell) [cursor, pairs, {:|, _, [{variable, _, nil} | _]}, {:%{}, _, _} | _] -> From 15d16de2cfe2a40e5635fbf108cecd00df69a961 Mon Sep 17 00:00:00 2001 From: Lukasz Samson Date: Tue, 4 Mar 2025 08:19:45 +0100 Subject: [PATCH 2/2] add test --- lib/iex/test/iex/autocomplete_test.exs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/iex/test/iex/autocomplete_test.exs b/lib/iex/test/iex/autocomplete_test.exs index e638ad77bb6..2a8949cee3d 100644 --- a/lib/iex/test/iex/autocomplete_test.exs +++ b/lib/iex/test/iex/autocomplete_test.exs @@ -430,6 +430,9 @@ defmodule IEx.AutocompleteTest do assert {:yes, ~c"ry: ", []} = expand(~c"%URI{path: \"foo\", que") assert {:no, [], []} = expand(~c"%URI{path: \"foo\", unkno") assert {:no, [], []} = expand(~c"%Unknown{path: \"foo\", unkno") + + assert {:yes, [], _} = expand(~c"%__MODULE__{") + assert {:yes, [], _} = expand(~c"%__MODULE__.Some{") end test "completion for struct keys in update syntax" do