diff options
Diffstat (limited to 'app/Patch.hs')
-rw-r--r-- | app/Patch.hs | 35 |
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 |