Skip to content

Commit c753f62

Browse files
authored
Merge pull request #6781 from phadej/more-described
More described
2 parents e015931 + 2142a6a commit c753f62

File tree

4 files changed

+55
-7
lines changed

4 files changed

+55
-7
lines changed

Cabal/Distribution/System.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import Distribution.Utils.Generic (lowercase)
5050

5151
import Distribution.Parsec
5252
import Distribution.Pretty
53+
import Distribution.FieldGrammar.Described
5354

5455
import qualified Distribution.Compat.CharParsing as P
5556
import qualified Text.PrettyPrint as Disp
@@ -132,6 +133,13 @@ instance Pretty OS where
132133
instance Parsec OS where
133134
parsec = classifyOS Compat <$> parsecIdent
134135

136+
instance Described OS where
137+
describe _ = REUnion
138+
[ fromString al
139+
| os <- knownOSs
140+
, al <- prettyShow os : osAliases Compat os
141+
]
142+
135143
classifyOS :: ClassificationStrictness -> String -> OS
136144
classifyOS strictness s =
137145
fromMaybe (OtherOS s) $ lookup (lowercase s) osMap
@@ -198,6 +206,12 @@ instance Pretty Arch where
198206
instance Parsec Arch where
199207
parsec = classifyArch Strict <$> parsecIdent
200208

209+
instance Described Arch where
210+
describe _ = REUnion
211+
[ fromString (prettyShow arch)
212+
| arch <- knownArches
213+
]
214+
201215
classifyArch :: ClassificationStrictness -> String -> Arch
202216
classifyArch strictness s =
203217
fromMaybe (OtherArch s) $ lookup (lowercase s) archMap

Cabal/Distribution/Types/Flag.hs

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module Distribution.Types.Flag (
1919
dispFlagAssignment,
2020
parsecFlagAssignment,
2121
parsecFlagAssignmentNonEmpty,
22-
describeFlagAssignment,
22+
describeFlagAssignmentNonEmpty,
2323
) where
2424

2525
import Prelude ()
@@ -240,6 +240,36 @@ showFlagValue :: (FlagName, Bool) -> String
240240
showFlagValue (f, True) = '+' : unFlagName f
241241
showFlagValue (f, False) = '-' : unFlagName f
242242

243+
-- | @since 3.4.0.0
244+
instance Pretty FlagAssignment where
245+
pretty = dispFlagAssignment
246+
247+
-- |
248+
--
249+
-- >>> simpleParsec "" :: Maybe FlagAssignment
250+
-- Just (fromList [])
251+
--
252+
-- >>> simpleParsec "+foo -bar" :: Maybe FlagAssignment
253+
-- Just (fromList [(FlagName "bar",(1,False)),(FlagName "foo",(1,True))])
254+
--
255+
-- >>> simpleParsec "-none -any" :: Maybe FlagAssignment
256+
-- Just (fromList [(FlagName "any",(1,False)),(FlagName "none",(1,False))])
257+
--
258+
-- >>> simpleParsec "+foo -foo +foo +foo" :: Maybe FlagAssignment
259+
-- Just (fromList [(FlagName "foo",(4,True))])
260+
--
261+
-- >>> simpleParsec "+foo -bar baz" :: Maybe FlagAssignment
262+
-- Nothing
263+
--
264+
-- @since 3.4.0.0
265+
--
266+
instance Parsec FlagAssignment where
267+
parsec = parsecFlagAssignment
268+
269+
instance Described FlagAssignment where
270+
describe _ = REMunch RESpaces1 $
271+
REUnion [fromString "+", fromString "-"] <> describe (Proxy :: Proxy FlagName)
272+
243273
-- | Pretty-prints a flag assignment.
244274
dispFlagAssignment :: FlagAssignment -> Disp.Doc
245275
dispFlagAssignment = Disp.hsep . map (Disp.text . showFlagValue) . unFlagAssignment
@@ -250,7 +280,7 @@ parsecFlagAssignment = mkFlagAssignment <$>
250280
P.sepBy (onFlag <|> offFlag) P.skipSpaces1
251281
where
252282
onFlag = do
253-
_ <- P.optional (P.char '+')
283+
_ <- P.char '+'
254284
f <- parsec
255285
return (f, True)
256286
offFlag = do
@@ -276,6 +306,6 @@ parsecFlagAssignmentNonEmpty = mkFlagAssignment . toList <$>
276306
f <- parsec
277307
return (f, False)
278308

279-
describeFlagAssignment :: GrammarRegex void
280-
describeFlagAssignment = REMunch1 RESpaces1 $
309+
describeFlagAssignmentNonEmpty :: GrammarRegex void
310+
describeFlagAssignmentNonEmpty = REMunch1 RESpaces1 $
281311
REUnion [fromString "+", fromString "-"] <> describe (Proxy :: Proxy FlagName)

Cabal/tests/UnitTests/Distribution/Described.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ import qualified Distribution.Utils.CharSet as CS
2020

2121
import Distribution.ModuleName (ModuleName)
2222
import Distribution.Types.Dependency (Dependency)
23-
import Distribution.Types.Flag (FlagName)
23+
import Distribution.Types.Flag (FlagName, FlagAssignment)
2424
import Distribution.Types.PackageId (PackageIdentifier)
2525
import Distribution.Types.PackageName (PackageName)
2626
import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint)
2727
import Distribution.Types.Version (Version)
28+
import Distribution.System (OS, Arch)
2829
import Distribution.Types.VersionRange (VersionRange)
2930

3031
import qualified RERE as RE
@@ -42,7 +43,10 @@ tests = testGroup "Described"
4243
, testDescribed (Proxy :: Proxy Version)
4344
, testDescribed (Proxy :: Proxy VersionRange)
4445
, testDescribed (Proxy :: Proxy FlagName)
46+
, testDescribed (Proxy :: Proxy FlagAssignment)
4547
, testDescribed (Proxy :: Proxy ModuleName)
48+
, testDescribed (Proxy :: Proxy OS)
49+
, testDescribed (Proxy :: Proxy Arch)
4650
]
4751

4852
-------------------------------------------------------------------------------

cabal-install/Distribution/Client/Targets.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ import Distribution.Types.PackageVersionConstraint
7979
import Distribution.PackageDescription
8080
( GenericPackageDescription )
8181
import Distribution.Types.Flag
82-
( nullFlagAssignment, parsecFlagAssignmentNonEmpty, describeFlagAssignment )
82+
( nullFlagAssignment, parsecFlagAssignmentNonEmpty, describeFlagAssignmentNonEmpty )
8383
import Distribution.Version
8484
( VersionRange, anyVersion, isAnyVersion )
8585
import Distribution.Pretty (Pretty (..), prettyShow)
@@ -745,7 +745,7 @@ instance Described UserConstraint where
745745
, fromString "source"
746746
, fromString "test"
747747
, fromString "bench"
748-
, describeFlagAssignment
748+
, describeFlagAssignmentNonEmpty
749749
]
750750

751751
describePN :: GrammarRegex void

0 commit comments

Comments
 (0)