aboutsummaryrefslogtreecommitdiffstats
path: root/app/Patch.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Patch.hs')
-rw-r--r--app/Patch.hs35
1 files changed, 18 insertions, 17 deletions
diff --git a/app/Patch.hs b/app/Patch.hs
index f1c547a..0600a34 100644
--- a/app/Patch.hs
+++ b/app/Patch.hs
@@ -1,16 +1,14 @@
module Patch
( Patch,
parse,
- render,
)
where
import Control.Exception (throw)
import Data.Text qualified as T
import Exception qualified as E
-import Prettyprinter (pretty)
-import Prettyprinter qualified as P
-import Prettyprinter.Render.Terminal qualified as P
+import Render ((<<<))
+import Render qualified as P
import Text.Diff.Parse qualified as D
import Text.Diff.Parse.Types qualified as D
@@ -22,16 +20,19 @@ newtype Patch = Patch
parse :: T.Text -> Patch
parse = either (throw . E.InvalidDiff) Patch . D.parseDiff
-render :: Patch -> P.Doc P.AnsiStyle
-render (Patch {..}) =
- P.vsep $ map prettyFileDelta fileDeltas
- where
- prettyFileDelta (D.FileDelta {..}) = prettyContent fileDeltaContent
- prettyContent D.Binary = P.emptyDoc
- prettyContent (D.Hunks hunks) = P.vsep (map prettyHunk hunks)
- prettyHunk (D.Hunk {..}) = P.vsep $ map prettyLine hunkLines
- prettyLine (D.Line {..}) =
- case lineAnnotation of
- D.Added -> P.annotate (P.color P.Green) $ P.pretty ("+" :: T.Text) <> pretty lineContent
- D.Removed -> P.annotate (P.color P.Red) $ P.pretty ("-" :: T.Text) <> pretty lineContent
- D.Context -> P.annotate (P.color P.White) $ P.pretty (" " :: T.Text) <> pretty lineContent
+instance P.Render Patch where
+ render = P.render . P.Detailed
+
+instance P.Render (P.Detailed Patch) where
+ render (P.Detailed (Patch {..})) =
+ P.vsep $ map prettyFileDelta fileDeltas
+ where
+ prettyFileDelta (D.FileDelta {..}) = prettyContent fileDeltaContent
+ prettyContent D.Binary = P.emptyDoc
+ prettyContent (D.Hunks hunks) = P.vsep (map prettyHunk hunks)
+ prettyHunk (D.Hunk {..}) = P.vsep $ map prettyLine hunkLines
+ prettyLine (D.Line {..}) =
+ case lineAnnotation of
+ D.Added -> P.styled [P.color P.Green] $ P.plus @P.AnsiStyle <<< lineContent
+ D.Removed -> P.styled [P.color P.Red] $ P.minus @P.AnsiStyle <<< lineContent
+ D.Context -> P.styled [P.color P.White] $ P.space @P.AnsiStyle <<< lineContent