Skip to content

Commit 32c06d4

Browse files
committed
Allow case insensitive bools and move to numeric render
1 parent 832789e commit 32c06d4

31 files changed

Lines changed: 316 additions & 362 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import Distribution.Types.VersionRange.Internal
4141
import Distribution.Utils.NubList
4242
import Distribution.Verbosity
4343
import Distribution.Version
44+
import Distribution.Types.DebugInfoLevel (DebugInfoLevel)
45+
import Distribution.Types.OptimisationLevel (OptimisationLevel)
4446

4547
import Test.QuickCheck.GenericArbitrary
4648

Cabal-syntax/src/Distribution/Parsec/Warning.hs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ data PWarnType
2525
PWTOther
2626
| -- | Invalid UTF encoding
2727
PWTUTF
28-
| -- | @true@ or @false@, not @True@ or @False@
29-
PWTBoolCase
3028
| -- | there are version with tags
3129
PWTVersionTag
3230
| -- | New syntax used, but no @cabal-version: >= 1.2@ specified

Cabal-tests/tests/ParserTests.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ warningTests = testGroup "warnings triggered"
6868
, warningTest PWTLexNBSP "nbsp.cabal"
6969
, warningTest PWTLexTab "tab.cabal"
7070
, warningTest PWTUTF "utf8.cabal"
71-
, warningTest PWTBoolCase "bool.cabal"
7271
, warningTest PWTVersionTag "versiontag.cabal"
7372
, warningTest PWTNewSyntax "newsyntax.cabal"
7473
, warningTest PWTOldSyntax "oldsyntax.cabal"

Cabal-tests/tests/ParserTests/warnings/bool.cabal

Lines changed: 0 additions & 12 deletions
This file was deleted.

Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,22 @@ import Distribution.Compiler (CompilerFlavor, CompilerId,
1818
import Distribution.InstalledPackageInfo (AbiDependency, ExposedModule, InstalledPackageInfo)
1919
import Distribution.ModuleName (ModuleName)
2020
import Distribution.PackageDescription
21-
import Distribution.Simple.Compiler (DebugInfoLevel, OptimisationLevel, ProfDetailLevel)
21+
import Distribution.Simple.Compiler (ProfDetailLevel)
2222
import Distribution.Simple.InstallDirs
23-
import Distribution.Simple.InstallDirs.Internal
23+
import Distribution.Simple.InstallDirs.Internal (PathComponent)
2424
import Distribution.Simple.Setup (HaddockTarget, TestShowDetails)
25-
import Distribution.System
25+
import Distribution.System (OS, Arch)
2626
import Distribution.Types.AbiHash (AbiHash)
2727
import Distribution.Types.ComponentId (ComponentId)
2828
import Distribution.Types.DumpBuildInfo (DumpBuildInfo)
29-
import Distribution.Types.PackageVersionConstraint
29+
import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint)
3030
import Distribution.Types.UnitId (DefUnitId, UnitId)
3131
import Distribution.Utils.NubList (NubList)
3232
import Distribution.Utils.Path (SymbolicPathX)
33-
import Distribution.Verbosity
34-
import Distribution.Verbosity.Internal
33+
import Distribution.Verbosity (VerbosityLevel, VerbosityFlags)
34+
import Distribution.Verbosity.Internal (VerbosityFlag)
35+
import Distribution.Types.DebugInfoLevel (DebugInfoLevel)
36+
import Distribution.Types.OptimisationLevel (OptimisationLevel)
3537

3638
import qualified Distribution.Compat.NonEmptySet as NES
3739

Cabal/Cabal.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,13 @@ library
170170
Distribution.TestSuite
171171
Distribution.Types.AnnotatedId
172172
Distribution.Types.ComponentInclude
173+
Distribution.Types.DebugInfoLevel
173174
Distribution.Types.DumpBuildInfo
174175
Distribution.Types.PackageName.Magic
175176
Distribution.Types.ComponentLocalBuildInfo
176177
Distribution.Types.LocalBuildConfig
177178
Distribution.Types.LocalBuildInfo
179+
Distribution.Types.OptimisationLevel
178180
Distribution.Types.TargetInfo
179181
Distribution.Types.GivenComponent
180182
Distribution.Types.ParStrat

Cabal/src/Distribution/Simple/Command.hs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ module Distribution.Simple.Command
7979
, reqArg'
8080
, optArg
8181
, optArg'
82-
, optArgDef'
8382
, noArg
8483
, boolOpt
8584
, boolOpt'
@@ -280,15 +279,6 @@ optArg'
280279
optArg' ad mkflag showflag =
281280
optArg ad (succeedReadE (mkflag . Just)) ("", mkflag Nothing) showflag
282281

283-
optArgDef'
284-
:: Monoid b
285-
=> ArgPlaceHolder
286-
-> (String, Maybe String -> b)
287-
-> (b -> [Maybe String])
288-
-> MkOptDescr (a -> b) (b -> a -> a) a
289-
optArgDef' ad (dv, mkflag) showflag =
290-
optArg ad (succeedReadE (mkflag . Just)) (dv, mkflag Nothing) showflag
291-
292282
noArg :: Eq b => b -> MkOptDescr (a -> b) (b -> a -> a) a
293283
noArg flag sf lf d = choiceOpt [(flag, (sf, lf), d)] sf lf d
294284

Cabal/src/Distribution/Simple/Compiler.hs

Lines changed: 16 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,6 @@ module Distribution.Simple.Compiler
5252
, coercePackageDBStack
5353
, readPackageDb
5454

55-
-- * Support for optimisation levels
56-
, OptimisationLevel (..)
57-
, flagToOptimisationLevel
58-
59-
-- * Support for debug info levels
60-
, DebugInfoLevel (..)
61-
, flagToDebugInfoLevel
62-
6355
-- * Support for language extensions
6456
, CompilerFlag
6557
, languageToFlags
@@ -96,22 +88,30 @@ module Distribution.Simple.Compiler
9688
, showProfDetailLevel
9789
) where
9890

99-
import Distribution.Compat.CharParsing
10091
import Distribution.Compat.Prelude
101-
import Distribution.Parsec
102-
import Distribution.Pretty
92+
import Distribution.Parsec (CabalParsing, Parsec (..), parsecToken)
93+
import Distribution.Pretty (prettyShow)
10394
import Prelude ()
10495

10596
import Distribution.Compiler
10697
import Distribution.Package (PackageName)
107-
import Distribution.Simple.Utils
98+
import Distribution.Simple.Utils (lowercase, safeLast)
10899
import Distribution.Types.UnitId (UnitId)
109100
import Distribution.Utils.Path
110-
import Distribution.Version
111-
112-
import Language.Haskell.Extension
101+
( CWD
102+
, FileOrDir (..)
103+
, Pkg
104+
, PkgDB
105+
, SymbolicPath
106+
, getSymbolicPath
107+
, interpretSymbolicPath
108+
, makeSymbolicPath
109+
, symbolicPathRelative_maybe
110+
)
111+
import Distribution.Version (Version, mkVersion)
112+
113+
import Language.Haskell.Extension (Extension, Language (..))
113114

114-
import Data.Bool (bool)
115115
import qualified Data.Map as Map (lookup)
116116
import System.Directory (canonicalizePath)
117117

@@ -304,95 +304,6 @@ coercePackageDBStack = map coercePackageDB
304304

305305
-- ------------------------------------------------------------
306306

307-
-- * Optimisation levels
308-
309-
-- ------------------------------------------------------------
310-
311-
-- | Some compilers support optimising. Some have different levels.
312-
-- For compilers that do not the level is just capped to the level
313-
-- they do support.
314-
data OptimisationLevel
315-
= NoOptimisation
316-
| NormalOptimisation
317-
| MaximumOptimisation
318-
deriving (Bounded, Enum, Eq, Generic, Read, Show)
319-
320-
instance Binary OptimisationLevel
321-
instance NFData OptimisationLevel
322-
instance Structured OptimisationLevel
323-
324-
instance Parsec OptimisationLevel where
325-
parsec = parsecOptimisationLevel
326-
327-
parsecOptimisationLevel :: CabalParsing m => m OptimisationLevel
328-
parsecOptimisationLevel = boolParser <|> intParser
329-
where
330-
boolParser = bool NoOptimisation NormalOptimisation <$> parsec
331-
intParser = intToOptimisationLevel <$> integral
332-
333-
flagToOptimisationLevel :: Maybe String -> OptimisationLevel
334-
flagToOptimisationLevel Nothing = NormalOptimisation
335-
flagToOptimisationLevel (Just s) = case reads s of
336-
[(i, "")] -> intToOptimisationLevel i
337-
_ -> error $ "Can't parse optimisation level " ++ s
338-
339-
intToOptimisationLevel :: Int -> OptimisationLevel
340-
intToOptimisationLevel i
341-
| i >= minLevel && i <= maxLevel = toEnum i
342-
| otherwise =
343-
error $
344-
"Bad optimisation level: "
345-
++ show i
346-
++ ". Valid values are "
347-
++ show minLevel
348-
++ ".."
349-
++ show maxLevel
350-
where
351-
minLevel = fromEnum (minBound :: OptimisationLevel)
352-
maxLevel = fromEnum (maxBound :: OptimisationLevel)
353-
354-
-- ------------------------------------------------------------
355-
356-
-- * Debug info levels
357-
358-
-- ------------------------------------------------------------
359-
360-
-- | Some compilers support emitting debug info. Some have different
361-
-- levels. For compilers that do not the level is just capped to the
362-
-- level they do support.
363-
data DebugInfoLevel
364-
= NoDebugInfo
365-
| MinimalDebugInfo
366-
| NormalDebugInfo
367-
| MaximalDebugInfo
368-
deriving (Bounded, Enum, Eq, Generic, Read, Show)
369-
370-
instance Binary DebugInfoLevel
371-
instance NFData DebugInfoLevel
372-
instance Structured DebugInfoLevel
373-
374-
instance Parsec DebugInfoLevel where
375-
parsec = parsecDebugInfoLevel
376-
377-
parsecDebugInfoLevel :: CabalParsing m => m DebugInfoLevel
378-
parsecDebugInfoLevel = flagToDebugInfoLevel . pure <$> parsecToken
379-
380-
flagToDebugInfoLevel :: Maybe String -> DebugInfoLevel
381-
flagToDebugInfoLevel Nothing = NormalDebugInfo
382-
flagToDebugInfoLevel (Just s) = case reads s of
383-
[(i, "")]
384-
| i >= fromEnum (minBound :: DebugInfoLevel)
385-
&& i <= fromEnum (maxBound :: DebugInfoLevel) ->
386-
toEnum i
387-
| otherwise ->
388-
error $
389-
"Bad debug info level: "
390-
++ show i
391-
++ ". Valid values are 0..3"
392-
_ -> error $ "Can't parse debug info level " ++ s
393-
394-
-- ------------------------------------------------------------
395-
396307
-- * Languages and Extensions
397308

398309
-- ------------------------------------------------------------

Cabal/src/Distribution/Simple/Configure.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ import Distribution.Pretty
164164
)
165165
import Distribution.Simple.Errors
166166
import Distribution.Types.AnnotatedId
167+
import Distribution.Types.DebugInfoLevel (DebugInfoLevel (..))
167168
import Distribution.Utils.Path
168169
import Distribution.Utils.Structured (structuredDecodeOrFailIO, structuredEncode)
169170
import System.Directory

Cabal/src/Distribution/Simple/Flag.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ module Distribution.Simple.Flag
3030
, flagToList
3131
, maybeToFlag
3232
, mergeListFlag
33+
, fromFlagOrMonoid
3334
, BooleanFlag (..)
3435
) where
3536

@@ -86,6 +87,10 @@ fromFlag NoFlag = error "fromFlag NoFlag. Use fromFlagOrDefault"
8687
fromFlagOrDefault :: a -> Flag a -> a
8788
fromFlagOrDefault def = fromMaybe def . getLast
8889

90+
-- | Extracts a value from a 'Flag', and returns the mempty value on 'NoFlag'.
91+
fromFlagOrMonoid :: Monoid a => Flag a -> a
92+
fromFlagOrMonoid = fromFlagOrDefault mempty
93+
8994
-- | Converts a 'Flag' value to a 'Maybe' value.
9095
flagToMaybe :: Flag a -> Maybe a
9196
flagToMaybe = getLast

0 commit comments

Comments
 (0)