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:
parent
20dfc011de
commit
fbdbcb84d3
@ -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
|
||||
|
@ -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
|
||||
|
@ -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|
|
||||
|
Loading…
Reference in New Issue
Block a user