Skip to content

Commit e015931

Browse files
authored
Merge pull request #6764 from phadej/remove-text-instances
Remove text instances
2 parents 05bbea3 + 492f746 commit e015931

File tree

22 files changed

+329
-309
lines changed

22 files changed

+329
-309
lines changed

Cabal/Distribution/Compat/CharParsing.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ module Distribution.Compat.CharParsing
3838
, CharParsing(..)
3939
-- * Cabal additions
4040
, integral
41+
, signedIntegral
4142
, munch1
4243
, munch
4344
, skipSpaces1
@@ -331,6 +332,14 @@ integral = toNumber <$> some d <?> "integral"
331332
f _ = error "panic! integral"
332333
{-# INLINE integral #-}
333334

335+
-- | Accepts negative (starting with @-@) and positive (without sign) integral
336+
-- numbers.
337+
--
338+
-- @since 3.4.0.0
339+
signedIntegral :: (CharParsing m, Integral a) => m a
340+
signedIntegral = negate <$ char '-' <*> integral <|> integral
341+
{-# INLINE signedIntegral #-}
342+
334343
-- | Greedily munch characters while predicate holds.
335344
-- Require at least one character.
336345
munch1 :: CharParsing m => (Char -> Bool) -> m String

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/Anonymous.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ import qualified Distribution.Deprecated.Text as Text
4949
import Distribution.Deprecated.ParseUtils
5050
( FieldDescr(..), ParseResult(..), Field(..)
5151
, simpleField, listField, ppFields, readFields
52-
, syntaxError, locatedErrorMsg )
52+
, syntaxError, locatedErrorMsg, simpleFieldParsec )
53+
import Distribution.Pretty (pretty)
54+
import Distribution.Parsec (parsec)
5355
import Distribution.Simple.Utils
5456
( comparing )
5557

@@ -238,7 +240,7 @@ fieldDescrs =
238240
package (\v r -> r { package = v })
239241
, simpleField "os" Text.disp Text.parse
240242
os (\v r -> r { os = v })
241-
, simpleField "arch" Text.disp Text.parse
243+
, simpleFieldParsec "arch" pretty parsec
242244
arch (\v r -> r { arch = v })
243245
, simpleField "compiler" Text.disp Text.parse
244246
compiler (\v r -> r { compiler = v })

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/Config.hs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@ import Distribution.Deprecated.ParseUtils
9494
, locatedErrorMsg, showPWarning
9595
, readFields, warning, lineNo
9696
, simpleField, listField, spaceListField
97-
, parseFilePathQ, parseOptCommaList, parseTokenQ, syntaxError)
97+
, parseFilePathQ, parseOptCommaList, parseTokenQ, syntaxError
98+
, simpleFieldParsec
99+
)
98100
import Distribution.Client.ParseUtils
99101
( parseFields, ppFields, ppSection )
100102
import Distribution.Client.HttpUtils
@@ -115,6 +117,7 @@ import Distribution.Compiler
115117
( CompilerFlavor(..), defaultCompilerFlavor )
116118
import Distribution.Verbosity
117119
( Verbosity, normal )
120+
import qualified Distribution.Compat.CharParsing as P
118121

119122
import Distribution.Solver.Types.ConstraintSource
120123

@@ -1345,8 +1348,8 @@ remoteRepoFields =
13451348
, listField "root-keys"
13461349
text parseTokenQ
13471350
remoteRepoRootKeys (\x repo -> repo { remoteRepoRootKeys = x })
1348-
, simpleField "key-threshold"
1349-
showThreshold Text.parse
1351+
, simpleFieldParsec "key-threshold"
1352+
showThreshold P.integral
13501353
remoteRepoKeyThreshold (\x repo -> repo { remoteRepoKeyThreshold = x })
13511354
]
13521355
where

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/Get.hs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import Distribution.Simple.Utils
3636
import Distribution.Verbosity
3737
( Verbosity )
3838
import Distribution.Pretty (prettyShow)
39-
import Distribution.Deprecated.Text (display)
4039
import qualified Distribution.PackageDescription as PD
4140
import Distribution.Simple.Program
4241
( programName )
@@ -171,7 +170,7 @@ unpackPackage :: Verbosity -> FilePath -> PackageId
171170
-> PackageDescriptionOverride
172171
-> FilePath -> IO ()
173172
unpackPackage verbosity prefix pkgid descOverride pkgPath = do
174-
let pkgdirname = display pkgid
173+
let pkgdirname = prettyShow pkgid
175174
pkgdir = prefix </> pkgdirname
176175
pkgdir' = addTrailingPathSeparator pkgdir
177176
emptyDirectory directory = null <$> listDirectory directory
@@ -190,7 +189,7 @@ unpackPackage verbosity prefix pkgid descOverride pkgPath = do
190189
case descOverride of
191190
Nothing -> return ()
192191
Just pkgtxt -> do
193-
let descFilePath = pkgdir </> display (packageName pkgid) <.> "cabal"
192+
let descFilePath = pkgdir </> prettyShow (packageName pkgid) <.> "cabal"
194193
info verbosity $
195194
"Updating " ++ descFilePath
196195
++ " with the latest revision from the index."
@@ -214,37 +213,37 @@ data ClonePackageException =
214213

215214
instance Exception ClonePackageException where
216215
displayException (ClonePackageNoSourceRepos pkgid) =
217-
"Cannot fetch a source repository for package " ++ display pkgid
216+
"Cannot fetch a source repository for package " ++ prettyShow pkgid
218217
++ ". The package does not specify any source repositories."
219218

220219
displayException (ClonePackageNoSourceReposOfKind pkgid repoKind) =
221-
"Cannot fetch a source repository for package " ++ display pkgid
220+
"Cannot fetch a source repository for package " ++ prettyShow pkgid
222221
++ ". The package does not specify a source repository of the requested "
223-
++ "kind" ++ maybe "." (\k -> " (kind " ++ display k ++ ").") repoKind
222+
++ "kind" ++ maybe "." (\k -> " (kind " ++ prettyShow k ++ ").") repoKind
224223

225224
displayException (ClonePackageNoRepoType pkgid _repo) =
226-
"Cannot fetch the source repository for package " ++ display pkgid
225+
"Cannot fetch the source repository for package " ++ prettyShow pkgid
227226
++ ". The package's description specifies a source repository but does "
228227
++ "not specify the repository 'type' field (e.g. git, darcs or hg)."
229228

230229
displayException (ClonePackageUnsupportedRepoType pkgid _ repoType) =
231-
"Cannot fetch the source repository for package " ++ display pkgid
232-
++ ". The repository type '" ++ display repoType
230+
"Cannot fetch the source repository for package " ++ prettyShow pkgid
231+
++ ". The repository type '" ++ prettyShow repoType
233232
++ "' is not yet supported."
234233

235234
displayException (ClonePackageNoRepoLocation pkgid _repo) =
236-
"Cannot fetch the source repository for package " ++ display pkgid
235+
"Cannot fetch the source repository for package " ++ prettyShow pkgid
237236
++ ". The package's description specifies a source repository but does "
238237
++ "not specify the repository 'location' field (i.e. the URL)."
239238

240239
displayException (ClonePackageDestinationExists pkgid dest isdir) =
241-
"Not fetching the source repository for package " ++ display pkgid ++ ". "
240+
"Not fetching the source repository for package " ++ prettyShow pkgid ++ ". "
242241
++ if isdir then "The destination directory " ++ dest ++ " already exists."
243242
else "A file " ++ dest ++ " is in the way."
244243

245244
displayException (ClonePackageFailedWithExitCode
246245
pkgid repo vcsprogname exitcode) =
247-
"Failed to fetch the source repository for package " ++ display pkgid
246+
"Failed to fetch the source repository for package " ++ prettyShow pkgid
248247
++ ", repository location " ++ srpLocation repo ++ " ("
249248
++ vcsprogname ++ " failed with " ++ show exitcode ++ ")."
250249

@@ -302,7 +301,7 @@ clonePackagesFromSourceRepo verbosity destDirPrefix
302301
Left SourceRepoLocationUnspecified ->
303302
throwIO (ClonePackageNoRepoLocation pkgid repo)
304303

305-
let destDir = destDirPrefix </> display (packageName pkgid)
304+
let destDir = destDirPrefix </> prettyShow (packageName pkgid)
306305
destDirExists <- doesDirectoryExist destDir
307306
destFileExists <- doesFileExist destDir
308307
when (destDirExists || destFileExists) $

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]

0 commit comments

Comments
 (0)