packages feed

hpack 0.34.4 → 0.34.5

raw patch · 30 files changed

+137/−90 lines, 30 filesdep ~aesonPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: aeson

API changes (from Hackage documentation)

+ Hpack.Yaml: data Key
- Hpack.Yaml: (.:) :: FromValue a => Object -> Text -> Parser a
+ Hpack.Yaml: (.:) :: FromValue a => Object -> Key -> Parser a
- Hpack.Yaml: (.:?) :: FromValue a => Object -> Text -> Parser (Maybe a)
+ Hpack.Yaml: (.:?) :: FromValue a => Object -> Key -> Parser (Maybe a)
- Hpack.Yaml: traverseObject :: (Value -> Parser a) -> Object -> Parser [(Text, a)]
+ Hpack.Yaml: traverseObject :: (Value -> Parser a) -> Object -> Parser [(Key, a)]
- Hpack.Yaml: type Object = HashMap Text Value
+ Hpack.Yaml: type Object = KeyMap Value

Files

CHANGELOG.md view
@@ -1,3 +1,6 @@+## Changes in 0.34.5+  - Compatibility with `aeson-2.*`+ ## Changes in 0.34.4   - Render `default-extensions` / `other-extensions` line-separated   - Compatibility with `Cabal-3.4.0.0`
hpack.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.3.+-- This file has been generated from package.yaml by hpack version 0.34.4. -- -- see: https://github.com/sol/hpack  name:           hpack-version:        0.34.4+version:        0.34.5 synopsis:       A modern format for Haskell packages description:    See README at <https://github.com/sol/hpack#readme> category:       Development@@ -56,6 +56,8 @@       Hpack.Yaml   other-modules:       Data.Aeson.Config.FromValue+      Data.Aeson.Config.Key+      Data.Aeson.Config.KeyMap       Data.Aeson.Config.Parser       Data.Aeson.Config.Types       Data.Aeson.Config.Util@@ -75,6 +77,7 @@       Hpack.Syntax.ParseDependencies       Hpack.Utf8       Hpack.Util+      Imports       Path       Paths_hpack   default-language: Haskell2010@@ -176,6 +179,8 @@       Hpack.UtilSpec       HpackSpec       Data.Aeson.Config.FromValue+      Data.Aeson.Config.Key+      Data.Aeson.Config.KeyMap       Data.Aeson.Config.Parser       Data.Aeson.Config.Types       Data.Aeson.Config.Util@@ -199,6 +204,7 @@       Hpack.Utf8       Hpack.Util       Hpack.Yaml+      Imports       Path       Paths_hpack   default-language: Haskell2010
src/Data/Aeson/Config/FromValue.hs view
@@ -34,23 +34,23 @@ , (.:) , (.:?) +, Key , Value(..) , Object , Array ) where -import           GHC.Generics+import           Imports -import           Control.Monad-import           Control.Applicative+import           GHC.Generics -import           Data.Bifunctor import           Data.Map.Lazy (Map) import qualified Data.Map.Lazy as Map-import           Data.Text (Text)-import qualified Data.Text as T import qualified Data.Vector as V-import qualified Data.HashMap.Strict as HashMap+import           Data.Aeson.Config.Key (Key)+import qualified Data.Aeson.Config.Key as Key+import qualified Data.Aeson.Config.KeyMap as KeyMap+ import           Data.Aeson.Types (FromJSON(..))  import           Data.Aeson.Config.Util@@ -61,10 +61,10 @@ decodeValue :: FromValue a => Value -> Result a decodeValue = runParser fromValue -(.:) :: FromValue a => Object -> Text -> Parser a+(.:) :: FromValue a => Object -> Key -> Parser a (.:) = explicitParseField fromValue -(.:?) :: FromValue a => Object -> Text -> Parser (Maybe a)+(.:?) :: FromValue a => Object -> Key -> Parser (Maybe a) (.:?) = explicitParseFieldMaybe fromValue  class FromValue a where@@ -105,11 +105,11 @@ instance FromValue a => FromValue (Map String a) where   fromValue = withObject $ \ o -> do     xs <- traverseObject fromValue o-    return $ Map.fromList (map (first T.unpack) xs)+    return $ Map.fromList (map (first Key.toString) xs) -traverseObject :: (Value -> Parser a) -> Object -> Parser [(Text, a)]+traverseObject :: (Value -> Parser a) -> Object -> Parser [(Key, a)] traverseObject f o = do-  forM (HashMap.toList o) $ \ (name, value) ->+  forM (KeyMap.toList o) $ \ (name, value) ->     (,) name <$> f value <?> Key name  instance (FromValue a, FromValue b) => FromValue (a, b) where@@ -143,7 +143,7 @@ instance {-# OVERLAPPING #-} (Selector sel, FromValue a) => GenericDecode (S1 sel (Rec0 (Maybe a))) where   genericDecode = accessFieldWith (.:?) -accessFieldWith :: forall sel a p. Selector sel => (Object -> Text -> Parser a) -> Options -> Value -> Parser (S1 sel (Rec0 a) p)-accessFieldWith op Options{..} v = M1 . K1 <$> withObject (`op` T.pack label) v+accessFieldWith :: forall sel a p. Selector sel => (Object -> Key -> Parser a) -> Options -> Value -> Parser (S1 sel (Rec0 a) p)+accessFieldWith op Options{..} v = M1 . K1 <$> withObject (`op` Key.fromString label) v   where     label = optionsRecordSelectorModifier $ selName (undefined :: S1 sel (Rec0 a) p)
+ src/Data/Aeson/Config/Key.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE CPP #-}+module Data.Aeson.Config.Key (module Data.Aeson.Config.Key) where++#if MIN_VERSION_aeson(2,0,0)++import           Data.Aeson.Key as Data.Aeson.Config.Key++#else++import           Data.Text (Text)+import qualified Data.Text as T++type Key = Text++toText :: Key -> Text+toText = id++toString :: Key -> String+toString = T.unpack++fromString :: String -> Key+fromString = T.pack++#endif
+ src/Data/Aeson/Config/KeyMap.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE CPP #-}+module Data.Aeson.Config.KeyMap (module KeyMap) where++#if MIN_VERSION_aeson(2,0,0)+import           Data.Aeson.KeyMap as KeyMap+#else+import           Data.HashMap.Strict as KeyMap+#endif
src/Data/Aeson/Config/Parser.hs view
@@ -30,19 +30,19 @@ , formatPath ) where -import           Control.Monad-import           Control.Applicative+import           Imports+ import qualified Control.Monad.Fail as Fail import           Control.Monad.Trans.Class import           Control.Monad.Trans.Writer-import           Data.Monoid ((<>)) import           Data.Scientific import           Data.Set (Set, notMember) import qualified Data.Set as Set-import           Data.Text (Text) import qualified Data.Text as T import qualified Data.Vector as V-import qualified Data.HashMap.Strict as HashMap+import           Data.Aeson.Config.Key (Key)+import qualified Data.Aeson.Config.Key as Key+import qualified Data.Aeson.Config.KeyMap as KeyMap import           Data.Aeson.Types (Value(..), Object, Array) import qualified Data.Aeson.Types as Aeson import           Data.Aeson.Internal (IResult(..), iparse)@@ -61,7 +61,7 @@  fromAesonPathElement :: Aeson.JSONPathElement -> JSONPathElement fromAesonPathElement e = case e of-  Aeson.Key k -> Key k+  Aeson.Key k -> Key (Key.toText k)   Aeson.Index n -> Index n  newtype Parser a = Parser {unParser :: WriterT (Set JSONPath) Aeson.Parser a}@@ -96,7 +96,7 @@           Bool _ -> return ()           Null -> return ()           Object o -> do-            forM_ (HashMap.toList o) $ \ (k, v) -> do+            forM_ (KeyMap.toList o) $ \ (Key.toText -> k, v) -> do               unless ("_" `T.isPrefixOf` k) $ do                 go (Key k : path) v           Array xs -> do@@ -115,13 +115,13 @@ getPath :: Parser JSONPath getPath = liftParser $ Aeson.parserCatchError empty $ \ path _ -> return (fromAesonPath path) -explicitParseField :: (Value -> Parser a) -> Object -> Text -> Parser a-explicitParseField p o key = case HashMap.lookup key o of+explicitParseField :: (Value -> Parser a) -> Object -> Key -> Parser a+explicitParseField p o key = case KeyMap.lookup key o of   Nothing -> fail $ "key " ++ show key ++ " not present"   Just v  -> p v <?> Aeson.Key key -explicitParseFieldMaybe :: (Value -> Parser a) -> Object -> Text -> Parser (Maybe a)-explicitParseFieldMaybe p o key = case HashMap.lookup key o of+explicitParseFieldMaybe :: (Value -> Parser a) -> Object -> Key -> Parser (Maybe a)+explicitParseFieldMaybe p o key = case KeyMap.lookup key o of   Nothing -> pure Nothing   Just v  -> Just <$> p v <?> Aeson.Key key 
src/Data/Aeson/Config/Types.hs view
@@ -4,10 +4,10 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Data.Aeson.Config.Types where -import           Data.Semigroup (Semigroup(..))+import           Imports+ import           Data.Bitraversable import           Data.Bifoldable-import           Data.Bifunctor  import           Data.Aeson.Config.FromValue 
src/Hpack.hs view
@@ -42,7 +42,8 @@ #endif ) where -import           Control.Monad+import           Imports+ import           Data.Version (Version) import qualified Data.Version as Version import           System.FilePath
src/Hpack/CabalFile.hs view
@@ -3,8 +3,8 @@ {-# LANGUAGE ViewPatterns #-} module Hpack.CabalFile where -import           Control.Monad-import           Data.List+import           Imports+ import           Data.Maybe import           Data.Version (Version(..)) import qualified Data.Version as Version
src/Hpack/Config.hs view
@@ -80,21 +80,15 @@ #endif ) where -import           Control.Applicative-import           Control.Arrow ((>>>), (&&&))-import           Control.Monad+import           Imports+ import           Data.Either-import           Data.Bifunctor import           Data.Bitraversable import           Data.Map.Lazy (Map) import qualified Data.Map.Lazy as Map-import qualified Data.HashMap.Lazy as HashMap-import           Data.List ((\\), sortBy, intercalate)+import qualified Data.Aeson.Config.KeyMap as KeyMap import           Data.Maybe-import           Data.Semigroup (Semigroup(..)) import           Data.Ord-import           Data.String-import           Data.Text (Text) import qualified Data.Text as T import           Data.Text.Encoding (decodeUtf8) import           Data.Scientific (Scientific)@@ -404,12 +398,12 @@     }  traverseConditionalSection :: Traversal_ ConditionalSection-traverseConditionalSection t@Traverse{..} = \ case+traverseConditionalSection t = \ case   ThenElseConditional c -> ThenElseConditional <$> bitraverse (traverseThenElse t) return c   FlatConditional c -> FlatConditional <$> bitraverse (traverseWithCommonOptions t) return c  traverseThenElse :: Traversal_ ThenElse-traverseThenElse t@Traverse{..} c@ThenElse{..} = do+traverseThenElse t c@ThenElse{..} = do   then_ <- traverseWithCommonOptions t thenElseThen   else_ <- traverseWithCommonOptions t thenElseElse   return c{thenElseThen = then_, thenElseElse = else_}@@ -434,10 +428,10 @@     | otherwise = FlatConditional <$> fromValue v     where       giveHint = case v of-        Object o -> case (,,) <$> HashMap.lookup "then" o <*> HashMap.lookup "else" o <*> HashMap.lookup "condition" o of+        Object o -> case (,,) <$> KeyMap.lookup "then" o <*> KeyMap.lookup "else" o <*> KeyMap.lookup "condition" o of           Just (Object then_, Object else_, String condition) -> do-            when (HashMap.null then_) $ "then" `emptyTryInstead` flatElse-            when (HashMap.null else_) $ "else" `emptyTryInstead` flatThen+            when (KeyMap.null then_) $ "then" `emptyTryInstead` flatElse+            when (KeyMap.null else_) $ "else" `emptyTryInstead` flatThen             where               flatThen = flatConditional condition then_               flatElse = flatConditional (negate_ condition) else_@@ -446,7 +440,7 @@        negate_ condition = "!(" <> condition <> ")" -      flatConditional condition sect = object [("when" .= HashMap.insert "condition" (String condition) sect)]+      flatConditional condition sect = object [("when" .= KeyMap.insert "condition" (String condition) sect)]        emptyTryInstead :: String -> Value -> Parser ()       emptyTryInstead name sect = do@@ -463,8 +457,8 @@                 (_, "condition") -> GT                 _ -> compare a b -hasKey :: Text -> Value -> Bool-hasKey key (Object o) = HashMap.member key o+hasKey :: Key -> Value -> Bool+hasKey key (Object o) = KeyMap.member key o hasKey _ _ = False  newtype Condition = Condition {@@ -599,7 +593,7 @@ } deriving (Generic, FromValue)  traversePackageConfig :: Traversal PackageConfig-traversePackageConfig t@Traverse{..} p@PackageConfig{..} = do+traversePackageConfig t p@PackageConfig{..} = do   library <- traverse (traverseWithCommonOptions t) packageConfigLibrary   internalLibraries <- traverseNamedConfigs t packageConfigInternalLibraries   executable <- traverse (traverseWithCommonOptions t) packageConfigExecutable
src/Hpack/Defaults.hs view
@@ -12,10 +12,11 @@ #endif ) where +import           Imports+ import           Network.HTTP.Types import           Network.HTTP.Client import           Network.HTTP.Client.TLS-import           Data.List import qualified Data.ByteString.Lazy as LB import qualified Data.ByteString.Char8 as B import           System.FilePath
src/Hpack/License.hs view
@@ -4,7 +4,7 @@ {-# LANGUAGE LambdaCase #-} module Hpack.License where -import           Control.Arrow ((&&&))+import           Imports  import           Distribution.Pretty (prettyShow) import           Distribution.Version (mkVersion)
src/Hpack/Module.hs view
@@ -10,11 +10,10 @@ #endif ) where -import           Data.String+import           Imports+ import           System.FilePath import qualified System.Directory as Directory-import           Control.Monad-import           Data.List hiding (nub, sort)  import           Data.Aeson.Config.FromValue import           Hpack.Util
src/Hpack/Options.hs view
@@ -1,8 +1,8 @@ {-# LANGUAGE LambdaCase #-} module Hpack.Options where -import           Control.Applicative-import           Control.Monad+import           Imports+ import           Data.Maybe import           System.FilePath import           System.Directory
src/Hpack/Render.hs view
@@ -34,10 +34,10 @@ #endif ) where -import           Control.Monad+import           Imports+ import           Data.Char import           Data.Maybe-import           Data.List import           Data.Map.Lazy (Map) import qualified Data.Map.Lazy as Map @@ -165,7 +165,7 @@ renderExecutables = map renderExecutable . Map.toList  renderExecutable :: (String, Section Executable) -> Element-renderExecutable (name, sect@(sectionData -> Executable{..})) =+renderExecutable (name, sect) =   Stanza ("executable " ++ name) (renderExecutableSection [] sect)  renderTests :: Map String (Section Executable) -> [Element]
src/Hpack/Render/Dsl.hs view
@@ -24,8 +24,7 @@ #endif ) where -import           Data.String-import           Data.List+import           Imports  data Value =     Literal String
src/Hpack/Render/Hints.hs view
@@ -16,10 +16,10 @@ #endif ) where +import           Imports+ import           Data.Char import           Data.Maybe-import           Data.List hiding (nub)-import           Control.Applicative  import           Hpack.Render.Dsl import           Hpack.Util
src/Hpack/Syntax/BuildTools.hs view
@@ -7,12 +7,10 @@ , SystemBuildTools(..) ) where +import           Imports+ import qualified Control.Monad.Fail as Fail-import           Data.Text (Text) import qualified Data.Text as T-import           Data.Semigroup (Semigroup(..))-import           Data.Bifunctor-import           Control.Applicative import qualified Distribution.Package as D import           Data.Map.Lazy (Map) import qualified Data.Map.Lazy as Map
src/Hpack/Syntax/Defaults.hs view
@@ -13,8 +13,9 @@ #endif ) where -import           Data.HashMap.Lazy (member)-import           Data.List+import           Imports++import           Data.Aeson.Config.KeyMap (member) import qualified Data.Text as T import           System.FilePath.Posix (splitDirectories) 
src/Hpack/Syntax/Dependencies.hs view
@@ -8,11 +8,10 @@ , parseDependency ) where +import           Imports+ import qualified Control.Monad.Fail as Fail-import           Data.Text (Text)-import           Data.List import qualified Data.Text as T-import           Data.Semigroup (Semigroup(..)) import qualified Distribution.Package as D import qualified Distribution.Types.LibraryName as D import           Distribution.Pretty (prettyShow)
src/Hpack/Syntax/DependencyVersion.hs view
@@ -25,13 +25,13 @@ , cabalParse ) where -import           Control.Applicative+import           Imports+ import qualified Control.Monad.Fail as Fail import           Data.Maybe import           Data.Scientific-import           Data.Text (Text) import qualified Data.Text as T-import qualified Data.HashMap.Strict as HashMap+import qualified Data.Aeson.Config.KeyMap as KeyMap import           Text.PrettyPrint (renderStyle, Style(..), Mode(..))  import qualified Distribution.Version as D@@ -113,7 +113,7 @@      source :: Parser (Maybe SourceDependency)     source-      | any (`HashMap.member` o) ["path", "git", "github", "ref", "subdir"] = Just <$> (local <|> git)+      | any (`KeyMap.member` o) ["path", "git", "github", "ref", "subdir"] = Just <$> (local <|> git)       | otherwise = return Nothing      in DependencyVersion <$> source <*> version
src/Hpack/Syntax/Git.hs view
@@ -2,8 +2,9 @@   isValidRef ) where +import           Imports+ import           Data.Char (chr)-import           Data.List import           System.FilePath.Posix  -- https://git-scm.com/docs/git-check-ref-format
src/Hpack/Syntax/ParseDependencies.hs view
@@ -2,9 +2,10 @@ {-# LANGUAGE RecordWildCards #-} module Hpack.Syntax.ParseDependencies where -import           Data.Text (Text)-import           Data.Bifunctor+import           Imports+ import           Data.Aeson.Config.FromValue+import qualified Data.Aeson.Config.Key as Key  data Parse k v = Parse {   parseString  :: Text -> Parser (k, v)@@ -17,7 +18,7 @@ parseDependencies parse@Parse{..} v = case v of   String s -> return <$> parseString s   Array xs -> parseArray (buildToolFromValue parse) xs-  Object o -> map (first parseName) <$> traverseObject parseDictItem o+  Object o -> map (first (parseName . Key.toText)) <$> traverseObject parseDictItem o   _ -> typeMismatch "Array, Object, or String" v  buildToolFromValue :: Parse k v -> Value -> Parser (k, v)
src/Hpack/Util.hs view
@@ -20,11 +20,10 @@ , nubOn ) where +import           Imports+ import           Control.Exception-import           Control.Monad import           Data.Char-import           Data.Bifunctor-import           Data.List hiding (nub, sort) import           Data.Ord import qualified Data.Set as Set import           System.IO.Error
src/Hpack/Yaml.hs view
@@ -17,7 +17,8 @@ , module Data.Aeson.Config.FromValue ) where -import           Data.Bifunctor+import           Imports+ import           Data.Yaml hiding (decodeFile, decodeFileWithWarnings) import           Data.Yaml.Include import           Data.Yaml.Internal (Warning(..))
+ src/Imports.hs view
@@ -0,0 +1,11 @@+module Imports (module Imports) where++import           Control.Applicative as Imports+import           Control.Arrow as Imports ((>>>), (&&&))+import           Control.Monad as Imports+import           Data.Bifunctor as Imports+import           Data.List as Imports hiding (sort, nub)+import           Data.Monoid as Imports (Monoid(..))+import           Data.Semigroup as Imports (Semigroup(..))+import           Data.String as Imports+import           Data.Text as Imports (Text)
src/Path.hs view
@@ -1,7 +1,8 @@ module Path where +import           Imports+ import           System.FilePath-import           Data.String  fromFilePath :: FilePath -> Path fromFilePath = Path . map PathComponent . splitDirectories
test/Helper.hs view
@@ -2,7 +2,8 @@ {-# LANGUAGE ConstraintKinds #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Helper (-  module Test.Hspec+  module Imports+, module Test.Hspec , module Test.Mockery.Directory , module Control.Monad , module Control.Applicative@@ -12,9 +13,10 @@ , yaml ) where +import           Imports+ import           Test.Hspec import           Test.Mockery.Directory-import           Data.String import           Control.Monad import           Control.Applicative import           System.Directory (getCurrentDirectory, setCurrentDirectory, canonicalizePath)
test/Hpack/ConfigSpec.hs view
@@ -19,7 +19,6 @@ import           Data.Aeson.Config.FromValueSpec hiding (spec)  import           Data.String.Interpolate.IsString-import           Control.Arrow import qualified GHC.Exts as Exts import           System.Directory (createDirectory) import           Data.Either
test/Hpack/RenderSpec.hs view
@@ -3,7 +3,6 @@ module Hpack.RenderSpec (spec) where  import           Helper-import           Data.List  import           Hpack.Syntax.DependencyVersion import           Hpack.ConfigSpec hiding (spec)