Skip to content

Commit a97c7ab

Browse files
committed
Use prettyprinter instead of ansi-wl-pprint
1 parent 127f112 commit a97c7ab

File tree

8 files changed

+104
-93
lines changed

8 files changed

+104
-93
lines changed

src/Data/TreeDiff/Class.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ import Data.These (These (..))
109109
-- primitive
110110
import qualified Data.Primitive as Prim
111111

112-
#if MIN_VERSION_base(4,9,0)
112+
#if MIN_VERSION_base(4,17,0)
113113
import Data.Array.Byte (ByteArray (..))
114114
#endif
115115

@@ -602,7 +602,7 @@ instance (ToExpr a, ToExpr b) => ToExpr (These a b) where
602602
instance ToExpr Prim.ByteArray where
603603
toExpr ba = App "Prim.byteArrayFromList" [toExpr (Prim.foldrByteArray (:) [] ba :: [Word8])]
604604

605-
#if !MIN_VERSION_primitive(0,8,0) && MIN_VERSION_base(4,9,0)
605+
#if !MIN_VERSION_primitive(0,8,0) && MIN_VERSION_base(4,17,0)
606606
-- | @since 0.2.2
607607
instance ToExpr ByteArray where
608608
toExpr (ByteArray ba) = App "byteArrayFromList" [toExpr (Prim.foldrByteArray (:) [] (Prim.ByteArray ba) :: [Word8])]

src/Data/TreeDiff/Golden.hs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import System.Console.ANSI (SGR (Reset), setSGRCode)
1010
import Text.Parsec (eof, parse)
1111
import Text.Parsec.Text ()
1212

13-
import qualified Data.ByteString as BS
14-
import qualified Data.Text as T
15-
import qualified Data.Text.Encoding as TE
16-
import qualified Text.PrettyPrint.ANSI.Leijen as WL
13+
import qualified Data.ByteString as BS
14+
import qualified Data.Text as T
15+
import qualified Data.Text.Encoding as TE
16+
import qualified Data.Text.Lazy as TL
17+
import qualified Prettyprinter as PP
18+
import qualified Prettyprinter.Render.Terminal as PP
1719

1820
-- | Make a golden tests.
1921
--
@@ -54,8 +56,13 @@ ediffGolden impl testName fp x = impl testName expect actual cmp wrt
5456
cmp a b
5557
| a == b = return Nothing
5658
| otherwise = return $ Just $
57-
setSGRCode [Reset] ++ showWL (ansiWlEditExprCompact $ ediff a b)
58-
wrt expr = BS.writeFile fp $ TE.encodeUtf8 $ T.pack $ showWL (WL.plain (ansiWlExpr expr)) ++ "\n"
59+
setSGRCode [Reset] ++ showPP (ansiEditExprCompact $ ediff a b)
60+
wrt expr = BS.writeFile fp $ TE.encodeUtf8 $ T.pack $ showPP (PP.unAnnotate (ansiExpr expr)) ++ "\n"
5961

60-
showWL :: WL.Doc -> String
61-
showWL doc = WL.displayS (WL.renderSmart 0.4 80 doc) ""
62+
showPP :: PP.Doc PP.AnsiStyle -> String
63+
showPP doc = TL.unpack
64+
$ PP.renderLazy
65+
$ PP.layoutSmart
66+
PP.LayoutOptions
67+
{ PP.layoutPageWidth = PP.AvailablePerLine 80 (realToFrac (0.4 :: Float)) }
68+
doc

src/Data/TreeDiff/List.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
{-# LANGUAGE BangPatterns #-}
1+
{-# LANGUAGE BangPatterns #-}
22
{-# LANGUAGE ScopedTypeVariables #-}
33
-- | A list diff.
44
module Data.TreeDiff.List (
55
diffBy,
66
Edit (..),
77
) where
88

9-
import Control.DeepSeq (NFData (..))
9+
import Control.DeepSeq (NFData (..))
1010
import Control.Monad.ST (ST, runST)
1111

1212
import qualified Data.Primitive as P

src/Data/TreeDiff/OMap.hs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ module Data.TreeDiff.OMap (
1515
elems,
1616
) where
1717

18-
import Data.List (sortBy)
19-
import Data.Ord (comparing)
20-
import Data.Semialign (Semialign (..))
21-
import Data.These (These (..))
22-
import Control.DeepSeq (NFData (..))
18+
import Control.DeepSeq (NFData (..))
19+
import Data.List (sortBy)
20+
import Data.Ord (comparing)
21+
import Data.Semialign (Semialign (..))
22+
import Data.These (These (..))
2323

2424
#if MIN_VERSION_containers(0,5,0)
2525
import qualified Data.Map.Strict as Map

src/Data/TreeDiff/Pretty.hs

Lines changed: 49 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ module Data.TreeDiff.Pretty (
1111
prettyEditExpr,
1212
prettyEditExprCompact,
1313
-- * ansi-wl-pprint
14-
ansiWlPretty,
15-
ansiWlExpr,
16-
ansiWlEditExpr,
17-
ansiWlEditExprCompact,
14+
ansiPretty,
15+
ansiExpr,
16+
ansiEditExpr,
17+
ansiEditExprCompact,
1818
-- ** background
19-
ansiWlBgPretty,
20-
ansiWlBgExpr,
21-
ansiWlBgEditExpr,
22-
ansiWlBgEditExprCompact,
19+
ansiBgPretty,
20+
ansiBgExpr,
21+
ansiBgEditExpr,
22+
ansiBgEditExprCompact,
2323
-- * Utilities
2424
escapeName,
2525
) where
@@ -30,9 +30,11 @@ import Data.TreeDiff.Expr
3030
import Numeric (showHex)
3131
import Text.Read.Compat (readMaybe)
3232

33-
import qualified Data.TreeDiff.OMap as OMap
34-
import qualified Text.PrettyPrint as HJ
35-
import qualified Text.PrettyPrint.ANSI.Leijen as WL
33+
import qualified Data.TreeDiff.OMap as OMap
34+
import qualified Text.PrettyPrint as HJ
35+
36+
import qualified Prettyprinter as PP
37+
import qualified Prettyprinter.Render.Terminal as PP
3638

3739
-- $setup
3840
-- >>> import qualified Data.TreeDiff.OMap as OMap
@@ -212,59 +214,59 @@ prettyEditExprCompact :: Edit EditExpr -> HJ.Doc
212214
prettyEditExprCompact = ppEditExprCompact prettyPretty
213215

214216
-------------------------------------------------------------------------------
215-
-- ansi-wl-pprint
217+
-- ansi printing via 'prettyprinter'
216218
-------------------------------------------------------------------------------
217219

218-
-- | 'Pretty' via @ansi-wl-pprint@ library (with colors).
219-
ansiWlPretty :: Pretty WL.Doc
220-
ansiWlPretty = Pretty
221-
{ ppCon = WL.text
222-
, ppRec = \c xs -> ansiGroup (c WL.<+> WL.lbrace) WL.rbrace
223-
$ map (\(fn, d) -> WL.text fn WL.<+> WL.equals WL.</> d) xs
224-
, ppLst = ansiGroup WL.lbracket WL.rbracket
225-
, ppCpy = WL.dullwhite
226-
, ppIns = \d -> WL.green $ WL.plain $ WL.char '+' WL.<> d
227-
, ppDel = \d -> WL.red $ WL.plain $ WL.char '-' WL.<> d
228-
, ppApp = \f xs -> WL.group $ WL.nest 2 $ f WL.<$> WL.vsep xs
229-
, ppEdits = WL.sep
230-
, ppEllip = WL.text "..."
231-
, ppParens = WL.parens
220+
ansiPretty :: Pretty (PP.Doc PP.AnsiStyle)
221+
ansiPretty = Pretty
222+
{ ppCon = PP.pretty
223+
, ppRec = \c xs -> ansiGroup (c PP.<+> PP.lbrace) PP.rbrace
224+
$ map (\(fn, d) -> PP.pretty fn PP.<+> PP.equals <> PP.softline <> d) xs
225+
, ppLst = ansiGroup PP.lbracket PP.rbracket
226+
, ppCpy = PP.annotate (PP.colorDull PP.White)
227+
, ppIns = \d -> PP.annotate (PP.color PP.Green) $ PP.unAnnotate $ PP.pretty '+' <> d
228+
, ppDel = \d -> PP.annotate (PP.color PP.Red) $ PP.unAnnotate $ PP.pretty '-' <> d
229+
, ppApp = \f xs -> PP.group $ PP.nest 2 $ f <> PP.line <> PP.vsep xs
230+
, ppEdits = PP.sep
231+
, ppEllip = PP.pretty "..."
232+
, ppParens = PP.parens
232233
}
233234

234-
ansiGroup :: WL.Doc -> WL.Doc -> [WL.Doc] -> WL.Doc
235-
ansiGroup l r xs = WL.group $ WL.nest 2 (l WL.<$$> WL.vsep (WL.punctuate WL.comma xs) WL.<> r)
235+
236+
ansiGroup :: PP.Doc PP.AnsiStyle -> PP.Doc PP.AnsiStyle -> [PP.Doc PP.AnsiStyle] -> PP.Doc PP.AnsiStyle
237+
ansiGroup l r xs = PP.group $ PP.nest 2 (l <> PP.flatAlt PP.line mempty <> PP.vsep (PP.punctuate PP.comma xs) <> r)
236238

237239
-- | Pretty print 'Expr' using @ansi-wl-pprint@.
238-
ansiWlExpr :: Expr -> WL.Doc
239-
ansiWlExpr = ppExpr ansiWlPretty
240+
ansiExpr :: Expr -> PP.Doc PP.AnsiStyle
241+
ansiExpr = ppExpr ansiPretty
240242

241243
-- | Pretty print @'Edit' 'EditExpr'@ using @ansi-wl-pprint@.
242-
ansiWlEditExpr :: Edit EditExpr -> WL.Doc
243-
ansiWlEditExpr = ppEditExpr ansiWlPretty
244+
ansiEditExpr :: Edit EditExpr -> PP.Doc PP.AnsiStyle
245+
ansiEditExpr = ppEditExpr ansiPretty
244246

245-
-- | Compact 'ansiWlEditExpr'
246-
ansiWlEditExprCompact :: Edit EditExpr -> WL.Doc
247-
ansiWlEditExprCompact = ppEditExprCompact ansiWlPretty
247+
-- | Compact 'ansiEditExpr'
248+
ansiEditExprCompact :: Edit EditExpr -> PP.Doc PP.AnsiStyle
249+
ansiEditExprCompact = ppEditExprCompact ansiPretty
248250

249251
-------------------------------------------------------------------------------
250252
-- Background
251253
-------------------------------------------------------------------------------
252254

253-
-- | Like 'ansiWlPretty' but color the background.
254-
ansiWlBgPretty :: Pretty WL.Doc
255-
ansiWlBgPretty = ansiWlPretty
256-
{ ppIns = \d -> WL.ondullgreen $ WL.white $ WL.plain $ WL.char '+' WL.<> d
257-
, ppDel = \d -> WL.ondullred $ WL.white $ WL.plain $ WL.char '-' WL.<> d
255+
-- | Like 'ansiPretty' but color the background.
256+
ansiBgPretty :: Pretty (PP.Doc PP.AnsiStyle)
257+
ansiBgPretty = ansiPretty
258+
{ ppIns = \d -> PP.annotate (PP.colorDull PP.Green) $ PP.annotate (PP.color PP.White) $ PP.unAnnotate $ PP.pretty '+' <> d
259+
, ppDel = \d -> PP.annotate (PP.colorDull PP.Red) $ PP.annotate (PP.color PP.White) $ PP.unAnnotate $ PP.pretty '-' <> d
258260
}
259261

260262
-- | Pretty print 'Expr' using @ansi-wl-pprint@.
261-
ansiWlBgExpr :: Expr -> WL.Doc
262-
ansiWlBgExpr = ppExpr ansiWlBgPretty
263+
ansiBgExpr :: Expr -> PP.Doc PP.AnsiStyle
264+
ansiBgExpr = ppExpr ansiBgPretty
263265

264266
-- | Pretty print @'Edit' 'EditExpr'@ using @ansi-wl-pprint@.
265-
ansiWlBgEditExpr :: Edit EditExpr -> WL.Doc
266-
ansiWlBgEditExpr = ppEditExpr ansiWlBgPretty
267+
ansiBgEditExpr :: Edit EditExpr -> PP.Doc PP.AnsiStyle
268+
ansiBgEditExpr = ppEditExpr ansiBgPretty
267269

268-
-- | Compact 'ansiWlBgEditExpr'.
269-
ansiWlBgEditExprCompact :: Edit EditExpr -> WL.Doc
270-
ansiWlBgEditExprCompact = ppEditExprCompact ansiWlBgPretty
270+
-- | Compact 'ansiBgEditExpr'.
271+
ansiBgEditExprCompact :: Edit EditExpr -> PP.Doc PP.AnsiStyle
272+
ansiBgEditExprCompact = ppEditExprCompact ansiBgPretty

src/Data/TreeDiff/QuickCheck.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ import Test.QuickCheck (Property, counterexample)
1010
-- | A variant of '===', which outputs a diff when values are inequal.
1111
ediffEq :: (Eq a, ToExpr a) => a -> a -> Property
1212
ediffEq x y = counterexample
13-
(setSGRCode [Reset] ++ show (ansiWlEditExpr $ ediff x y))
13+
(setSGRCode [Reset] ++ show (ansiEditExpr $ ediff x y))
1414
(x == y)

tests/Tests.hs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ import Test.Tasty.QuickCheck (testProperty)
1616
import Data.Array.Byte (ByteArray (..))
1717
#endif
1818

19-
import qualified Data.HashSet as HS
20-
import qualified Data.Primitive as Prim
21-
import qualified Text.Parsec as P
22-
import qualified Text.PrettyPrint.ANSI.Leijen as WL
23-
import qualified Text.Trifecta as T (eof, parseString)
24-
import qualified Text.Trifecta.Result as T (ErrInfo (..), Result (..))
19+
import qualified Data.HashSet as HS
20+
import qualified Data.Primitive as Prim
21+
import qualified Prettyprinter as PP
22+
import qualified Text.Parsec as P
23+
import qualified Text.Trifecta as T (eof, parseString)
24+
import qualified Text.Trifecta.Result as T (ErrInfo (..), Result (..))
2525

2626
import Data.TreeDiff
2727
import Data.TreeDiff.Golden
@@ -33,7 +33,7 @@ import qualified RefDiffBy
3333
main :: IO ()
3434
main = defaultMain $ testGroup "tests"
3535
[ testProperty "trifecta-pretty roundtrip" roundtripTrifectaPretty
36-
, testProperty "parsec-ansi-wl-pprint roundtrip" roundtripParsecAnsiWl
36+
, testProperty "parsec-ansi-wl-pprint roundtrip" roundtripParsecAnsi
3737
, testProperty "diffBy example1" $ diffByModel [7,1,6,0,0] [0,0,6,7,1,0,0]
3838
, testProperty "diffBy model" diffByModel
3939
, goldenTests
@@ -76,10 +76,10 @@ roundtripTrifectaPretty e = counterexample info $ ediffEq (Just e) res'
7676
T.Success e' -> Just e'
7777
T.Failure _ -> Nothing
7878

79-
roundtripParsecAnsiWl :: Expr -> Property
80-
roundtripParsecAnsiWl e = counterexample info $ ediffEq (Just e) res'
79+
roundtripParsecAnsi :: Expr -> Property
80+
roundtripParsecAnsi e = counterexample info $ ediffEq (Just e) res'
8181
where
82-
doc = show (WL.plain (ansiWlExpr e))
82+
doc = show (PP.unAnnotate (ansiExpr e))
8383
res = P.parse (exprParser <* P.eof) "<memory>" doc
8484

8585
info = case res of

tree-diff.cabal

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -97,23 +97,24 @@ library
9797
, time >=1.4 && <1.5 || >=1.5.0.1 && <1.6 || >=1.6.0.1 && <1.7 || >=1.8.0.2 && <1.9 || >=1.9.3 && <1.13
9898

9999
build-depends:
100-
, aeson ^>=1.4.6.0 || ^>=1.5.6.0 || ^>=2.0.0.0 || ^>=2.1.0.0
101-
, ansi-terminal >=0.10 && <0.12 || ^>=1.0
102-
, ansi-wl-pprint ^>=0.6.8.2 || ^>=1.0.2
103-
, base-compat >=0 && <0.13 || ^>=0.13
104-
, bytestring-builder ^>=0.10.8.2.0
105-
, hashable ^>=1.2.7.0 || ^>=1.3.0.0 || ^>=1.4.0.1
106-
, parsers ^>=0.12.10
107-
, primitive >=0.7.1.0 && <0.8 || ^>=0.8
108-
, QuickCheck ^>=2.14.2
109-
, scientific ^>=0.3.6.2
110-
, semialign >=1.2.0.1 && <1.3 || ^>=1.3
111-
, strict >=0.4.0.1 && <0.5 || ^>=0.5
112-
, tagged ^>=0.8.6
113-
, these >=1.1.1.1 && <1.2 || ^>=1.2
114-
, unordered-containers ^>=0.2.8.0
115-
, uuid-types ^>=1.0.3
116-
, vector ^>=0.12.0.0 || ^>=0.13.0.0
100+
, aeson ^>=1.4.6.0 || ^>=1.5.6.0 || ^>=2.0.0.0 || ^>=2.1.0.0
101+
, ansi-terminal >=0.10 && <0.12 || ^>=1.0
102+
, base-compat >=0 && <0.13 || ^>=0.13
103+
, bytestring-builder ^>=0.10.8.2.0
104+
, hashable ^>=1.2.7.0 || ^>=1.3.0.0 || ^>=1.4.0.1
105+
, parsers ^>=0.12.10
106+
, prettyprinter ^>=1.7.1
107+
, prettyprinter-ansi-terminal ^>=1.1.3
108+
, primitive >=0.7.1.0 && <0.8 || ^>=0.8
109+
, QuickCheck ^>=2.14.2
110+
, scientific ^>=0.3.6.2
111+
, semialign >=1.2.0.1 && <1.3 || ^>=1.3
112+
, strict >=0.4.0.1 && <0.5 || ^>=0.5
113+
, tagged ^>=0.8.6
114+
, these >=1.1.1.1 && <1.2 || ^>=1.2
115+
, unordered-containers ^>=0.2.8.0
116+
, uuid-types ^>=1.0.3
117+
, vector ^>=0.12.0.0 || ^>=0.13.0.0
117118

118119
if impl(ghc <7.5)
119120
build-depends: ghc-prim
@@ -157,10 +158,11 @@ test-suite tree-diff-test
157158
-- dependencies from library
158159
build-depends:
159160
, ansi-terminal
160-
, ansi-wl-pprint
161161
, base
162162
, base-compat
163163
, parsec
164+
, prettyprinter
165+
, prettyprinter-ansi-terminal
164166
, primitive
165167
, QuickCheck
166168
, tagged

0 commit comments

Comments
 (0)