From 9f879dd0982d2d7733323e9a3f7153af7e360a9a Mon Sep 17 00:00:00 2001 From: Guillaume Milan Date: Mon, 6 Jan 2025 17:18:53 +0100 Subject: [PATCH 1/4] [IEx][Autocomplete] Fix crashing on autocompleting structs --- lib/iex/lib/iex/autocomplete.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/iex/lib/iex/autocomplete.ex b/lib/iex/lib/iex/autocomplete.ex index 66185695d98..7b2bb798545 100644 --- a/lib/iex/lib/iex/autocomplete.ex +++ b/lib/iex/lib/iex/autocomplete.ex @@ -362,7 +362,7 @@ defmodule IEx.Autocomplete do end) entries = - for {key, _value} <- pairs, + for key when key != :__struct__ <- Map.keys(pairs), name = Atom.to_string(key), if(hint == "", do: not String.starts_with?(name, "_"), From 37b04b3ede443053e7cc10fd0dae0d88aa05dd1e Mon Sep 17 00:00:00 2001 From: Guillaume Milan Date: Tue, 7 Jan 2025 10:47:23 +0100 Subject: [PATCH 2/4] [AutocompleteTest] completion for struct keys when var is struct --- lib/iex/test/iex/autocomplete_test.exs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/iex/test/iex/autocomplete_test.exs b/lib/iex/test/iex/autocomplete_test.exs index 7f6f26427db..02870b445af 100644 --- a/lib/iex/test/iex/autocomplete_test.exs +++ b/lib/iex/test/iex/autocomplete_test.exs @@ -440,6 +440,21 @@ defmodule IEx.AutocompleteTest do assert {:yes, ~c"ry: ", []} = expand(~c"%URI{var | path: \"foo\", que") assert {:no, [], []} = expand(~c"%URI{var | path: \"foo\", unkno") assert {:no, [], []} = expand(~c"%Unknown{var | path: \"foo\", unkno") + + eval "var = %URI{}" + + assert {:yes, ~c"", entries} = expand(~c"%{var | ") + assert ~c"path:" in entries + assert ~c"query:" in entries + + assert {:yes, ~c"", entries} = expand(~c"%{var | path: \"foo\",") + assert ~c"path:" not in entries + assert ~c"query:" in entries + + assert {:yes, ~c"ry: ", []} = expand(~c"%{var | path: \"foo\", que") + assert {:no, [], []} = expand(~c"%URI{var | path: \"foo\", unkno") + + end test "completion for map keys in update syntax" do From 07d17960515ceb595c9884ac2bbaafcb6cd8f7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 7 Jan 2025 11:12:22 +0100 Subject: [PATCH 3/4] Update lib/iex/test/iex/autocomplete_test.exs --- lib/iex/test/iex/autocomplete_test.exs | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/iex/test/iex/autocomplete_test.exs b/lib/iex/test/iex/autocomplete_test.exs index 02870b445af..906e32764e3 100644 --- a/lib/iex/test/iex/autocomplete_test.exs +++ b/lib/iex/test/iex/autocomplete_test.exs @@ -453,8 +453,6 @@ defmodule IEx.AutocompleteTest do assert {:yes, ~c"ry: ", []} = expand(~c"%{var | path: \"foo\", que") assert {:no, [], []} = expand(~c"%URI{var | path: \"foo\", unkno") - - end test "completion for map keys in update syntax" do From d607ac47e77c73c7ae4e0cd5fc9cdc4bb736e249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 7 Jan 2025 11:21:08 +0100 Subject: [PATCH 4/4] Update lib/iex/test/iex/autocomplete_test.exs --- lib/iex/test/iex/autocomplete_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/iex/test/iex/autocomplete_test.exs b/lib/iex/test/iex/autocomplete_test.exs index 906e32764e3..d4bd9b9c4bd 100644 --- a/lib/iex/test/iex/autocomplete_test.exs +++ b/lib/iex/test/iex/autocomplete_test.exs @@ -441,7 +441,7 @@ defmodule IEx.AutocompleteTest do assert {:no, [], []} = expand(~c"%URI{var | path: \"foo\", unkno") assert {:no, [], []} = expand(~c"%Unknown{var | path: \"foo\", unkno") - eval "var = %URI{}" + eval("var = %URI{}") assert {:yes, ~c"", entries} = expand(~c"%{var | ") assert ~c"path:" in entries