{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module HaskellCI.Auxiliary (
Auxiliary (..),
auxiliary,
pkgNameDirVariable',
pkgNameDirVariable,
) where
import HaskellCI.Prelude
import Prelude (head)
import qualified Data.Set as S
import qualified Distribution.CabalSpecVersion as C
import qualified Distribution.FieldGrammar.Pretty as C
import qualified Distribution.Fields.Pretty as C
import qualified Distribution.Pretty as C
import qualified Distribution.Types.GenericPackageDescription as C
import qualified Distribution.Types.VersionRange as C
import qualified Network.URI as URI
import qualified Text.PrettyPrint as PP
import Cabal.Optimization
import Cabal.Project
import Cabal.SourceRepo
import HaskellCI.Compiler
import HaskellCI.Config
import HaskellCI.Config.CopyFields
import HaskellCI.Config.Docspec
import HaskellCI.Config.Doctest
import HaskellCI.Jobs
import HaskellCI.List
import HaskellCI.Package
data Auxiliary = Auxiliary
{ Auxiliary -> [Package]
pkgs :: [Package]
, Auxiliary -> [URI]
uris :: [URI]
, Auxiliary -> String
projectName :: String
, Auxiliary -> Bool
doctestEnabled :: Bool
, Auxiliary -> Bool
docspecEnabled :: Bool
, Auxiliary -> CompilerRange
hasTests :: CompilerRange
, Auxiliary -> Bool
hasLibrary :: Bool
, :: FilePath -> [C.PrettyField ()]
, Auxiliary -> String
testShowDetails :: String
}
auxiliary :: Config -> Project URI Void Package -> JobVersions -> Auxiliary
auxiliary :: Config -> Project URI Void Package -> JobVersions -> Auxiliary
auxiliary Config {Bool
Natural
String
[String]
[PrettyField ()]
[PackageName]
[Installed]
[ConstraintSet]
Maybe String
Maybe Version
Maybe Jobs
VersionRange
Version
Set String
Set Fold
Map Version String
Ubuntu
PackageScope
HLintConfig
DoctestConfig
DocspecConfig
CopyFields
TestedWithJobs
cfgTimeoutMinutes :: Config -> Natural
cfgGitHubActionName :: Config -> Maybe String
cfgRawTravis :: Config -> String
cfgRawProject :: Config -> [PrettyField ()]
cfgConstraintSets :: Config -> [ConstraintSet]
cfgHLint :: Config -> HLintConfig
cfgDocspec :: Config -> DocspecConfig
cfgDoctest :: Config -> DoctestConfig
cfgErrorMissingMethods :: Config -> PackageScope
cfgInsertVersion :: Config -> Bool
cfgGitHubPatches :: Config -> [String]
cfgTravisPatches :: Config -> [String]
cfgApt :: Config -> Set String
cfgGhcupVersion :: Config -> Version
cfgGhcupJobs :: Config -> VersionRange
cfgGhcupCabal :: Config -> Bool
cfgMacosJobs :: Config -> VersionRange
cfgLinuxJobs :: Config -> VersionRange
cfgLastInSeries :: Config -> Bool
cfgAllowFailures :: Config -> VersionRange
cfgEnv :: Config -> Map Version String
cfgGoogleChrome :: Config -> Bool
cfgPostgres :: Config -> Bool
cfgGhcHead :: Config -> Bool
cfgFolds :: Config -> Set Fold
cfgProjectName :: Config -> Maybe String
cfgEmailNotifications :: Config -> Bool
cfgIrcIfInOriginRepo :: Config -> Bool
cfgIrcPassword :: Config -> Maybe String
cfgIrcNickname :: Config -> Maybe String
cfgIrcChannels :: Config -> [String]
cfgOnlyBranches :: Config -> [String]
cfgCheck :: Config -> Bool
cfgTestOutputDirect :: Config -> Bool
cfgGhcjsTools :: Config -> [PackageName]
cfgGhcjsTests :: Config -> Bool
cfgHeadHackage :: Config -> VersionRange
cfgUnconstrainted :: Config -> VersionRange
cfgNoTestsNoBench :: Config -> VersionRange
cfgHaddock :: Config -> VersionRange
cfgBenchmarks :: Config -> VersionRange
cfgRunTests :: Config -> VersionRange
cfgTests :: Config -> VersionRange
cfgInstalled :: Config -> [Installed]
cfgInstallDeps :: Config -> Bool
cfgCache :: Config -> Bool
cfgSubmodules :: Config -> Bool
cfgLocalGhcOptions :: Config -> [String]
cfgCopyFields :: Config -> CopyFields
cfgEnabledJobs :: Config -> VersionRange
cfgTestedWith :: Config -> TestedWithJobs
cfgUbuntu :: Config -> Ubuntu
cfgJobs :: Config -> Maybe Jobs
cfgCabalInstallVersion :: Config -> Maybe Version
cfgTimeoutMinutes :: Natural
cfgGitHubActionName :: Maybe String
cfgRawTravis :: String
cfgRawProject :: [PrettyField ()]
cfgConstraintSets :: [ConstraintSet]
cfgHLint :: HLintConfig
cfgDocspec :: DocspecConfig
cfgDoctest :: DoctestConfig
cfgErrorMissingMethods :: PackageScope
cfgInsertVersion :: Bool
cfgGitHubPatches :: [String]
cfgTravisPatches :: [String]
cfgApt :: Set String
cfgGhcupVersion :: Version
cfgGhcupJobs :: VersionRange
cfgGhcupCabal :: Bool
cfgMacosJobs :: VersionRange
cfgLinuxJobs :: VersionRange
cfgLastInSeries :: Bool
cfgAllowFailures :: VersionRange
cfgEnv :: Map Version String
cfgGoogleChrome :: Bool
cfgPostgres :: Bool
cfgGhcHead :: Bool
cfgFolds :: Set Fold
cfgProjectName :: Maybe String
cfgEmailNotifications :: Bool
cfgIrcIfInOriginRepo :: Bool
cfgIrcPassword :: Maybe String
cfgIrcNickname :: Maybe String
cfgIrcChannels :: [String]
cfgOnlyBranches :: [String]
cfgCheck :: Bool
cfgTestOutputDirect :: Bool
cfgGhcjsTools :: [PackageName]
cfgGhcjsTests :: Bool
cfgHeadHackage :: VersionRange
cfgUnconstrainted :: VersionRange
cfgNoTestsNoBench :: VersionRange
cfgHaddock :: VersionRange
cfgBenchmarks :: VersionRange
cfgRunTests :: VersionRange
cfgTests :: VersionRange
cfgInstalled :: [Installed]
cfgInstallDeps :: Bool
cfgCache :: Bool
cfgSubmodules :: Bool
cfgLocalGhcOptions :: [String]
cfgCopyFields :: CopyFields
cfgEnabledJobs :: VersionRange
cfgTestedWith :: TestedWithJobs
cfgUbuntu :: Ubuntu
cfgJobs :: Maybe Jobs
cfgCabalInstallVersion :: Maybe Version
..} Project URI Void Package
prj JobVersions {Set CompilerVersion
macosVersions :: JobVersions -> Set CompilerVersion
linuxVersions :: JobVersions -> Set CompilerVersion
allVersions :: JobVersions -> Set CompilerVersion
macosVersions :: Set CompilerVersion
linuxVersions :: Set CompilerVersion
allVersions :: Set CompilerVersion
..} = Auxiliary :: [Package]
-> [URI]
-> String
-> Bool
-> Bool
-> CompilerRange
-> Bool
-> (String -> [PrettyField ()])
-> String
-> Auxiliary
Auxiliary {Bool
String
[URI]
[Package]
CompilerRange
String -> [PrettyField ()]
extraCabalProjectFields :: String -> [PrettyField ()]
hasLibrary :: Bool
hasTests :: CompilerRange
testShowDetails :: String
docspecEnabled :: Bool
doctestEnabled :: Bool
projectName :: String
uris :: [URI]
pkgs :: [Package]
testShowDetails :: String
extraCabalProjectFields :: String -> [PrettyField ()]
hasLibrary :: Bool
hasTests :: CompilerRange
docspecEnabled :: Bool
doctestEnabled :: Bool
projectName :: String
uris :: [URI]
pkgs :: [Package]
..}
where
pkgs :: [Package]
pkgs = Project URI Void Package -> [Package]
forall uri opt pkg. Project uri opt pkg -> [pkg]
prjPackages Project URI Void Package
prj
uris :: [URI]
uris = Project URI Void Package -> [URI]
forall uri opt pkg. Project uri opt pkg -> [uri]
prjUriPackages Project URI Void Package
prj
projectName :: String
projectName = String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe (Package -> String
pkgName (Package -> String) -> Package -> String
forall a b. (a -> b) -> a -> b
$ [Package] -> Package
forall a. [a] -> a
Prelude.head [Package]
pkgs) Maybe String
cfgProjectName
doctestEnabled :: Bool
doctestEnabled = (CompilerVersion -> Bool) -> Set CompilerVersion -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Bool -> (Version -> Bool) -> CompilerVersion -> Bool
forall a. a -> (Version -> a) -> CompilerVersion -> a
maybeGHC Bool
False (Version -> VersionRange -> Bool
`C.withinRange` DoctestConfig -> VersionRange
cfgDoctestEnabled DoctestConfig
cfgDoctest)) Set CompilerVersion
linuxVersions
docspecEnabled :: Bool
docspecEnabled = (CompilerVersion -> Bool) -> Set CompilerVersion -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Bool -> (Version -> Bool) -> CompilerVersion -> Bool
forall a. a -> (Version -> a) -> CompilerVersion -> a
maybeGHC Bool
False (Version -> VersionRange -> Bool
`C.withinRange` DocspecConfig -> VersionRange
cfgDocspecEnabled DocspecConfig
cfgDocspec)) Set CompilerVersion
linuxVersions
testShowDetails :: String
testShowDetails
| Bool
cfgTestOutputDirect = String
" --test-show-details=direct"
| Bool
otherwise = String
""
hasTests :: CompilerRange
hasTests :: CompilerRange
hasTests = Set CompilerVersion -> CompilerRange
RangePoints (Set CompilerVersion -> CompilerRange)
-> Set CompilerVersion -> CompilerRange
forall a b. (a -> b) -> a -> b
$ [Set CompilerVersion] -> Set CompilerVersion
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
S.unions
[ Set CompilerVersion
pkgJobs
| Pkg{GenericPackageDescription
pkgGpd :: Package -> GenericPackageDescription
pkgGpd :: GenericPackageDescription
pkgGpd,Set CompilerVersion
pkgJobs :: Package -> Set CompilerVersion
pkgJobs :: Set CompilerVersion
pkgJobs} <- [Package]
pkgs
, Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
-> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
-> Bool)
-> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
-> Bool
forall a b. (a -> b) -> a -> b
$ GenericPackageDescription
-> [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
C.condTestSuites GenericPackageDescription
pkgGpd
]
hasLibrary :: Bool
hasLibrary = (Package -> Bool) -> [Package] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\Pkg{GenericPackageDescription
pkgGpd :: GenericPackageDescription
pkgGpd :: Package -> GenericPackageDescription
pkgGpd} -> Maybe (CondTree ConfVar [Dependency] Library) -> Bool
forall a. Maybe a -> Bool
isJust (Maybe (CondTree ConfVar [Dependency] Library) -> Bool)
-> Maybe (CondTree ConfVar [Dependency] Library) -> Bool
forall a b. (a -> b) -> a -> b
$ GenericPackageDescription
-> Maybe (CondTree ConfVar [Dependency] Library)
C.condLibrary GenericPackageDescription
pkgGpd) [Package]
pkgs
extraCabalProjectFields :: FilePath -> [C.PrettyField ()]
extraCabalProjectFields :: String -> [PrettyField ()]
extraCabalProjectFields String
rootdir = ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder (PrettyField ()) () -> [PrettyField ()])
-> ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall a b. (a -> b) -> a -> b
$ do
[URI]
-> (URI -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [URI]
uris ((URI -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (URI -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \URI
uri ->
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"packages" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ if
| URI -> String
URI.uriScheme URI
uri String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"file:" -> String
rootdir String -> String -> String
forall a. [a] -> [a] -> [a]
++ URI -> String
URI.uriPath URI
uri
| Bool
otherwise -> (String -> String) -> URI -> String -> String
uriToString String -> String
forall a. a -> a
id URI
uri String
""
case CopyFields
cfgCopyFields of
CopyFields
CopyFieldsNone -> () -> ListBuilder (PrettyField ()) ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
CopyFields
CopyFieldsSome -> ListBuilder (PrettyField ()) ()
copyFieldsSome
CopyFields
CopyFieldsAll -> ListBuilder (PrettyField ()) ()
copyFieldsSome ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (PrettyField () -> ListBuilder (PrettyField ()) ())
-> [PrettyField ()] -> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (Project URI Void Package -> [PrettyField ()]
forall uri opt pkg. Project uri opt pkg -> [PrettyField ()]
prjOtherFields Project URI Void Package
prj)
Bool
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ([String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
cfgLocalGhcOptions) (ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ [Package]
-> (Package -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [Package]
pkgs ((Package -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (Package -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \Pkg{String
pkgName :: String
pkgName :: Package -> String
pkgName} -> do
let s :: String
s = [String] -> String
unwords ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Doc -> String
forall a. Show a => a -> String
show (Doc -> String) -> (String -> Doc) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
C.showToken) [String]
cfgLocalGhcOptions
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> [Doc] -> [PrettyField ()] -> PrettyField ()
forall ann.
ann -> FieldName -> [Doc] -> [PrettyField ann] -> PrettyField ann
C.PrettySection () FieldName
"package" [String -> Doc
PP.text String
pkgName] ([PrettyField ()] -> PrettyField ())
-> [PrettyField ()] -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder (PrettyField ()) () -> [PrettyField ()])
-> ListBuilder (PrettyField ()) () -> [PrettyField ()]
forall a b. (a -> b) -> a -> b
$
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"ghc-options" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text String
s
(PrettyField () -> ListBuilder (PrettyField ()) ())
-> [PrettyField ()] -> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item [PrettyField ()]
cfgRawProject
where
copyFieldsSome :: ListBuilder (C.PrettyField ()) ()
copyFieldsSome :: ListBuilder (PrettyField ()) ()
copyFieldsSome = do
[String]
-> (String -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> [String]
forall uri opt pkg. Project uri opt pkg -> [String]
prjConstraints Project URI Void Package
prj) ((String -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (String -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \String
xs -> do
let s :: String
s = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat (String -> [String]
lines String
xs)
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"constraints" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text String
s
[String]
-> (String -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> [String]
forall uri opt pkg. Project uri opt pkg -> [String]
prjAllowNewer Project URI Void Package
prj) ((String -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (String -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \String
xs -> do
let s :: String
s = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat (String -> [String]
lines String
xs)
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"allow-newer" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text String
s
Bool
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Project URI Void Package -> Bool
forall uri opt pkg. Project uri opt pkg -> Bool
prjReorderGoals Project URI Void Package
prj) (ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"reorder-goals" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text String
"True"
Maybe Int
-> (Int -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> Maybe Int
forall uri opt pkg. Project uri opt pkg -> Maybe Int
prjMaxBackjumps Project URI Void Package
prj) ((Int -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (Int -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \Int
bj ->
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"max-backjumps" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
bj
case Project URI Void Package -> Optimization
forall uri opt pkg. Project uri opt pkg -> Optimization
prjOptimization Project URI Void Package
prj of
Optimization
OptimizationOn -> () -> ListBuilder (PrettyField ()) ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Optimization
OptimizationOff -> PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"optimization" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text String
"False"
OptimizationLevel Int
l -> PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> Doc -> PrettyField ()
forall ann. ann -> FieldName -> Doc -> PrettyField ann
C.PrettyField () FieldName
"optimization" (Doc -> PrettyField ()) -> Doc -> PrettyField ()
forall a b. (a -> b) -> a -> b
$ String -> Doc
PP.text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
l
[SourceRepositoryPackage Maybe]
-> (SourceRepositoryPackage Maybe
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ (Project URI Void Package -> [SourceRepositoryPackage Maybe]
forall uri opt pkg.
Project uri opt pkg -> [SourceRepositoryPackage Maybe]
prjSourceRepos Project URI Void Package
prj) ((SourceRepositoryPackage Maybe -> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ())
-> (SourceRepositoryPackage Maybe
-> ListBuilder (PrettyField ()) ())
-> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ \SourceRepositoryPackage Maybe
repo ->
PrettyField () -> ListBuilder (PrettyField ()) ()
forall x. x -> ListBuilder x ()
item (PrettyField () -> ListBuilder (PrettyField ()) ())
-> PrettyField () -> ListBuilder (PrettyField ()) ()
forall a b. (a -> b) -> a -> b
$ () -> FieldName -> [Doc] -> [PrettyField ()] -> PrettyField ()
forall ann.
ann -> FieldName -> [Doc] -> [PrettyField ann] -> PrettyField ann
C.PrettySection () FieldName
"source-repository-package" [] ([PrettyField ()] -> PrettyField ())
-> [PrettyField ()] -> PrettyField ()
forall a b. (a -> b) -> a -> b
$
CabalSpecVersion
-> PrettyFieldGrammar SourceRepoList SourceRepoList
-> SourceRepoList
-> [PrettyField ()]
forall s a.
CabalSpecVersion -> PrettyFieldGrammar s a -> s -> [PrettyField ()]
C.prettyFieldGrammar CabalSpecVersion
C.cabalSpecLatest PrettyFieldGrammar SourceRepoList SourceRepoList
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g SourceRepoList),
c (List NoCommaFSep FilePathNT String), c (Identity RepoType)) =>
g SourceRepoList SourceRepoList
sourceRepositoryPackageGrammar ((forall x. Maybe x -> [x])
-> SourceRepositoryPackage Maybe -> SourceRepoList
forall (f :: * -> *) (g :: * -> *).
(forall x. f x -> g x)
-> SourceRepositoryPackage f -> SourceRepositoryPackage g
srpHoist forall x. Maybe x -> [x]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList SourceRepositoryPackage Maybe
repo)
pkgNameDirVariable' :: String -> String
pkgNameDirVariable' :: String -> String
pkgNameDirVariable' String
n = String
"PKGDIR_" String -> String -> String
forall a. [a] -> [a] -> [a]
++ (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
f String
n where
f :: Char -> Char
f Char
'-' = Char
'_'
f Char
c = Char
c
pkgNameDirVariable :: String -> String
pkgNameDirVariable :: String -> String
pkgNameDirVariable String
n = String
"${" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
pkgNameDirVariable' String
n String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"}"