Skip to content

Commit ae3486a

Browse files
authored
Merge pull request #6766 from phadej/described-package-version-constrain
Add Described PackageVersionConstraint
2 parents 72a3962 + 2c27ddf commit ae3486a

File tree

4 files changed

+68
-23
lines changed

4 files changed

+68
-23
lines changed

Cabal/Cabal-quickcheck/src/Test/QuickCheck/Instances/Cabal.hs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,22 @@ import Distribution.Utils.Generic (lowercase)
99
import Test.QuickCheck
1010

1111
import Distribution.CabalSpecVersion
12-
import Distribution.Simple.Flag (Flag (..))
12+
import Distribution.ModuleName
13+
import Distribution.Parsec.Newtypes
14+
import Distribution.Simple.Flag (Flag (..))
1315
import Distribution.SPDX
1416
import Distribution.System
1517
import Distribution.Types.Dependency
16-
import Distribution.Types.Flag (FlagAssignment, FlagName, mkFlagName, mkFlagAssignment)
18+
import Distribution.Types.Flag
19+
(FlagAssignment, FlagName, mkFlagAssignment, mkFlagName)
1720
import Distribution.Types.LibraryName
1821
import Distribution.Types.PackageName
22+
import Distribution.Types.PackageVersionConstraint
1923
import Distribution.Types.SourceRepo
2024
import Distribution.Types.UnqualComponentName
21-
import Distribution.ModuleName
2225
import Distribution.Types.VersionRange.Internal
2326
import Distribution.Verbosity
2427
import Distribution.Version
25-
import Distribution.Parsec.Newtypes
2628

2729
#if !MIN_VERSION_base(4,8,0)
2830
import Control.Applicative (pure, (<$>), (<*>))
@@ -169,6 +171,20 @@ instance Arbitrary Dependency where
169171
| (pn', vr', lb') <- shrink (pn, vr, lb)
170172
]
171173

174+
-------------------------------------------------------------------------------
175+
-- PackageVersionConstraint
176+
-------------------------------------------------------------------------------
177+
178+
instance Arbitrary PackageVersionConstraint where
179+
arbitrary = PackageVersionConstraint
180+
<$> arbitrary
181+
<*> arbitrary
182+
183+
shrink (PackageVersionConstraint pn vr) =
184+
[ PackageVersionConstraint pn' vr'
185+
| (pn', vr') <- shrink (pn, vr)
186+
]
187+
172188
-------------------------------------------------------------------------------
173189
-- System
174190
-------------------------------------------------------------------------------

Cabal/Distribution/Types/PackageVersionConstraint.hs

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import Prelude ()
1010
import Distribution.Parsec
1111
import Distribution.Pretty
1212
import Distribution.Types.PackageName
13-
import Distribution.Types.VersionRange
13+
import Distribution.Types.PackageId
14+
import Distribution.Types.Version
15+
import Distribution.Types.VersionRange.Internal
16+
import Distribution.FieldGrammar.Described
1417

1518
import qualified Distribution.Compat.CharParsing as P
1619
import Text.PrettyPrint ((<+>))
@@ -28,13 +31,41 @@ instance Structured PackageVersionConstraint
2831
instance NFData PackageVersionConstraint where rnf = genericRnf
2932

3033
instance Pretty PackageVersionConstraint where
31-
pretty (PackageVersionConstraint name ver) = pretty name <+> pretty ver
34+
-- Cannot do: PackageVersionConstraint have to be parseable
35+
-- as Dependency, due roundtrip problems. (e.g. talking to old ./Setup).
36+
--
37+
-- pretty (PackageVersionConstraint name (ThisVersion ver)) =
38+
-- pretty (PackageIdentifier name ver)
39+
pretty (PackageVersionConstraint name ver) =
40+
pretty name <+> pretty ver
3241

42+
-- |
43+
--
44+
-- >>> simpleParsec "foo" :: Maybe PackageVersionConstraint
45+
-- Just (PackageVersionConstraint (PackageName "foo") (OrLaterVersion (mkVersion [0])))
46+
--
47+
-- >>> simpleParsec "foo >=2.0" :: Maybe PackageVersionConstraint
48+
-- Just (PackageVersionConstraint (PackageName "foo") (OrLaterVersion (mkVersion [2,0])))
49+
--
50+
-- >>> simpleParsec "foo-2.0" :: Maybe PackageVersionConstraint
51+
-- Just (PackageVersionConstraint (PackageName "foo") (ThisVersion (mkVersion [2,0])))
52+
--
3353
instance Parsec PackageVersionConstraint where
3454
parsec = do
35-
name <- parsec
36-
P.spaces
37-
ver <- parsec <|> return anyVersion
38-
P.spaces
39-
return (PackageVersionConstraint name ver)
55+
PackageIdentifier name ver <- parsec
56+
if ver == nullVersion
57+
then do
58+
P.spaces
59+
vr <- parsec <|> return anyVersion
60+
P.spaces
61+
return (PackageVersionConstraint name vr)
62+
else
63+
pure (PackageVersionConstraint name (thisVersion ver))
4064

65+
instance Described PackageVersionConstraint where
66+
describe _ = describe (Proxy :: Proxy PackageName) <> REUnion
67+
[ fromString "-" <> describe (Proxy :: Proxy Version)
68+
-- TODO: change to RESpaces when -any and -none are removed
69+
-- Related https://github.com/haskell/cabal/issues/6760
70+
, RESpaces1 <> describe (Proxy :: Proxy VersionRange)
71+
]

Cabal/tests/UnitTests/Distribution/Described.hs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ import Test.QuickCheck (Arbitrary (..), Gen, Property, choose, counterexam
1111
import Test.Tasty (TestTree, testGroup)
1212
import Test.Tasty.QuickCheck (testProperty)
1313

14-
import Distribution.FieldGrammar.Described (Described (..), GrammarRegex (..), reComma, reSpacedComma, reSpacedList)
14+
import Distribution.FieldGrammar.Described
15+
(Described (..), GrammarRegex (..), reComma, reSpacedComma, reSpacedList)
1516
import Distribution.Parsec (eitherParsec)
1617
import Distribution.Pretty (prettyShow)
1718

1819
import qualified Distribution.Utils.CharSet as CS
1920

20-
import Distribution.ModuleName (ModuleName)
21-
import Distribution.Types.Dependency (Dependency)
22-
import Distribution.Types.Flag (FlagName)
23-
import Distribution.Types.PackageName (PackageName)
24-
import Distribution.Types.Version (Version)
25-
import Distribution.Types.VersionRange (VersionRange)
21+
import Distribution.ModuleName (ModuleName)
22+
import Distribution.Types.Dependency (Dependency)
23+
import Distribution.Types.Flag (FlagName)
24+
import Distribution.Types.PackageName (PackageName)
25+
import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint)
26+
import Distribution.Types.Version (Version)
27+
import Distribution.Types.VersionRange (VersionRange)
2628

2729
import qualified RERE as RE
2830
import qualified RERE.CharSet as RE
@@ -34,6 +36,7 @@ tests :: TestTree
3436
tests = testGroup "Described"
3537
[ testDescribed (Proxy :: Proxy Dependency)
3638
, testDescribed (Proxy :: Proxy PackageName)
39+
, testDescribed (Proxy :: Proxy PackageVersionConstraint)
3740
, testDescribed (Proxy :: Proxy Version)
3841
, testDescribed (Proxy :: Proxy VersionRange)
3942
, testDescribed (Proxy :: Proxy FlagName)

cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ module UnitTests.Distribution.Client.ArbitraryInstances (
2020
import Distribution.Client.Compat.Prelude
2121
import Prelude ()
2222

23-
import Distribution.Types.PackageVersionConstraint
24-
2523
import Distribution.Simple.InstallDirs
2624
import Distribution.Simple.Setup
2725

@@ -139,9 +137,6 @@ instance Arbitrary ShortToken where
139137
arbitraryShortToken :: Gen String
140138
arbitraryShortToken = getShortToken <$> arbitrary
141139

142-
instance Arbitrary PackageVersionConstraint where
143-
arbitrary = PackageVersionConstraint <$> arbitrary <*> arbitrary
144-
145140
instance (Arbitrary a, Ord a) => Arbitrary (NubList a) where
146141
arbitrary = toNubList <$> arbitrary
147142
shrink xs = [ toNubList [] | (not . null) (fromNubList xs) ]

0 commit comments

Comments
 (0)