Skip to content

Commit d40b032

Browse files
committed
Formatter fix: next_break_fits respects line_length
1 parent 8e8e30e commit d40b032

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

lib/elixir/lib/inspect/algebra.ex

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -973,9 +973,6 @@ defmodule Inspect.Algebra do
973973
#
974974
# * flat - represents a document with breaks as flats (a break may fit, as it may break)
975975
# * break - represents a document with breaks as breaks (a break always fits, since it breaks)
976-
#
977-
# The following modes are exclusive to fitting:
978-
#
979976
# * flat_no_break - represents a document with breaks as flat not allowed to enter in break mode
980977
# * break_no_flat - represents a document with breaks as breaks not allowed to enter in flat mode
981978
#
@@ -986,7 +983,7 @@ defmodule Inspect.Algebra do
986983
column :: non_neg_integer(),
987984
break? :: boolean(),
988985
entries
989-
) :: :fit | :no_fit
986+
) :: :fit | :no_fit | :break_next
990987
when entries:
991988
maybe_improper_list({integer(), mode(), t()}, {:tail, boolean(), entries} | [])
992989

@@ -1015,8 +1012,13 @@ defmodule Inspect.Algebra do
10151012
defp fits(w, k, b?, [{i, :break_no_flat, doc_force(x)} | t]),
10161013
do: fits(w, k, b?, [{i, :break_no_flat, x} | t])
10171014

1018-
defp fits(_, _, _, [{_, :break_no_flat, doc_break(_, _)} | _]), do: :fit
1019-
defp fits(_, _, _, [{_, :break_no_flat, :doc_line} | _]), do: :fit
1015+
defp fits(w, k, b?, [{i, :break_no_flat, x} | t])
1016+
when x == :doc_line or (is_tuple(x) and elem(x, 0) == :doc_break) do
1017+
case fits(w, k, b?, [{i, :flat, x} | t]) do
1018+
:no_fit -> :break_next
1019+
fits -> fits
1020+
end
1021+
end
10201022

10211023
## Breaks
10221024

@@ -1066,6 +1068,10 @@ defmodule Inspect.Algebra do
10661068
defp format(w, k, [{_, _, doc_string(s, l)} | t]), do: [s | format(w, k + l, t)]
10671069
defp format(w, k, [{_, _, s} | t]) when is_binary(s), do: [s | format(w, k + byte_size(s), t)]
10681070
defp format(w, k, [{i, m, doc_force(x)} | t]), do: format(w, k, [{i, m, x} | t])
1071+
1072+
defp format(w, k, [{i, :flat_no_break, doc_fits(x, :enabled)} | t]),
1073+
do: format(w, k, [{i, :break_no_flat, x} | t])
1074+
10691075
defp format(w, k, [{i, m, doc_fits(x, _)} | t]), do: format(w, k, [{i, m, x} | t])
10701076
defp format(w, _, [{i, _, doc_collapse(max)} | t]), do: collapse(format(w, i, t), max, 0, i)
10711077

@@ -1103,12 +1109,17 @@ defmodule Inspect.Algebra do
11031109
format(w, k, [{i, :break, x} | t])
11041110
end
11051111

1112+
defp format(w, k, [{i, :break_no_flat, doc_group(x, _)} | t]) do
1113+
format(w, k, [{i, :break, x} | t])
1114+
end
1115+
11061116
defp format(w, k, [{i, _, doc_group(x, _)} | t]) do
11071117
fits = if w == :infinity, do: :fit, else: fits(w, k, false, [{i, :flat, x}])
11081118

11091119
case fits do
11101120
:fit -> format(w, k, [{i, :flat, x} | t])
11111121
:no_fit -> format(w, k, [{i, :break, x} | t])
1122+
:break_next -> format(w, k, [{i, :flat_no_break, x} | t])
11121123
end
11131124
end
11141125

lib/elixir/test/elixir/code_formatter/calls_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,11 @@ defmodule Code.Formatter.CallsTest do
165165

166166
assert_format bad, good, @short_length
167167
end
168+
169+
test "for maps" do
170+
assert_same "a(%{x: 1})", @short_length
171+
assert_format "ab(%{x: 1})", "ab(%{\n x: 1\n})", @short_length
172+
end
168173
end
169174

170175
describe "local calls" do

lib/elixir/test/elixir/config/provider_test.exs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ defmodule Config.ProviderTest do
4141
{:elixir, [:unknown, :nested, :key], {:ok, :value}}
4242
]) == :ok
4343

44-
assert Config.Provider.validate_compile_env([{:elixir, [:unknown, :nested, :unknown], :error}]) ==
45-
:ok
44+
assert Config.Provider.validate_compile_env([
45+
{:elixir, [:unknown, :nested, :unknown], :error}
46+
]) == :ok
4647

4748
assert {:error, msg} =
4849
Config.Provider.validate_compile_env([{:elixir, [:unknown, :nested], :error}])

0 commit comments

Comments
 (0)