Skip to content

Commit 9388198

Browse files
author
José Valim
committed
Ensure autocomplete does not raise on struct keys, closes #5576
Signed-off-by: José Valim <jose.valim@plataformatec.com.br>
1 parent 6ce366c commit 9388198

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

lib/iex/lib/iex/autocomplete.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,9 @@ defmodule IEx.Autocomplete do
287287
end
288288

289289
defp match_map_fields(map, hint) do
290-
for {key, value} <- map,
290+
for {key, value} <- Map.to_list(map),
291291
is_atom(key),
292-
key = to_string(key),
292+
key = Atom.to_string(key),
293293
String.starts_with?(key, hint),
294294
do: %{kind: :map_key, name: key, value_is_map: is_map(value)}
295295
end

lib/iex/test/iex/autocomplete_test.exs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,21 +229,21 @@ defmodule IEx.AutocompleteTest do
229229

230230
test "completion for functions added when compiled module is reloaded" do
231231
{:module, _, bytecode, _} =
232-
defmodule Elixir.Sample do
232+
defmodule Sample do
233233
def foo(), do: 0
234234
end
235-
File.write!("Elixir.Sample.beam", bytecode)
235+
File.write!("Elixir.IEx.AutocompleteTest.Sample.beam", bytecode)
236236
assert Code.get_docs(Sample, :docs)
237-
assert expand('Sample.foo') == {:yes, '', ['foo/0']}
237+
assert expand('IEx.AutocompleteTest.Sample.foo') == {:yes, '', ['foo/0']}
238238

239239
Code.compiler_options(ignore_module_conflict: true)
240-
defmodule Elixir.Sample do
240+
defmodule Sample do
241241
def foo(), do: 0
242242
def foobar(), do: 0
243243
end
244-
assert expand('Sample.foo') == {:yes, '', ['foo/0', 'foobar/0']}
244+
assert expand('IEx.AutocompleteTest.Sample.foo') == {:yes, '', ['foo/0', 'foobar/0']}
245245
after
246-
File.rm("Elixir.Sample.beam")
246+
File.rm("Elixir.IEx.AutocompleteTest.Sample.beam")
247247
Code.compiler_options(ignore_module_conflict: false)
248248
:code.purge(Sample)
249249
:code.delete(Sample)
@@ -253,7 +253,12 @@ defmodule IEx.AutocompleteTest do
253253
defstruct [:my_val]
254254
end
255255

256-
test "completion for structs" do
256+
test "completion for struct names" do
257257
assert expand('%IEx.AutocompleteTest.MyStr') == {:yes, 'uct', []}
258258
end
259+
260+
@tag previous_line: "struct = %IEx.AutocompleteTest.MyStruct{}"
261+
test "completion for struct keys" do
262+
assert expand('struct.my') == {:yes, '_val', []}
263+
end
259264
end

0 commit comments

Comments
 (0)