Skip to content

Commit f306af5

Browse files
committed
Update to_quoted logic
1 parent 664396d commit f306af5

File tree

3 files changed

+18
-22
lines changed

3 files changed

+18
-22
lines changed

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,7 +1080,7 @@ defmodule Module.Types.Descr do
10801080
defp list_tl_static(%{}), do: none()
10811081

10821082
defp list_improper_term?(:term), do: true
1083-
defp list_improper_term?(term), do: equal?(term, @not_list) or equal?(term, @not_non_empty_list)
1083+
defp list_improper_term?(term), do: equal?(term, @not_non_empty_list)
10841084

10851085
defp list_to_quoted(dnf, empty?, opts) do
10861086
dnf = list_normalize(dnf)
@@ -1092,17 +1092,14 @@ defmodule Module.Types.Descr do
10921092
name = if empty?, do: :list, else: :non_empty_list
10931093
{name, [to_quoted(list_type, opts)], empty?}
10941094
else
1095-
type =
1096-
if subtype?(@empty_list, last_type),
1097-
do: :non_empty_maybe_improper_list,
1098-
else: :improper_list
1095+
name = if empty?, do: :maybe_improper_list, else: :non_empty_maybe_improper_list
10991096

1100-
# mark improper_list(term(), term()) as such rather than:
1101-
# improper_list(term(), atom() or binary() or float() or ...)
1097+
# mark non_empty_maybe_improper_list(term(), term()) as such rather than:
1098+
# non_empty_maybe_improper_list(term(), atom() or binary() or float() or ...)
11021099
rendered_last_type = if list_improper_term?(last_type), do: :term, else: last_type
11031100

11041101
args = [to_quoted(list_type, opts), to_quoted(rendered_last_type, opts)]
1105-
{type, args, list_rendered?}
1102+
{name, args, empty?}
11061103
end
11071104

11081105
acc =

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,13 +1328,13 @@ defmodule Module.Types.DescrTest do
13281328
"non_empty_list(atom()) or non_empty_list(integer())"
13291329

13301330
assert list(term(), integer()) |> to_quoted_string() ==
1331-
"empty_list() or improper_list(term(), integer())"
1331+
"maybe_improper_list(term(), integer())"
13321332

13331333
assert difference(list(term(), atom()), list(term(), boolean())) |> to_quoted_string() ==
1334-
"improper_list(term(), atom() and not boolean())"
1334+
"non_empty_maybe_improper_list(term(), atom() and not boolean())"
13351335

13361336
assert list(term(), term()) |> to_quoted_string() ==
1337-
"empty_list() or non_empty_maybe_improper_list(term(), term())"
1337+
"maybe_improper_list(term(), term())"
13381338

13391339
assert non_empty_maybe_improper_list(term(), term()) |> to_quoted_string() ==
13401340
"non_empty_maybe_improper_list(term(), term())"
@@ -1347,20 +1347,19 @@ defmodule Module.Types.DescrTest do
13471347
"non_empty_maybe_improper_list(integer(), integer())"
13481348

13491349
assert union(empty_list(), non_empty_maybe_improper_list(integer(), integer()))
1350-
|> to_quoted_string() ==
1351-
"empty_list() or non_empty_maybe_improper_list(integer(), integer())"
1350+
|> to_quoted_string() == "maybe_improper_list(integer(), integer())"
13521351

13531352
assert union(non_empty_list(integer()), non_empty_maybe_improper_list(integer(), integer()))
13541353
|> to_quoted_string() ==
13551354
"non_empty_maybe_improper_list(integer(), empty_list() or integer())"
13561355

13571356
assert union(list(integer()), non_empty_maybe_improper_list(integer(), integer()))
13581357
|> to_quoted_string() ==
1359-
"empty_list() or non_empty_maybe_improper_list(integer(), empty_list() or integer())"
1358+
"maybe_improper_list(integer(), empty_list() or integer())"
13601359

13611360
assert union(list(term()), non_empty_maybe_improper_list(term(), term()))
13621361
|> to_quoted_string() ==
1363-
"empty_list() or non_empty_maybe_improper_list(term(), term())"
1362+
"maybe_improper_list(term(), term())"
13641363

13651364
# Test normalization
13661365

@@ -1369,15 +1368,15 @@ defmodule Module.Types.DescrTest do
13691368

13701369
# Merge subtypes
13711370
assert union(list(float(), pid()), list(number(), pid())) |> to_quoted_string() ==
1372-
"empty_list() or improper_list(float() or integer(), pid())"
1371+
"maybe_improper_list(float() or integer(), pid())"
13731372

13741373
# Merge last element types
13751374
assert union(list(atom([:ok]), integer()), list(atom([:ok]), float())) |> to_quoted_string() ==
1376-
"empty_list() or improper_list(:ok, float() or integer())"
1375+
"maybe_improper_list(:ok, float() or integer())"
13771376

13781377
assert union(dynamic(list(integer(), float())), dynamic(list(integer(), pid())))
13791378
|> to_quoted_string() ==
1380-
"dynamic(empty_list() or improper_list(integer(), float() or pid()))"
1379+
"dynamic(maybe_improper_list(integer(), float() or pid()))"
13811380
end
13821381

13831382
test "tuples" do

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ defmodule Module.Types.IntegrationTest do
487487
dynamic(
488488
%Date{} or %DateTime{} or %NaiveDateTime{} or %Time{} or %URI{} or %Version{} or
489489
%Version.Requirement{}
490-
) or atom() or binary() or empty_list() or float() or integer() or non_empty_maybe_improper_list(term(), term())
490+
) or atom() or binary() or float() or integer() or maybe_improper_list(term(), term())
491491
492492
where "data" was given the type:
493493
@@ -511,7 +511,7 @@ defmodule Module.Types.IntegrationTest do
511511
dynamic(
512512
%Date{} or %DateTime{} or %NaiveDateTime{} or %Time{} or %URI{} or %Version{} or
513513
%Version.Requirement{}
514-
) or atom() or binary() or empty_list() or float() or integer() or non_empty_maybe_improper_list(term(), term())
514+
) or atom() or binary() or float() or integer() or maybe_improper_list(term(), term())
515515
516516
where "data" was given the type:
517517
@@ -551,7 +551,7 @@ defmodule Module.Types.IntegrationTest do
551551
dynamic(
552552
%Date.Range{} or %File.Stream{} or %GenEvent.Stream{} or %HashDict{} or %HashSet{} or
553553
%IO.Stream{} or %MapSet{} or %Range{} or %Stream{}
554-
) or empty_list() or fun() or non_empty_maybe_improper_list(term(), term()) or non_struct_map()
554+
) or fun() or maybe_improper_list(term(), term()) or non_struct_map()
555555
556556
where "date" was given the type:
557557
@@ -580,7 +580,7 @@ defmodule Module.Types.IntegrationTest do
580580
but expected a type that implements the Collectable protocol, it must be one of:
581581
582582
dynamic(%File.Stream{} or %HashDict{} or %HashSet{} or %IO.Stream{} or %MapSet{}) or binary() or
583-
empty_list() or non_empty_maybe_improper_list(term(), term()) or non_struct_map()
583+
maybe_improper_list(term(), term()) or non_struct_map()
584584
585585
hint: the :into option in for-comprehensions use the Collectable protocol to build its result. Either pass a valid data type or implement the protocol accordingly
586586
"""

0 commit comments

Comments
 (0)