From faa96a06a02029c510c8aa8a21a43a56b3022498 Mon Sep 17 00:00:00 2001 From: Alex Gubarev Date: Tue, 14 Jul 2026 20:19:10 +0300 Subject: [PATCH] Fix IEx completion crash on maps with non-atom keys --- lib/iex/lib/iex/autocomplete.ex | 2 +- lib/iex/test/iex/autocomplete_test.exs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/iex/lib/iex/autocomplete.ex b/lib/iex/lib/iex/autocomplete.ex index 95d38a218e0..8d52165eeeb 100644 --- a/lib/iex/lib/iex/autocomplete.ex +++ b/lib/iex/lib/iex/autocomplete.ex @@ -386,7 +386,7 @@ defmodule IEx.Autocomplete do end) entries = - for key when key != :__struct__ <- Map.keys(pairs), + for key when is_atom(key) and key != :__struct__ <- Map.keys(pairs), name = Atom.to_string(key), if(hint == "", do: not String.starts_with?(name, "_"), diff --git a/lib/iex/test/iex/autocomplete_test.exs b/lib/iex/test/iex/autocomplete_test.exs index 722c671ddde..3239b69fe81 100644 --- a/lib/iex/test/iex/autocomplete_test.exs +++ b/lib/iex/test/iex/autocomplete_test.exs @@ -510,6 +510,11 @@ defmodule IEx.AutocompleteTest do assert {:no, [], []} = expand(~c"%{unknown | some: \"foo\", unkno") end + test "completion for mixed type map keys in update syntax" do + eval("map = %{\"another\" => \"qwe\", some: 1, other: :ok}") + assert {:yes, ~c"me: ", []} = expand(~c"%{map | so") + end + test "completion for struct var keys" do eval("struct = %IEx.AutocompleteTest.MyStruct{}") assert expand(~c"struct.my") == {:yes, ~c"_val", []}