prettyprinter 1.5.0 → 1.5.1
raw patch · 4 files changed
+37/−10 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +5/−0
- prettyprinter.cabal +1/−1
- src/Data/Text/Prettyprint/Doc/Internal.hs +12/−9
- test/Testsuite/Main.hs +19/−0
CHANGELOG.md view
@@ -1,3 +1,8 @@+# 1.5.1++- Removing trailing whitespace sometimes restored necessary whitespace in the+ wrong spot+ # 1.5 - Fix inconsistent formatting within align and wide sub-docs on narrow layouts
prettyprinter.cabal view
@@ -1,5 +1,5 @@ name: prettyprinter-version: 1.5.0+version: 1.5.1 cabal-version: >= 1.10 category: User Interfaces, Text synopsis: A modern, easy to use, well-documented, extensible pretty-printer.
src/Data/Text/Prettyprint/Doc/Internal.hs view
@@ -1460,17 +1460,20 @@ removeTrailingWhitespace :: SimpleDocStream ann -> SimpleDocStream ann removeTrailingWhitespace = go (RecordedWhitespace [] 0) where- commitSpaces+ commitWhitespace :: [Int] -- Withheld lines -> Int -- Withheld spaces -> SimpleDocStream ann -> SimpleDocStream ann- commitSpaces [] 0 = id- commitSpaces [] 1 = SChar ' '- commitSpaces [] n = SText n (T.replicate n " ")- commitSpaces [i] n = SLine i . commitSpaces [] n- commitSpaces (_:is) n = SLine 0 . commitSpaces is n+ commitWhitespace is0 n0 = commitLines is0 . commitSpaces n0+ where+ commitLines [] = id+ commitLines (i:is) = foldr (\_ f -> SLine 0 . f) (SLine i) is + commitSpaces 0 = id+ commitSpaces 1 = SChar ' '+ commitSpaces n = SText n (T.replicate n " ")+ go :: WhitespaceStrippingState -> SimpleDocStream ann -> SimpleDocStream ann -- We do not strip whitespace inside annotated documents, since it might -- actually be relevant there.@@ -1493,7 +1496,7 @@ SEmpty -> foldr (\_i sds' -> SLine 0 sds') SEmpty withheldLines SChar c rest | c == ' ' -> go (RecordedWhitespace withheldLines (withheldSpaces+1)) rest- | otherwise -> commitSpaces+ | otherwise -> commitWhitespace withheldLines withheldSpaces (SChar c (go (RecordedWhitespace [] 0) rest))@@ -1504,14 +1507,14 @@ isOnlySpace = strippedLength == 0 in if isOnlySpace then go (RecordedWhitespace withheldLines (withheldSpaces + textLength)) rest- else commitSpaces+ else commitWhitespace withheldLines withheldSpaces (SText strippedLength stripped (go (RecordedWhitespace [] trailingLength) rest)) SLine i rest -> go (RecordedWhitespace (i:withheldLines) 0) rest- SAnnPush ann rest -> commitSpaces+ SAnnPush ann rest -> commitWhitespace withheldLines withheldSpaces (SAnnPush ann (go (AnnotationLevel 1) rest))
test/Testsuite/Main.hs view
@@ -74,6 +74,12 @@ , testCase "Reduce to single trailing newline" removeTrailingWhitespaceInTrailingNewlines ]+ , testGroup "removeTrailingWhitespace restores indentation in the wrong spot (#93)"+ [ testCase "Don't restore indentation in the wrong spot"+ removeTrailingWhitespaceDontRestoreIndentationInTheWrongSpot+ , testCase "Preserve leading indentation"+ removeTrailingWhitespacePreserveIndentation+ ] ] ] @@ -277,3 +283,16 @@ actual = renderStrict (layoutSmart (LayoutOptions (AvailablePerLine 12 1)) doc) expected = "/Fallback\n Fallback\n Too wide!!!!!" in assertEqual "" expected actual++removeTrailingWhitespaceDontRestoreIndentationInTheWrongSpot :: Assertion+removeTrailingWhitespaceDontRestoreIndentationInTheWrongSpot+ = let sdoc :: SimpleDocStream ()+ sdoc = SLine 2 (SLine 0 (SChar 'x' SEmpty))+ sdoc' = SLine 0 (SLine 0 (SChar 'x' SEmpty))+ in assertEqual "" sdoc' (removeTrailingWhitespace sdoc)++removeTrailingWhitespacePreserveIndentation :: Assertion+removeTrailingWhitespacePreserveIndentation+ = let sdoc :: SimpleDocStream ()+ sdoc = SLine 2 (SChar 'x' SEmpty)+ in assertEqual "" sdoc (removeTrailingWhitespace sdoc)