module Precis.TextOutput
(
showChangeStats
, comparingMsg
) where
import Precis.Cabal.Datatypes
import Precis.ReportMonad
import Precis.Utils.PPShowS
import Data.Maybe
showChangeStats :: ChangeStats -> ShowS
showChangeStats = vsep . catMaybes . sequence funs
where
funs = [ unresolvedModules
, unparseableModules
, removedModules
, removedExports, changedExports
, removedDatatypes, changedDatatypes
, removedTypeSigs, changedTypeSigs
, removedInstances, changedInstances
]
unresolvedModules :: ChangeStats -> Maybe ShowS
unresolvedModules = step . unresolved_mods
where
step [] = Nothing
step xs = Just $ prolog $ vsep $ map fn xs
fn (NEW s) = space <> text s <+> parens (text "new")
fn (OLD s) = space <> text s <+> parens (text "old")
prolog k = text "The following modules could not be found: " `line` k
unparseableModules :: ChangeStats -> Maybe ShowS
unparseableModules = step . unparseable_mods
where
step [] = Nothing
step xs = Just $ prolog $ vsep $ map fn xs
fn (NEW s) = space <> text s <+> parens (text "new")
fn (OLD s) = space <> text s <+> parens (text "old")
prolog k = text "The following modules could not be parsed: " `line` k
removedModules :: ChangeStats -> Maybe ShowS
removedModules =
countMsg "removed" "exposed module" "exposed modules" . removed_mods
removedExports :: ChangeStats -> Maybe ShowS
removedExports =
countMsg "removed" "export list item" "export list items" . removed_exports
changedExports :: ChangeStats -> Maybe ShowS
changedExports =
countMsg "changed" "export" "exports" . changed_exports
removedDatatypes :: ChangeStats -> Maybe ShowS
removedDatatypes = countMsg "removed" "datatype" "datatypes" . removed_datatypes
changedDatatypes :: ChangeStats -> Maybe ShowS
changedDatatypes =
countMsg "changed" "datatype" "datatypes" . changed_datatypes
removedTypeSigs :: ChangeStats -> Maybe ShowS
removedTypeSigs =
countMsg "removed" "type signature" "type signatures" . removed_typesigs
changedTypeSigs :: ChangeStats -> Maybe ShowS
changedTypeSigs =
countMsg "changed" "type signature" "type signatures" . changed_typesigs
removedInstances :: ChangeStats -> Maybe ShowS
removedInstances =
countMsg "removed" "class instance" "class instances" . removed_instances
changedInstances :: ChangeStats -> Maybe ShowS
changedInstances =
countMsg "changed" "class instance" "class instances" . changed_instances
countMsg :: String -> String -> String -> Int -> Maybe ShowS
countMsg act single plural n
| n <= 0 = Nothing
| n == 1 = Just $ int 1 <+> text single <+> text act
| otherwise = Just $ int n <+> text plural <+> text act
comparingMsg :: Package -> Package -> ShowS
comparingMsg new old = suffixEllipses $ hsep $ map text
[ "Comparing", package_name new, package_version new
, "to", package_name old, package_version old
]
where
suffixEllipses = (<> text "...")