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} | _]}, {:%{}, _, _} | _] -> 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