Skip to content

Commit

Permalink
Backoff group optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
natefaubion committed Sep 5, 2020
1 parent 75934c2 commit 4c792a7
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/Dodo.purs
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,11 @@ print (Printer printer) opts = flip go initState <<< pure <<< Doc
go (Doc doc1 : LeaveFlexGroup : stk) state
{ flexGroup = FlexGroupOpen
}
FlexGroupOpen | state.position.ribbonWidth > 0 ->
go (Doc doc1 : stk) state
{ flexGroup = FlexGroupReset $ storeState stack state
, buffer = Buffer.branch state.buffer
}
_ ->
go (Doc doc1 : stk) state
FlexAlt flexDoc doc1 -> case state.flexGroup of
Expand Down
15 changes: 15 additions & 0 deletions test/snapshots/DodoFlexPrefixOptimization.output
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ out: e
abce
out: a
out: b
out: b
out: c
out: d
abcd
Expand All @@ -18,3 +19,17 @@ out: b
out: c
out: e
abce
out: a
out: b
out: c
out: d
out: e
out: b
out: c
out: d
out: e
out: e
out: f
out: g
* a b c d
e f g
21 changes: 20 additions & 1 deletion test/snapshots/DodoFlexPrefixOptimization.purs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module DodoFlexPrefixOptimization where
import Prelude

import Data.Foldable (fold)
import Dodo (Doc, flexAlt, flexGroup, fourSpaces, plainText, print, text, withPosition)
import Dodo (Doc, align, flexAlt, flexGroup, fourSpaces, paragraph, plainText, print, text, withPosition)
import Effect (Effect)
import Effect.Class.Console as Console
import Effect.Unsafe (unsafePerformEffect)
Expand Down Expand Up @@ -34,9 +34,28 @@ test2 = flexGroup $ fold
]
]

-- Bad output due to aggressive optimization:
-- * a
-- b c d e
-- f g
test3 :: forall a. Doc a
test3 = flexGroup $ text "* " <> align 2 letters
where
letters =
paragraph $ map logText
[ "a"
, "b"
, "c"
, "d"
, "e"
, "f"
, "g"
]

main :: Effect Unit
main = do
Console.log $ print plainText (fourSpaces { pageWidth = 1 }) test1
Console.log $ print plainText fourSpaces test1
Console.log $ print plainText (fourSpaces { pageWidth = 1 }) test2
Console.log $ print plainText fourSpaces test2
Console.log $ print plainText (fourSpaces { pageWidth = 10 }) test3

0 comments on commit 4c792a7

Please sign in to comment.