aboutsummaryrefslogtreecommitdiffstats
path: root/app/Patch.hs
diff options
context:
space:
mode:
authorLibravatar Alexander Foremny <aforemny@posteo.de>2024-02-29 04:11:10 +0100
committerLibravatar Alexander Foremny <aforemny@posteo.de>2024-03-01 06:45:13 +0100
commit9a49ec0dcd6f75736949350844f85d80fe48a662 (patch)
treeb506bb61f4951207aa1aff04080fd3d7874927c3 /app/Patch.hs
parent941f0d4ccb688d42c0438e05051ed78a410431b6 (diff)
wip: add `review` command
Prototype of the `review` command, cf. `anissue review -h`. Also adds the `status` command.
Diffstat (limited to 'app/Patch.hs')
-rw-r--r--app/Patch.hs29
1 files changed, 22 insertions, 7 deletions
diff --git a/app/Patch.hs b/app/Patch.hs
index 9e6ed88..a301382 100644
--- a/app/Patch.hs
+++ b/app/Patch.hs
@@ -1,11 +1,12 @@
{-# LANGUAGE DerivingStrategies #-}
module Patch
- ( Patch,
+ ( Patch (..),
parse,
)
where
+import Prettyprinter (pretty)
import Control.Exception (throw)
import Data.Binary (Binary (..))
import Data.Text qualified as T
@@ -31,14 +32,28 @@ instance P.Render Patch where
instance P.Render (P.Detailed Patch) where
render (P.Detailed (Patch {..})) =
- P.vsep $ map prettyFileDelta fileDeltas
+ P.vsep (map prettyFileDelta fileDeltas) <<< ("\n" :: T.Text)
where
- prettyFileDelta (D.FileDelta {..}) = prettyContent fileDeltaContent
+ prettyFileDelta (D.FileDelta {..}) =
+ ("diff --git " <> fileDeltaSourceFile <> " " <> fileDeltaDestFile <> "\n")
+ <<< (prettySourceFile fileDeltaSourceFile <<< ("\n" :: T.Text))
+ <<< (prettyDestFile fileDeltaDestFile <<< ("\n" :: T.Text))
+ <<< prettyContent fileDeltaContent
+ prettySourceFile file = P.styled [P.bold] $ ("---" :: T.Text) <<< file
+ prettyDestFile file = P.styled [P.bold] $ ("+++" :: T.Text) <<< file
prettyContent D.Binary = P.emptyDoc
prettyContent (D.Hunks hunks) = P.vsep (map prettyHunk hunks)
- prettyHunk (D.Hunk {..}) = P.vsep $ map prettyLine hunkLines
+ prettyHunk (D.Hunk {..}) =
+ P.styled [P.color P.Blue] $
+ (prettySourceRange hunkSourceRange hunkDestRange <<< ("\n" :: T.Text))
+ <<< P.vsep (map prettyLine hunkLines)
+ prettySourceRange srcRange dstRange =
+ ("" :: T.Text) <<< ("@@ -" <> prettyRange srcRange <> " +" <> prettyRange dstRange <> " @@")
+ prettyRange (D.Range line lineNo) =
+ T.pack (show line) <> "," <> T.pack (show lineNo)
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
+ D.Added -> P.styled [P.color P.Green] $ P.plus @P.AnsiStyle <> pretty lineContent
+ D.Removed -> P.styled [P.color P.Red] $ P.minus @P.AnsiStyle <> pretty lineContent
+ D.Context -> P.styled [P.color P.White] $ P.space @P.AnsiStyle <> pretty lineContent
+ D.Comment -> P.styled [P.color P.White] $ P.hash @P.AnsiStyle <> pretty lineContent