Skip to content

Commit 6d1d39a

Browse files
committed
Ellide if_set for domain types
1 parent 22d6d03 commit 6d1d39a

4 files changed

Lines changed: 16 additions & 7 deletions

File tree

lib/elixir/lib/module/types/descr.ex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3630,7 +3630,16 @@ defmodule Module.Types.Descr do
36303630
def map_literal_to_quoted({domains = %{}, fields}, opts) do
36313631
domain_fields =
36323632
for {domain_key, value_type} <- domains do
3633-
{{domain_key, [], []}, map_value_to_quoted(value_type, opts)}
3633+
non_optional = remove_optional_static(value_type)
3634+
3635+
value_quoted =
3636+
if empty?(non_optional) do
3637+
{:not_set, [], []}
3638+
else
3639+
map_value_to_quoted(non_optional, opts)
3640+
end
3641+
3642+
{{domain_key, [], []}, value_quoted}
36343643
end
36353644

36363645
regular_fields_quoted = map_fields_to_quoted(:closed, Enum.sort(fields), opts)

lib/elixir/lib/module/types/of.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ defmodule Module.Types.Of do
281281
{keys, union(old_type, new_type)}
282282
end)
283283

284-
{Enum.map(negated -- matched, fn key -> {key, none()} end) ++ single, multiple}
284+
{Enum.map(negated -- matched, fn key -> {key, not_set()} end) ++ single, multiple}
285285
end
286286

287287
defp pairs(pairs, expected, stack, context, of_fun) do

lib/elixir/test/elixir/module/types/descr_test.exs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2286,10 +2286,10 @@ defmodule Module.Types.DescrTest do
22862286

22872287
test "maps as dictionaries" do
22882288
assert closed_map([{domain_key(:integer), integer()}])
2289-
|> to_quoted_string() == "%{integer() => if_set(integer())}"
2289+
|> to_quoted_string() == "%{integer() => integer()}"
22902290

2291-
assert closed_map([{domain_key(:integer), integer()}, {:float, float()}])
2292-
|> to_quoted_string() == "%{integer() => if_set(integer()), float: float()}"
2291+
assert closed_map([{domain_key(:integer), not_set()}, {:float, float()}])
2292+
|> to_quoted_string() == "%{integer() => not_set(), float: float()}"
22932293
end
22942294

22952295
test "structs" do

lib/elixir/test/elixir/module/types/expr_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ defmodule Module.Types.ExprTest do
12021202
12031203
but got type:
12041204
1205-
%{integer() => if_set(:old)}
1205+
%{integer() => :old}
12061206
12071207
where "key" was given the type:
12081208
@@ -1212,7 +1212,7 @@ defmodule Module.Types.ExprTest do
12121212
12131213
where "x" was given the type:
12141214
1215-
# type: %{integer() => if_set(:old)}
1215+
# type: %{integer() => :old}
12161216
# from: types_test.ex:LINE-3
12171217
x = %{String.to_integer(key) => :old}
12181218
"""

0 commit comments

Comments
 (0)