1
1
mirror of https://github.com/sol/hpack.git synced 2024-10-04 11:47:15 +03:00

Accept a list of defaults

This commit is contained in:
Simon Hengel 2018-01-09 00:33:25 +08:00
parent 20dfc011de
commit fbdbcb84d3
3 changed files with 25 additions and 9 deletions

View File

@ -52,7 +52,7 @@ meetup: http://typeful.net/talks/hpack
| `executable` | `executable <package-name>` | | Shortcut for `executables: { package-name: ... }` | | `0.18.0` |
| `tests` | `test-suite <name>` | | Map from test name to test (see [Test fields](#test-fields)) | | |
| `benchmarks` | `benchmark <name>` | | Map from benchmark name to benchmark (see [Benchmark fields](#benchmark-fields)) | | |
| `defaults` | | | See [Defaults](#defaults) | | |
| `defaults` | | | See [Defaults](#defaults), may be a list | | |
**Note:** Hpack does not require you to specify a `cabal-version` manually. When
generating a `.cabal` file, Hpack sets the `cabal-version` automatically based

View File

@ -10,6 +10,7 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
module Hpack.Config (
packageConfig
, readPackageConfig
@ -452,7 +453,7 @@ data PackageConfig capture cSources jsSources = PackageConfig {
, packageConfigExecutables :: Maybe (Map String (SectionConfig capture cSources jsSources ExecutableSection))
, packageConfigTests :: Maybe (Map String (SectionConfig capture cSources jsSources ExecutableSection))
, packageConfigBenchmarks :: Maybe (Map String (SectionConfig capture cSources jsSources ExecutableSection))
, packageConfigDefaults :: Maybe (capture Defaults)
, packageConfigDefaults :: Maybe (List (capture Defaults))
} deriving Generic
traversePackageConfig :: Traversal PackageConfig
@ -465,7 +466,7 @@ traversePackageConfig t@Traverse{..} p@PackageConfig{..} = do
executables <- traverseNamedConfigs t packageConfigExecutables
tests <- traverseNamedConfigs t packageConfigTests
benchmarks <- traverseNamedConfigs t packageConfigBenchmarks
defaults <- traverse traverseCapture packageConfigDefaults
defaults <- traverse (traverse traverseCapture) packageConfigDefaults
return p {
packageConfigFlags = flags
, packageConfigCustomSetup = customSetup
@ -652,11 +653,12 @@ getDefaults
:: FilePath
-> PackageConfig Identity cSources jsSources
-> Warnings (Errors IO) (CommonOptions Identity ParseCSources ParseJsSources Empty)
getDefaults userDataDir PackageConfig{..} = case packageConfigDefaults of
Nothing -> return mempty
Just (runIdentity -> defaults) -> do
file <- lift $ ExceptT (ensure userDataDir defaults)
decodeYaml file >>= warnUnknownFieldsInDefaults file
getDefaults userDataDir PackageConfig{..} = do
mconcat <$> mapM go (fromMaybeList packageConfigDefaults)
where
go (runIdentity -> defaults) = do
file <- lift $ ExceptT (ensure userDataDir defaults)
decodeYaml file >>= warnUnknownFieldsInDefaults file
toExecutableMap :: Monad m => String -> Maybe (Map String a) -> Maybe a -> Warnings m (Maybe (Map String a))
toExecutableMap name executables mExecutable = do
@ -808,7 +810,7 @@ warnUnknownFieldsInConfig = warnGlobal >=> bitraverse return warnSections
executables <- warnNamedSection "executable" packageConfigExecutables
tests <- warnNamedSection "test" packageConfigTests
benchmarks <- warnNamedSection "benchmark" packageConfigBenchmarks
defaults <- warnUnknownFields In "defaults section" (traverse (traverseCapture t) packageConfigDefaults)
defaults <- warnUnknownFields In "defaults section" (traverse (traverse $ traverseCapture t) packageConfigDefaults)
return p {
packageConfigFlags = flags
, packageConfigCustomSetup = customSetup

View File

@ -46,6 +46,20 @@ spec = around_ (inTempDirectoryNamed "foo") $ do
default-extensions: RecordWildCards DeriveFunctor
|]
it "accepts a list of defaults" $ do
writeFile "defaults/foo/bar/v1/.hpack/defaults.yaml" "default-extensions: RecordWildCards"
writeFile "defaults/foo/bar/v2/.hpack/defaults.yaml" "default-extensions: DeriveFunctor"
[i|
defaults:
- foo/bar@v1
- foo/bar@v2
library: {}
|] `shouldRenderTo` library [i|
other-modules:
Paths_foo
default-extensions: RecordWildCards DeriveFunctor
|]
it "fails if defaults don't exist" $ do
pending
[i|