tree-diff 0.3.5 → 0.4
raw patch · 6 files changed
+98/−61 lines, 6 filesdep +prettyprinterdep +prettyprinter-ansi-terminaldep −ansi-wl-pprintdep ~time
Dependencies added: prettyprinter, prettyprinter-ansi-terminal
Dependencies removed: ansi-wl-pprint
Dependency ranges changed: time
Files
- ChangeLog.md +7/−0
- src/Data/TreeDiff/Golden.hs +11/−7
- src/Data/TreeDiff/Pretty.hs +46/−28
- src/Data/TreeDiff/QuickCheck.hs +8/−1
- tests/Tests.hs +7/−7
- tree-diff.cabal +19/−18
ChangeLog.md view
@@ -1,3 +1,10 @@+## 0.4++- Drop `ansi-wl-pprint` dependency, use `prettyprinter` directly.+ The naming of functions still uses `ansiWl*` naming scheme, to avoid breaking+ too many things. Technically, these functions are still compatible with+ `ansi-wl-pprint` versions which use `prettyprinter` underneath.+ ## 0.3.4 - Remove 'Eq a' requirement from 'ediffGolden'. The constraint wasn't used, as we only compare 'Expr' representations.
src/Data/TreeDiff/Golden.hs view
@@ -10,10 +10,12 @@ import Text.Parsec (eof, parse) import Text.Parsec.Text () -import qualified Data.ByteString as BS-import qualified Data.Text as T-import qualified Data.Text.Encoding as TE-import qualified Text.PrettyPrint.ANSI.Leijen as WL+import qualified Data.ByteString as BS+import qualified Data.Text as T+import qualified Data.Text.Encoding as TE+import qualified Data.Text.Lazy as TL+import qualified Prettyprinter as PP+import qualified Prettyprinter.Render.Terminal as PP.A -- | Make a golden tests. --@@ -74,7 +76,9 @@ | a == b = return Nothing | otherwise = return $ Just $ setSGRCode [Reset] ++ showWL (ansiWlEditExprCompact $ ediff a b)- wrt expr = BS.writeFile fp $ TE.encodeUtf8 $ T.pack $ showWL (WL.plain (ansiWlExpr expr)) ++ "\n"+ wrt expr = BS.writeFile fp $ TE.encodeUtf8 $ T.pack $ showWL (PP.unAnnotate (ansiWlExpr expr)) ++ "\n" -showWL :: WL.Doc -> String-showWL doc = WL.displayS (WL.renderSmart 0.4 80 doc) ""+showWL :: PP.Doc PP.A.AnsiStyle -> String+showWL doc+ = TL.unpack $ PP.A.renderLazy+ $ PP.layoutSmart PP.LayoutOptions { PP.layoutPageWidth = PP.AvailablePerLine 80 0.4 } doc
src/Data/TreeDiff/Pretty.hs view
@@ -10,7 +10,7 @@ prettyExpr, prettyEditExpr, prettyEditExprCompact,- -- * ansi-wl-pprint+ -- * prettyprinter ansiWlPretty, ansiWlExpr, ansiWlEditExpr,@@ -30,9 +30,10 @@ import Numeric (showHex) import Text.Read (readMaybe) -import qualified Data.TreeDiff.OMap as OMap-import qualified Text.PrettyPrint as HJ-import qualified Text.PrettyPrint.ANSI.Leijen as WL+import qualified Data.TreeDiff.OMap as OMap+import qualified Prettyprinter as PP+import qualified Prettyprinter.Render.Terminal as PP.A+import qualified Text.PrettyPrint as HJ -- $setup -- >>> import qualified Data.TreeDiff.OMap as OMap@@ -215,56 +216,73 @@ -- ansi-wl-pprint ------------------------------------------------------------------------------- --- | 'Pretty' via @ansi-wl-pprint@ library (with colors).-ansiWlPretty :: Pretty WL.Doc+-- | 'Pretty' via @prettyprinter@ library (with colors).+ansiWlPretty :: Pretty (PP.Doc PP.A.AnsiStyle) ansiWlPretty = Pretty- { ppCon = WL.text- , ppRec = \c xs -> ansiGroup (c WL.<+> WL.lbrace) WL.rbrace- $ map (\(fn, d) -> WL.text fn WL.<+> WL.equals WL.</> d) xs- , ppLst = ansiGroup WL.lbracket WL.rbracket- , ppCpy = WL.dullwhite- , ppIns = \d -> WL.green $ WL.plain $ WL.char '+' WL.<> d- , ppDel = \d -> WL.red $ WL.plain $ WL.char '-' WL.<> d- , ppApp = \f xs -> WL.group $ WL.nest 2 $ f WL.<$> WL.vsep xs- , ppEdits = WL.sep- , ppEllip = WL.text "..."- , ppParens = WL.parens+ { ppCon = ppText+ , ppRec = \c xs -> ansiGroup (c PP.<+> PP.lbrace) PP.rbrace+ $ map (\(fn, d) -> ppText fn PP.<+> (PP.equals PP.<> PP.softline PP.<> d)) xs+ , ppLst = ansiGroup PP.lbracket PP.rbracket+ , ppCpy = ppDullWhite+ , ppIns = \d -> ppGreen $ PP.unAnnotate $ ppChar '+' PP.<> d+ , ppDel = \d -> ppRed $ PP.unAnnotate $ ppChar '-' PP.<> d+ , ppApp = \f xs -> PP.group $ PP.nest 2 $ f PP.<> PP.line PP.<> PP.vsep xs+ , ppEdits = PP.sep+ , ppEllip = ppText "..."+ , ppParens = PP.parens } -ansiGroup :: WL.Doc -> WL.Doc -> [WL.Doc] -> WL.Doc-ansiGroup l r xs = WL.group $ WL.nest 2 (l WL.<$$> WL.vsep (WL.punctuate WL.comma xs) WL.<> r)+ansiGroup :: PP.Doc PP.A.AnsiStyle -> PP.Doc PP.A.AnsiStyle -> [PP.Doc PP.A.AnsiStyle] -> PP.Doc PP.A.AnsiStyle+ansiGroup l r xs = PP.group $ PP.nest 2 (l PP.<> ppLinebreak PP.<> PP.vsep (PP.punctuate PP.comma xs) PP.<> r) -- | Pretty print 'Expr' using @ansi-wl-pprint@.-ansiWlExpr :: Expr -> WL.Doc+ansiWlExpr :: Expr -> PP.Doc PP.A.AnsiStyle ansiWlExpr = ppExpr ansiWlPretty -- | Pretty print @'Edit' 'EditExpr'@ using @ansi-wl-pprint@.-ansiWlEditExpr :: Edit EditExpr -> WL.Doc+ansiWlEditExpr :: Edit EditExpr -> PP.Doc PP.A.AnsiStyle ansiWlEditExpr = ppEditExpr ansiWlPretty -- | Compact 'ansiWlEditExpr'-ansiWlEditExprCompact :: Edit EditExpr -> WL.Doc+ansiWlEditExprCompact :: Edit EditExpr -> PP.Doc PP.A.AnsiStyle ansiWlEditExprCompact = ppEditExprCompact ansiWlPretty +ppChar :: Char -> PP.Doc PP.A.AnsiStyle+ppChar = PP.pretty++ppText :: String -> PP.Doc PP.A.AnsiStyle+ppText = PP.pretty++ppLinebreak :: PP.Doc a+ppLinebreak = PP.flatAlt PP.line mempty++ppWhite, ppDullWhite, ppRed, ppGreen, ppOnDullRed, ppOnDullGreen :: PP.Doc PP.A.AnsiStyle -> PP.Doc PP.A.AnsiStyle+ppWhite = PP.annotate (PP.A.color PP.A.White)+ppDullWhite = PP.annotate (PP.A.colorDull PP.A.White)+ppRed = PP.annotate (PP.A.color PP.A.Red)+ppGreen = PP.annotate (PP.A.color PP.A.Green)+ppOnDullRed = PP.annotate (PP.A.bgColorDull PP.A.Red)+ppOnDullGreen = PP.annotate (PP.A.bgColorDull PP.A.Green)+ ------------------------------------------------------------------------------- -- Background ------------------------------------------------------------------------------- -- | Like 'ansiWlPretty' but color the background.-ansiWlBgPretty :: Pretty WL.Doc+ansiWlBgPretty :: Pretty (PP.Doc PP.A.AnsiStyle) ansiWlBgPretty = ansiWlPretty- { ppIns = \d -> WL.ondullgreen $ WL.white $ WL.plain $ WL.char '+' WL.<> d- , ppDel = \d -> WL.ondullred $ WL.white $ WL.plain $ WL.char '-' WL.<> d+ { ppIns = \d -> ppOnDullGreen $ ppWhite $ PP.unAnnotate $ ppChar '+' PP.<> d+ , ppDel = \d -> ppOnDullRed $ ppWhite $ PP.unAnnotate $ ppChar '-' PP.<> d } -- | Pretty print 'Expr' using @ansi-wl-pprint@.-ansiWlBgExpr :: Expr -> WL.Doc+ansiWlBgExpr :: Expr -> PP.Doc PP.A.AnsiStyle ansiWlBgExpr = ppExpr ansiWlBgPretty -- | Pretty print @'Edit' 'EditExpr'@ using @ansi-wl-pprint@.-ansiWlBgEditExpr :: Edit EditExpr -> WL.Doc+ansiWlBgEditExpr :: Edit EditExpr -> PP.Doc PP.A.AnsiStyle ansiWlBgEditExpr = ppEditExpr ansiWlBgPretty -- | Compact 'ansiWlBgEditExpr'.-ansiWlBgEditExprCompact :: Edit EditExpr -> WL.Doc+ansiWlBgEditExprCompact :: Edit EditExpr -> PP.Doc PP.A.AnsiStyle ansiWlBgEditExprCompact = ppEditExprCompact ansiWlBgPretty
src/Data/TreeDiff/QuickCheck.hs view
@@ -7,8 +7,15 @@ import System.Console.ANSI (SGR (Reset), setSGRCode) import Test.QuickCheck (Property, counterexample) +import qualified Data.Text.Lazy as TL+import qualified Prettyprinter as PP+import qualified Prettyprinter.Render.Terminal as PP.A+ -- | A variant of '===', which outputs a diff when values are inequal. ediffEq :: (Eq a, ToExpr a) => a -> a -> Property ediffEq x y = counterexample- (setSGRCode [Reset] ++ show (ansiWlEditExpr $ ediff x y))+ (setSGRCode [Reset] ++ render (ansiWlEditExpr $ ediff x y)) (x == y)++render :: PP.Doc PP.A.AnsiStyle -> String+render = TL.unpack . PP.A.renderLazy . PP.layoutPretty PP.defaultLayoutOptions
tests/Tests.hs view
@@ -10,12 +10,12 @@ import Test.Tasty.Golden.Advanced (goldenTest) import Test.Tasty.QuickCheck (testProperty) -import qualified Data.HashSet as HS-import qualified Data.Primitive as Prim-import qualified Text.Parsec as P-import qualified Text.PrettyPrint.ANSI.Leijen as WL-import qualified Text.Trifecta as T (eof, parseString)-import qualified Text.Trifecta.Result as T (ErrInfo (..), Result (..))+import qualified Data.HashSet as HS+import qualified Data.Primitive as Prim+import qualified Prettyprinter as PP+import qualified Text.Parsec as P+import qualified Text.Trifecta as T (eof, parseString)+import qualified Text.Trifecta.Result as T (ErrInfo (..), Result (..)) import Data.TreeDiff import Data.TreeDiff.Golden@@ -73,7 +73,7 @@ roundtripParsecAnsiWl :: Expr -> Property roundtripParsecAnsiWl e = counterexample info $ ediffEq (Just e) res' where- doc = show (WL.plain (ansiWlExpr e))+ doc = show (PP.unAnnotate (ansiWlExpr e)) res = P.parse (exprParser <* P.eof) "<memory>" doc info = case res of
tree-diff.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: tree-diff-version: 0.3.5+version: 0.4 synopsis: Diffing of (expression) trees. category: Data, Testing description:@@ -94,24 +94,25 @@ , parsec ^>=3.1.13.0 , pretty ^>=1.1.1.0 , text ^>=1.2.3.0 || ^>=2.0 || ^>=2.1- , time ^>=1.8.0.2 || ^>=1.9.3 || ^>=1.10 || ^>=1.11 || ^>=1.12 || ^>=1.14 || ^>=1.16+ , time ^>=1.8.0.2 || ^>=1.9.3 || ^>=1.10 || ^>=1.11 || ^>=1.12 || ^>=1.14 || ^>=1.15 build-depends:- , aeson ^>=2.2.0.0- , ansi-terminal ^>=1.1- , ansi-wl-pprint ^>=1.0.2 || ^>=1.1.1- , hashable ^>=1.4.4.0 || ^>=1.5.0.0- , parsers ^>=0.12.11- , primitive ^>=0.9.0.0- , QuickCheck ^>=2.14.2 || ^>=2.15 || ^>=2.16.0.0 || ^>=2.18.0.0- , scientific ^>=0.3.8.0- , semialign ^>=1.3.1 || ^>=1.4- , strict ^>=0.5- , tagged ^>=0.8.8- , these ^>=1.2.1- , unordered-containers ^>=0.2.20- , uuid-types ^>=1.0.6- , vector ^>=0.13.1.0+ , aeson ^>=2.2.0.0+ , ansi-terminal ^>=1.1+ , hashable ^>=1.4.4.0 || ^>=1.5.0.0+ , parsers ^>=0.12.11+ , prettyprinter ^>=1.7.2+ , prettyprinter-ansi-terminal ^>=1.1.4+ , primitive ^>=0.9.0.0+ , QuickCheck ^>=2.14.2 || ^>=2.15 || ^>=2.16.0.0 || ^>=2.18.0.0+ , scientific ^>=0.3.8.0+ , semialign ^>=1.3.1 || ^>=1.4+ , strict ^>=0.5+ , tagged ^>=0.8.8+ , these ^>=1.2.1+ , unordered-containers ^>=0.2.20+ , uuid-types ^>=1.0.6+ , vector ^>=0.13.1.0 other-extensions: CPP@@ -136,9 +137,9 @@ -- dependencies from library build-depends:- , ansi-wl-pprint , base , parsec+ , prettyprinter , primitive , QuickCheck , tree-diff