cabal-fmt-0.1: src/CabalFmt/Fields/TestedWith.hs
{-# LANGUAGE OverloadedStrings #-}
module CabalFmt.Fields.TestedWith (
testedWithF,
) where
import Distribution.Compat.Newtype
import qualified Distribution.Parsec as C
import qualified Distribution.Compiler as C
import qualified Distribution.Parsec.Newtypes as C
import qualified Distribution.Pretty as C
import qualified Distribution.Types.VersionRange as C
import qualified Text.PrettyPrint as PP
import qualified Data.Map.Strict as Map
import CabalFmt.Fields
testedWithF :: FieldDescrs () ()
testedWithF = singletonF "tested-with" pretty parse where
parse :: C.CabalParsing m => m [(C.CompilerFlavor, C.VersionRange)]
parse = unpack' (C.alaList' C.FSep C.TestedWith) <$> C.parsec
pretty :: [(C.CompilerFlavor, C.VersionRange)] -> PP.Doc
pretty tw0 = PP.fsep $ PP.punctuate PP.comma
[ prettyC c PP.<+> C.pretty vr
| (c, vr) <- Map.toList tw1
]
where
tw1 :: Map.Map C.CompilerFlavor C.VersionRange
tw1 = Map.fromListWith C.unionVersionRanges tw0
prettyC C.GHC = PP.text "GHC"
prettyC C.GHCJS = PP.text "GHCJS"
prettyC c = C.pretty c