module Skeletest.Internal.Utils.Diff ( showLineDiff, ) where import Data.Algorithm.DiffContext (getContextDiff, prettyContextDiff) import Data.Algorithm.DiffContext qualified as Diff import Data.Text (Text) import Data.Text qualified as Text import Text.PrettyPrint qualified as PP showLineDiff :: (Text, Text) -> (Text, Text) -> Text showLineDiff :: (Text, Text) -> (Text, Text) -> Text showLineDiff (Text fromName, Text fromContent) (Text toName, Text toContent) = String -> Text Text.pack (String -> Text) -> (Doc -> String) -> Doc -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . Doc -> String PP.render (Doc -> Text) -> Doc -> Text forall a b. (a -> b) -> a -> b $ Doc -> Doc -> (Numbered Text -> Doc) -> ContextDiff (Numbered Text) -> Doc forall c. Doc -> Doc -> (Numbered c -> Doc) -> ContextDiff (Numbered c) -> Doc prettyContextDiff (Text -> Doc ppText Text fromName) (Text -> Doc ppText Text toName) (Text -> Doc ppText (Text -> Doc) -> (Numbered Text -> Text) -> Numbered Text -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . Numbered Text -> Text forall a. Numbered a -> a Diff.unnumber) (ContextDiff (Numbered Text) -> Doc) -> ContextDiff (Numbered Text) -> Doc forall a b. (a -> b) -> a -> b $ Maybe Int -> [Text] -> [Text] -> ContextDiff (Numbered Text) forall a. Eq a => Maybe Int -> [a] -> [a] -> ContextDiff (Numbered a) getContextDiff (Int -> Maybe Int forall a. a -> Maybe a Just Int 5) (Text -> [Text] Text.lines Text fromContent) (Text -> [Text] Text.lines Text toContent) where ppText :: Text -> Doc ppText = String -> Doc PP.text (String -> Doc) -> (Text -> String) -> Text -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String Text.unpack