Skip to content

Commit 4538a54

Browse files
committed
Change Text insances into Pretty/Parsec
1 parent e56f0aa commit 4538a54

File tree

14 files changed

+266
-211
lines changed

14 files changed

+266
-211
lines changed

Cabal/Distribution/Types/Flag.hs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ module Distribution.Types.Flag (
1818
showFlagValue,
1919
dispFlagAssignment,
2020
parsecFlagAssignment,
21+
parsecFlagAssignmentNonEmpty,
22+
describeFlagAssignment,
2123
) where
2224

2325
import Prelude ()
@@ -255,3 +257,25 @@ parsecFlagAssignment = mkFlagAssignment <$>
255257
_ <- P.char '-'
256258
f <- parsec
257259
return (f, False)
260+
261+
-- | Parse a non-empty flag assignment
262+
--
263+
-- The flags have to explicitly start with minus or plus.
264+
--
265+
-- @since 3.4.0.0
266+
parsecFlagAssignmentNonEmpty :: CabalParsing m => m FlagAssignment
267+
parsecFlagAssignmentNonEmpty = mkFlagAssignment . toList <$>
268+
P.sepByNonEmpty (onFlag <|> offFlag) P.skipSpaces1
269+
where
270+
onFlag = do
271+
_ <- P.char '+'
272+
f <- parsec
273+
return (f, True)
274+
offFlag = do
275+
_ <- P.char '-'
276+
f <- parsec
277+
return (f, False)
278+
279+
describeFlagAssignment :: GrammarRegex void
280+
describeFlagAssignment = REMunch1 RESpaces1 $
281+
REUnion [fromString "+", fromString "-"] <> describe (Proxy :: Proxy FlagName)

cabal-install/Distribution/Client/BuildReports/Types.hs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,15 @@ module Distribution.Client.BuildReports.Types (
1515
ReportLevel(..),
1616
) where
1717

18-
import qualified Distribution.Deprecated.Text as Text
19-
( Text(..) )
20-
21-
import qualified Distribution.Deprecated.ReadP as Parse
22-
( pfail, munch1 )
18+
import qualified Distribution.Compat.CharParsing as P
2319
import qualified Text.PrettyPrint as Disp
24-
( text )
2520

2621
import Data.Char as Char
2722
( isAlpha, toLower )
2823
import GHC.Generics (Generic)
2924
import Distribution.Compat.Binary (Binary)
25+
import Distribution.Parsec (Parsec (..))
26+
import Distribution.Pretty (Pretty (..))
3027
import Distribution.Utils.Structured (Structured)
3128

3229
data ReportLevel = NoReports | AnonymousReports | DetailedReports
@@ -35,17 +32,19 @@ data ReportLevel = NoReports | AnonymousReports | DetailedReports
3532
instance Binary ReportLevel
3633
instance Structured ReportLevel
3734

38-
instance Text.Text ReportLevel where
39-
disp NoReports = Disp.text "none"
40-
disp AnonymousReports = Disp.text "anonymous"
41-
disp DetailedReports = Disp.text "detailed"
42-
parse = do
43-
name <- Parse.munch1 Char.isAlpha
35+
instance Pretty ReportLevel where
36+
pretty NoReports = Disp.text "none"
37+
pretty AnonymousReports = Disp.text "anonymous"
38+
pretty DetailedReports = Disp.text "detailed"
39+
40+
instance Parsec ReportLevel where
41+
parsec = do
42+
name <- P.munch1 Char.isAlpha
4443
case lowercase name of
4544
"none" -> return NoReports
4645
"anonymous" -> return AnonymousReports
4746
"detailed" -> return DetailedReports
48-
_ -> Parse.pfail
47+
_ -> P.unexpected $ "ReportLevel: " ++ name
4948

5049
lowercase :: String -> String
5150
lowercase = map Char.toLower

cabal-install/Distribution/Client/Configure.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import Prelude ()
2626
import Distribution.Client.Compat.Prelude
2727
import Distribution.Utils.Generic (safeHead)
2828

29+
import Distribution.Pretty (prettyShow)
2930
import Distribution.Client.Dependency
3031
import qualified Distribution.Client.InstallPlan as InstallPlan
3132
import Distribution.Client.SolverInstallPlan (SolverInstallPlan)
@@ -287,7 +288,7 @@ checkConfigExFlags verbosity installedPkgIndex sourcePkgIndex flags = do
287288
unknown pkg = null (lookupPackageName installedPkgIndex pkg)
288289
&& not (elemByPackageName sourcePkgIndex pkg)
289290
showConstraint (uc, src) =
290-
display uc ++ " (" ++ showConstraintSource src ++ ")"
291+
prettyShow uc ++ " (" ++ showConstraintSource src ++ ")"
291292

292293
-- | Make an 'InstallPlan' for the unpacked package in the current directory,
293294
-- and all its dependencies.

cabal-install/Distribution/Client/Dependency/Types.hs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ module Distribution.Client.Dependency.Types (
88
import Distribution.Client.Compat.Prelude
99
import Prelude ()
1010

11-
import Distribution.Deprecated.Text (Text (..))
12-
import Text.PrettyPrint (text)
11+
import Distribution.Parsec (Parsec (..))
12+
import Distribution.Pretty (Pretty (..))
13+
import Text.PrettyPrint (text)
1314

14-
import qualified Distribution.Deprecated.ReadP as Parse (munch1, pfail)
15+
import qualified Distribution.Compat.CharParsing as P
1516

1617

1718
-- | All the solvers that can be selected.
@@ -28,13 +29,15 @@ instance Binary Solver
2829
instance Structured PreSolver
2930
instance Structured Solver
3031

31-
instance Text PreSolver where
32-
disp AlwaysModular = text "modular"
33-
parse = do
34-
name <- Parse.munch1 isAlpha
35-
case map toLower name of
36-
"modular" -> return AlwaysModular
37-
_ -> Parse.pfail
32+
instance Pretty PreSolver where
33+
pretty AlwaysModular = text "modular"
34+
35+
instance Parsec PreSolver where
36+
parsec = do
37+
name <- P.munch1 isAlpha
38+
case map toLower name of
39+
"modular" -> return AlwaysModular
40+
_ -> P.unexpected $ "PreSolver: " ++ name
3841

3942
-- | Global policy for all packages to say if we prefer package versions that
4043
-- are already installed locally or if we just prefer the latest available.

cabal-install/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ import Distribution.Client.CmdInstall.ClientInstallFlags
4040

4141
import Distribution.Solver.Types.ConstraintSource
4242

43+
import Distribution.Pretty (Pretty (..))
44+
import Distribution.Parsec (Parsec (..))
4345
import Distribution.Package
4446
import Distribution.PackageDescription
4547
( dispFlagAssignment )
@@ -79,16 +81,15 @@ import Text.PrettyPrint
7981
import qualified Distribution.Deprecated.ParseUtils as ParseUtils
8082
import Distribution.Deprecated.ParseUtils
8183
( ParseResult(..), PError(..), syntaxError, PWarning(..)
82-
, simpleField, commaNewLineListField, newLineListField, parseTokenQ
84+
, simpleField, commaNewLineListFieldParsec, newLineListField, parseTokenQ
8385
, parseHaskellString, showToken )
8486
import Distribution.Client.ParseUtils
8587
import Distribution.Simple.Command
8688
( CommandUI(commandOptions), ShowOrParseArgs(..)
8789
, OptionField, option, reqArg' )
8890
import Distribution.Types.PackageVersionConstraint
8991
( PackageVersionConstraint )
90-
import Distribution.Parsec (Parsec (..), ParsecParser)
91-
import Distribution.Pretty (Pretty (..))
92+
import Distribution.Parsec (ParsecParser)
9293

9394
import qualified Data.Map as Map
9495

@@ -860,8 +861,8 @@ legacyProjectConfigFieldDescrs =
860861
(Disp.text . renderPackageLocationToken) parsePackageLocationTokenQ
861862
legacyPackagesOptional
862863
(\v flags -> flags { legacyPackagesOptional = v })
863-
, commaNewLineListField "extra-packages"
864-
disp parse
864+
, commaNewLineListFieldParsec "extra-packages"
865+
pretty parsec
865866
legacyPackagesNamed
866867
(\v flags -> flags { legacyPackagesNamed = v })
867868
]
@@ -959,12 +960,12 @@ legacySharedConfigFieldDescrs =
959960
legacyConfigureExFlags
960961
(\flags conf -> conf { legacyConfigureExFlags = flags })
961962
. addFields
962-
[ commaNewLineListField "constraints"
963-
(disp . fst) (fmap (\constraint -> (constraint, constraintSrc)) parse)
963+
[ commaNewLineListFieldParsec "constraints"
964+
(pretty . fst) (fmap (\constraint -> (constraint, constraintSrc)) parsec)
964965
configExConstraints (\v conf -> conf { configExConstraints = v })
965966

966-
, commaNewLineListField "preferences"
967-
disp parse
967+
, commaNewLineListFieldParsec "preferences"
968+
pretty parsec
968969
configPreferences (\v conf -> conf { configPreferences = v })
969970

970971
, monoidFieldParsec "allow-older"
@@ -1014,7 +1015,7 @@ legacySharedConfigFieldDescrs =
10141015
. commandOptionsToFields
10151016
) (clientInstallOptions ParseArgs)
10161017
where
1017-
constraintSrc = ConstraintSourceProjectConfig "TODO"
1018+
constraintSrc = ConstraintSourceProjectConfig "TODO" -- TODO: is a filepath
10181019

10191020

10201021
legacyPackageConfigFieldDescrs :: [FieldDescr LegacyPackageConfig]

cabal-install/Distribution/Client/Sandbox/PackageEnvironment.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ import System.Directory ( doesFileExist )
5454
import System.FilePath ( (</>) )
5555
import System.IO.Error ( isDoesNotExistError )
5656
import Text.PrettyPrint ( ($+$) )
57+
import Distribution.Parsec (Parsec (..))
58+
import Distribution.Pretty (Pretty (..))
5759

5860
import qualified Text.PrettyPrint as Disp
5961
import qualified Distribution.Deprecated.ParseUtils as ParseUtils ( Field(..) )
@@ -144,7 +146,7 @@ loadUserConfig verbosity pkgEnvDir globalConfigLocation =
144146
pkgEnvFieldDescrs :: ConstraintSource -> [FieldDescr PackageEnvironment]
145147
pkgEnvFieldDescrs src =
146148
[ commaNewLineListField "constraints"
147-
(Text.disp . fst) ((\pc -> (pc, src)) `fmap` Text.parse)
149+
(pretty . fst) ((\pc -> (pc, src)) `fmap` parsec)
148150
(sortConstraints . configExConstraints
149151
. savedConfigureExFlags . pkgEnvSavedConfig)
150152
(\v pkgEnv -> updateConfigureExFlags pkgEnv

0 commit comments

Comments
 (0)