Skip to content

Commit 8e8e30e

Browse files
committed
Refactor fits to return :fit | :no_fit
1 parent 1889ee9 commit 8e8e30e

File tree

1 file changed

+44
-43
lines changed

1 file changed

+44
-43
lines changed

lib/elixir/lib/inspect/algebra.ex

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -981,12 +981,12 @@ defmodule Inspect.Algebra do
981981
#
982982
@typep mode :: :flat | :flat_no_break | :break | :break_no_flat
983983

984-
@spec fits?(
984+
@spec fits(
985985
width :: non_neg_integer() | :infinity,
986986
column :: non_neg_integer(),
987987
break? :: boolean(),
988988
entries
989-
) :: boolean()
989+
) :: :fit | :no_fit
990990
when entries:
991991
maybe_improper_list({integer(), mode(), t()}, {:tail, boolean(), entries} | [])
992992

@@ -995,63 +995,63 @@ defmodule Inspect.Algebra do
995995
#
996996
# In case we have groups and the group fits, we need to consider the group
997997
# parent without the child breaks, hence {:tail, b?, t} below.
998-
defp fits?(w, k, b?, _) when k > w and b?, do: false
999-
defp fits?(_, _, _, []), do: true
1000-
defp fits?(w, k, _, {:tail, b?, t}), do: fits?(w, k, b?, t)
998+
defp fits(w, k, b?, _) when k > w and b?, do: :no_fit
999+
defp fits(_, _, _, []), do: :fit
1000+
defp fits(w, k, _, {:tail, b?, t}), do: fits(w, k, b?, t)
10011001

10021002
## Flat no break
10031003

1004-
defp fits?(w, k, b?, [{i, _, doc_fits(x, :disabled)} | t]),
1005-
do: fits?(w, k, b?, [{i, :flat_no_break, x} | t])
1004+
defp fits(w, k, b?, [{i, _, doc_fits(x, :disabled)} | t]),
1005+
do: fits(w, k, b?, [{i, :flat_no_break, x} | t])
10061006

1007-
defp fits?(w, k, b?, [{i, :flat_no_break, doc_fits(x, _)} | t]),
1008-
do: fits?(w, k, b?, [{i, :flat_no_break, x} | t])
1007+
defp fits(w, k, b?, [{i, :flat_no_break, doc_fits(x, _)} | t]),
1008+
do: fits(w, k, b?, [{i, :flat_no_break, x} | t])
10091009

10101010
## Breaks no flat
10111011

1012-
defp fits?(w, k, b?, [{i, _, doc_fits(x, :enabled)} | t]),
1013-
do: fits?(w, k, b?, [{i, :break_no_flat, x} | t])
1012+
defp fits(w, k, b?, [{i, _, doc_fits(x, :enabled)} | t]),
1013+
do: fits(w, k, b?, [{i, :break_no_flat, x} | t])
10141014

1015-
defp fits?(w, k, b?, [{i, :break_no_flat, doc_force(x)} | t]),
1016-
do: fits?(w, k, b?, [{i, :break_no_flat, x} | t])
1015+
defp fits(w, k, b?, [{i, :break_no_flat, doc_force(x)} | t]),
1016+
do: fits(w, k, b?, [{i, :break_no_flat, x} | t])
10171017

1018-
defp fits?(_, _, _, [{_, :break_no_flat, doc_break(_, _)} | _]), do: true
1019-
defp fits?(_, _, _, [{_, :break_no_flat, :doc_line} | _]), do: true
1018+
defp fits(_, _, _, [{_, :break_no_flat, doc_break(_, _)} | _]), do: :fit
1019+
defp fits(_, _, _, [{_, :break_no_flat, :doc_line} | _]), do: :fit
10201020

10211021
## Breaks
10221022

1023-
defp fits?(_, _, _, [{_, :break, doc_break(_, _)} | _]), do: true
1024-
defp fits?(_, _, _, [{_, :break, :doc_line} | _]), do: true
1023+
defp fits(_, _, _, [{_, :break, doc_break(_, _)} | _]), do: :fit
1024+
defp fits(_, _, _, [{_, :break, :doc_line} | _]), do: :fit
10251025

1026-
defp fits?(w, k, b?, [{i, :break, doc_group(x, _)} | t]),
1027-
do: fits?(w, k, b?, [{i, :flat, x} | {:tail, b?, t}])
1026+
defp fits(w, k, b?, [{i, :break, doc_group(x, _)} | t]),
1027+
do: fits(w, k, b?, [{i, :flat, x} | {:tail, b?, t}])
10281028

10291029
## Catch all
10301030

1031-
defp fits?(w, _, _, [{i, _, :doc_line} | t]), do: fits?(w, i, false, t)
1032-
defp fits?(w, k, b?, [{_, _, :doc_nil} | t]), do: fits?(w, k, b?, t)
1033-
defp fits?(w, _, b?, [{i, _, doc_collapse(_)} | t]), do: fits?(w, i, b?, t)
1034-
defp fits?(w, k, b?, [{i, m, doc_color(x, _)} | t]), do: fits?(w, k, b?, [{i, m, x} | t])
1035-
defp fits?(w, k, b?, [{_, _, doc_string(_, l)} | t]), do: fits?(w, k + l, b?, t)
1036-
defp fits?(w, k, b?, [{_, _, s} | t]) when is_binary(s), do: fits?(w, k + byte_size(s), b?, t)
1037-
defp fits?(_, _, _, [{_, _, doc_force(_)} | _]), do: false
1038-
defp fits?(w, k, _, [{_, _, doc_break(s, _)} | t]), do: fits?(w, k + byte_size(s), true, t)
1039-
defp fits?(w, k, b?, [{i, m, doc_nest(x, _, :break)} | t]), do: fits?(w, k, b?, [{i, m, x} | t])
1031+
defp fits(w, _, _, [{i, _, :doc_line} | t]), do: fits(w, i, false, t)
1032+
defp fits(w, k, b?, [{_, _, :doc_nil} | t]), do: fits(w, k, b?, t)
1033+
defp fits(w, _, b?, [{i, _, doc_collapse(_)} | t]), do: fits(w, i, b?, t)
1034+
defp fits(w, k, b?, [{i, m, doc_color(x, _)} | t]), do: fits(w, k, b?, [{i, m, x} | t])
1035+
defp fits(w, k, b?, [{_, _, doc_string(_, l)} | t]), do: fits(w, k + l, b?, t)
1036+
defp fits(w, k, b?, [{_, _, s} | t]) when is_binary(s), do: fits(w, k + byte_size(s), b?, t)
1037+
defp fits(_, _, _, [{_, _, doc_force(_)} | _]), do: :no_fit
1038+
defp fits(w, k, _, [{_, _, doc_break(s, _)} | t]), do: fits(w, k + byte_size(s), true, t)
1039+
defp fits(w, k, b?, [{i, m, doc_nest(x, _, :break)} | t]), do: fits(w, k, b?, [{i, m, x} | t])
10401040

1041-
defp fits?(w, k, b?, [{i, m, doc_nest(x, j, _)} | t]),
1042-
do: fits?(w, k, b?, [{apply_nesting(i, k, j), m, x} | t])
1041+
defp fits(w, k, b?, [{i, m, doc_nest(x, j, _)} | t]),
1042+
do: fits(w, k, b?, [{apply_nesting(i, k, j), m, x} | t])
10431043

1044-
defp fits?(w, k, b?, [{i, m, doc_cons(x, y)} | t]),
1045-
do: fits?(w, k, b?, [{i, m, x}, {i, m, y} | t])
1044+
defp fits(w, k, b?, [{i, m, doc_cons(x, y)} | t]),
1045+
do: fits(w, k, b?, [{i, m, x}, {i, m, y} | t])
10461046

1047-
defp fits?(w, k, b?, [{i, m, doc_group(x, _)} | t]),
1048-
do: fits?(w, k, b?, [{i, m, x} | {:tail, b?, t}])
1047+
defp fits(w, k, b?, [{i, m, doc_group(x, _)} | t]),
1048+
do: fits(w, k, b?, [{i, m, x} | {:tail, b?, t}])
10491049

1050-
defp fits?(w, k, b?, [{i, m, doc_limit(x, :infinity)} | t]) when w != :infinity,
1051-
do: fits?(:infinity, k, b?, [{i, :flat, x}, {i, m, doc_limit(empty(), w)} | t])
1050+
defp fits(w, k, b?, [{i, m, doc_limit(x, :infinity)} | t]) when w != :infinity,
1051+
do: fits(:infinity, k, b?, [{i, :flat, x}, {i, m, doc_limit(empty(), w)} | t])
10521052

1053-
defp fits?(_w, k, b?, [{i, m, doc_limit(x, w)} | t]),
1054-
do: fits?(w, k, b?, [{i, m, x} | t])
1053+
defp fits(_w, k, b?, [{i, m, doc_limit(x, w)} | t]),
1054+
do: fits(w, k, b?, [{i, m, x} | t])
10551055

10561056
@spec format(
10571057
width :: non_neg_integer() | :infinity,
@@ -1073,7 +1073,7 @@ defmodule Inspect.Algebra do
10731073
defp format(w, k, [{i, m, doc_break(s, :flex)} | t]) do
10741074
k = k + byte_size(s)
10751075

1076-
if w == :infinity or m == :flat or fits?(w, k, true, t) do
1076+
if w == :infinity or m == :flat or fits(w, k, true, t) != :no_fit do
10771077
[s | format(w, k, t)]
10781078
else
10791079
[indent(i) | format(w, i, t)]
@@ -1104,10 +1104,11 @@ defmodule Inspect.Algebra do
11041104
end
11051105

11061106
defp format(w, k, [{i, _, doc_group(x, _)} | t]) do
1107-
if w == :infinity or fits?(w, k, false, [{i, :flat, x}]) do
1108-
format(w, k, [{i, :flat, x} | t])
1109-
else
1110-
format(w, k, [{i, :break, x} | t])
1107+
fits = if w == :infinity, do: :fit, else: fits(w, k, false, [{i, :flat, x}])
1108+
1109+
case fits do
1110+
:fit -> format(w, k, [{i, :flat, x} | t])
1111+
:no_fit -> format(w, k, [{i, :break, x} | t])
11111112
end
11121113
end
11131114

0 commit comments

Comments
 (0)