yaml 0.11.8.0 → 0.11.9.0
raw patch · 3 files changed
+35/−24 lines, 3 files
Files
- ChangeLog.md +4/−0
- src/Data/Yaml/Pretty.hs +21/−14
- yaml.cabal +10/−10
ChangeLog.md view
@@ -1,5 +1,9 @@ # ChangeLog for yaml +## 0.11.9.0++* Data.Yaml.Pretty: provide key-sorting function with path to parent object [#206](https://github.com/snoyberg/yaml/pull/206)+ ## 0.11.8.0 * Export `Parse` and `StringStyle` [#204](https://github.com/snoyberg/yaml/pull/204)
src/Data/Yaml/Pretty.hs view
@@ -7,6 +7,7 @@ , Config , getConfCompare , setConfCompare+ , setConfComparePos , getConfDropNull , setConfDropNull , defConfig@@ -50,7 +51,7 @@ -- | -- @since 0.8.13 data Config = Config- { confCompare :: Text -> Text -> Ordering -- ^ Function used to sort keys in objects+ { confCompare :: JSONPath -> Text -> Text -> Ordering -- ^ Function used to sort keys in objects , confDropNull :: Bool -- ^ Drop null values from objects } @@ -62,15 +63,21 @@ -- | -- @since 0.8.13-getConfCompare :: Config -> Text -> Text -> Ordering+getConfCompare :: Config -> JSONPath -> Text -> Text -> Ordering getConfCompare = confCompare -- | Sets ordering for object keys -- -- @since 0.8.13 setConfCompare :: (Text -> Text -> Ordering) -> Config -> Config-setConfCompare cmp c = c { confCompare = cmp }+setConfCompare cmp c = c { confCompare = \_ps -> cmp } +-- | Set ordering for object keys that depends on location of object in the document.+--+-- @since 0.11.9+setConfComparePos :: (JSONPath -> Text -> Text -> Ordering) -> Config -> Config+setConfComparePos cmp c = c { confCompare = cmp }+ -- | -- @since 0.8.24 getConfDropNull :: Config -> Bool@@ -83,17 +90,17 @@ setConfDropNull m c = c { confDropNull = m } pretty :: Config -> Value -> YamlBuilder-pretty cfg = go- where go (Object o) = let sort = sortBy (confCompare cfg `on` fst)- select- | confDropNull cfg = HM.filter (/= Null)- | otherwise = id- in mapping (sort $ fmap (first toText) $ HM.toList $ HM.map go $ select o)- go (Array a) = array (go <$> V.toList a)- go Null = null- go (String s) = string s- go (Number n) = scientific n- go (Bool b) = bool b+pretty cfg = go []+ where go ps (Object o) = let sort = sortBy (confCompare cfg (reverse ps) `on` fst)+ select+ | confDropNull cfg = HM.filter (/= Null)+ | otherwise = id+ in mapping (sort $ fmap (first toText) $ HM.toList $ HM.mapWithKey (\k -> go (Key (toText k): ps)) $ select o)+ go ps (Array a) = array $ zipWith (\ix -> go (Index ix: ps)) [0..] (V.toList a)+ go _ Null = null+ go _ (String s) = string s+ go _ (Number n) = scientific n+ go _ (Bool b) = bool b -- | Configurable 'encode'. --
yaml.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.35.1. -- -- see: https://github.com/sol/hpack name: yaml-version: 0.11.8.0+version: 0.11.9.0 synopsis: Support for parsing and rendering YAML documents. description: README and API documentation are available at <https://www.stackage.org/package/yaml> category: Data@@ -74,7 +74,7 @@ , filepath , libyaml ==0.1.* , mtl- , resourcet >=0.3 && <1.3+ , resourcet >=0.3 && <1.4 , scientific >=0.3 , template-haskell , text@@ -103,20 +103,20 @@ , filepath , libyaml ==0.1.* , mtl- , resourcet >=0.3 && <1.3+ , resourcet >=0.3 && <1.4 , scientific >=0.3 , template-haskell , text , transformers >=0.1 , unordered-containers , vector+ default-language: Haskell2010 if flag(no-examples) buildable: False else build-depends: raw-strings-qq , yaml- default-language: Haskell2010 executable json2yaml main-is: json2yaml.hs@@ -138,7 +138,7 @@ , libyaml ==0.1.* , mtl , optparse-applicative- , resourcet >=0.3 && <1.3+ , resourcet >=0.3 && <1.4 , scientific >=0.3 , template-haskell , text@@ -146,9 +146,9 @@ , unordered-containers , vector , yaml+ default-language: Haskell2010 if flag(no-exe) buildable: False- default-language: Haskell2010 executable yaml2json main-is: yaml2json.hs@@ -174,7 +174,7 @@ , libyaml ==0.1.* , mtl , optparse-applicative- , resourcet >=0.3 && <1.3+ , resourcet >=0.3 && <1.4 , scientific >=0.3 , template-haskell , text@@ -182,9 +182,9 @@ , unordered-containers , vector , yaml+ default-language: Haskell2010 if flag(no-exe) buildable: False- default-language: Haskell2010 test-suite spec type: exitcode-stdio-1.0@@ -214,7 +214,7 @@ , mockery , mtl , raw-strings-qq- , resourcet >=0.3 && <1.3+ , resourcet >=0.3 && <1.4 , scientific >=0.3 , template-haskell , temporary