@@ -973,9 +973,6 @@ defmodule Inspect.Algebra do
973
973
#
974
974
# * flat - represents a document with breaks as flats (a break may fit, as it may break)
975
975
# * 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
- #
979
976
# * flat_no_break - represents a document with breaks as flat not allowed to enter in break mode
980
977
# * break_no_flat - represents a document with breaks as breaks not allowed to enter in flat mode
981
978
#
@@ -986,7 +983,7 @@ defmodule Inspect.Algebra do
986
983
column :: non_neg_integer ( ) ,
987
984
break? :: boolean ( ) ,
988
985
entries
989
- ) :: :fit | :no_fit
986
+ ) :: :fit | :no_fit | :break_next
990
987
when entries:
991
988
maybe_improper_list ( { integer ( ) , mode ( ) , t ( ) } , { :tail , boolean ( ) , entries } | [ ] )
992
989
@@ -1015,8 +1012,13 @@ defmodule Inspect.Algebra do
1015
1012
defp fits ( w , k , b? , [ { i , :break_no_flat , doc_force ( x ) } | t ] ) ,
1016
1013
do: fits ( w , k , b? , [ { i , :break_no_flat , x } | t ] )
1017
1014
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
1020
1022
1021
1023
## Breaks
1022
1024
@@ -1066,6 +1068,10 @@ defmodule Inspect.Algebra do
1066
1068
defp format ( w , k , [ { _ , _ , doc_string ( s , l ) } | t ] ) , do: [ s | format ( w , k + l , t ) ]
1067
1069
defp format ( w , k , [ { _ , _ , s } | t ] ) when is_binary ( s ) , do: [ s | format ( w , k + byte_size ( s ) , t ) ]
1068
1070
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
+
1069
1075
defp format ( w , k , [ { i , m , doc_fits ( x , _ ) } | t ] ) , do: format ( w , k , [ { i , m , x } | t ] )
1070
1076
defp format ( w , _ , [ { i , _ , doc_collapse ( max ) } | t ] ) , do: collapse ( format ( w , i , t ) , max , 0 , i )
1071
1077
@@ -1103,12 +1109,17 @@ defmodule Inspect.Algebra do
1103
1109
format ( w , k , [ { i , :break , x } | t ] )
1104
1110
end
1105
1111
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
+
1106
1116
defp format ( w , k , [ { i , _ , doc_group ( x , _ ) } | t ] ) do
1107
1117
fits = if w == :infinity , do: :fit , else: fits ( w , k , false , [ { i , :flat , x } ] )
1108
1118
1109
1119
case fits do
1110
1120
:fit -> format ( w , k , [ { i , :flat , x } | t ] )
1111
1121
:no_fit -> format ( w , k , [ { i , :break , x } | t ] )
1122
+ :break_next -> format ( w , k , [ { i , :flat_no_break , x } | t ] )
1112
1123
end
1113
1124
end
1114
1125
0 commit comments