packages feed

cabal-gild 1.8.4.0 → 1.8.4.1

raw patch · 12 files changed

+466/−230 lines, 12 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- CabalGild.Unstable.Extra.LibraryName: toCaseFold :: LibraryName -> LibraryName
- CabalGild.Unstable.Extra.Mixin: toCaseFold :: Mixin -> Mixin
- CabalGild.Unstable.Extra.PackageName: toCaseFold :: PackageName -> PackageName
- CabalGild.Unstable.Type.Extension: Extension :: Extension -> Extension
- CabalGild.Unstable.Type.Extension: [unwrap] :: Extension -> Extension
- CabalGild.Unstable.Type.Extension: instance Distribution.Parsec.Parsec CabalGild.Unstable.Type.Extension.Extension
- CabalGild.Unstable.Type.Extension: instance Distribution.Pretty.Pretty CabalGild.Unstable.Type.Extension.Extension
- CabalGild.Unstable.Type.Extension: instance GHC.Classes.Eq CabalGild.Unstable.Type.Extension.Extension
- CabalGild.Unstable.Type.Extension: instance GHC.Classes.Ord CabalGild.Unstable.Type.Extension.Extension
- CabalGild.Unstable.Type.Extension: instance GHC.Internal.Show.Show CabalGild.Unstable.Type.Extension.Extension
- CabalGild.Unstable.Type.Extension: newtype Extension
- CabalGild.Unstable.Type.Set: Set :: Set' s b a -> Set s b a
- CabalGild.Unstable.Type.Set: [unwrap] :: Set s b a -> Set' s b a
- CabalGild.Unstable.Type.Set: instance (Distribution.Compat.Newtype.Newtype a b, Distribution.Pretty.Pretty b) => Distribution.Pretty.Pretty (CabalGild.Unstable.Type.Set.Set Distribution.FieldGrammar.Newtypes.CommaFSep b a)
- CabalGild.Unstable.Type.Set: instance (Distribution.Compat.Newtype.Newtype a b, Distribution.Pretty.Pretty b) => Distribution.Pretty.Pretty (CabalGild.Unstable.Type.Set.Set Distribution.FieldGrammar.Newtypes.CommaVCat b a)
- CabalGild.Unstable.Type.Set: instance (Distribution.Compat.Newtype.Newtype a b, Distribution.Pretty.Pretty b, Distribution.FieldGrammar.Newtypes.Sep s) => Distribution.Pretty.Pretty (CabalGild.Unstable.Type.Set.Set s b a)
- CabalGild.Unstable.Type.Set: instance (Distribution.Compat.Newtype.Newtype a b, GHC.Classes.Ord a, Distribution.Parsec.Parsec b, Distribution.FieldGrammar.Newtypes.Sep s) => Distribution.Parsec.Parsec (CabalGild.Unstable.Type.Set.Set s b a)
- CabalGild.Unstable.Type.Set: instance Distribution.Compat.Newtype.Newtype (Data.Set.Internal.Set a) (CabalGild.Unstable.Type.Set.Set s b a)
- CabalGild.Unstable.Type.Set: newtype Set s b a
- CabalGild.Unstable.Type.SomeParsecParser: set :: (Parsec (Set s b a), Pretty (Set s b a)) => SomeParsecParser
+ CabalGild.Unstable.Action.FormatFields: prettySet :: (Newtype [b] a, Ord b, Pretty b) => a -> a
+ CabalGild.Unstable.Action.FormatFields: stringSet :: Newtype [String] a => a -> a
+ CabalGild.Unstable.Type.List: instance (Distribution.Compat.Newtype.Newtype a b, Distribution.Pretty.Pretty b) => Distribution.Pretty.Pretty (CabalGild.Unstable.Type.List.List Distribution.FieldGrammar.Newtypes.CommaVCat b a)
- CabalGild.Unstable.Type.SomeParsecParser: list :: (Parsec (List s b a), Pretty (List s b a)) => SomeParsecParser
+ CabalGild.Unstable.Type.SomeParsecParser: list :: (Parsec (List s b a), Pretty (List s b a)) => (List s b a -> List s b a) -> SomeParsecParser

Files

cabal-gild.cabal view
@@ -11,7 +11,7 @@ maintainer: Taylor Fausak name: cabal-gild synopsis: Formats package descriptions.-version: 1.8.4.0+version: 1.8.4.1  source-repository head   type: git@@ -53,8 +53,8 @@   import: library   autogen-modules: Paths_cabal_gild   build-depends:-    Cabal-syntax ^>=3.12.0.0 || ^>=3.14.0.0 || ^>=3.16.0.0,     bytestring ^>=0.12.0.2,+    Cabal-syntax ^>=3.12.0.0 || ^>=3.14.0.0 || ^>=3.16.0.0,     containers ^>=0.7 || ^>=0.8,     exceptions ^>=0.10.7,     filepath ^>=1.4.100.1 || ^>=1.5.2.0,@@ -106,13 +106,11 @@     CabalGild.Unstable.Extra.FieldLine     CabalGild.Unstable.Extra.FilePath     CabalGild.Unstable.Extra.IncludeRenaming-    CabalGild.Unstable.Extra.LibraryName     CabalGild.Unstable.Extra.List     CabalGild.Unstable.Extra.Mixin     CabalGild.Unstable.Extra.ModuleName     CabalGild.Unstable.Extra.ModuleRenaming     CabalGild.Unstable.Extra.Name-    CabalGild.Unstable.Extra.PackageName     CabalGild.Unstable.Extra.SectionArg     CabalGild.Unstable.Extra.String     CabalGild.Unstable.Extra.UnqualComponentName@@ -126,7 +124,6 @@     CabalGild.Unstable.Type.Context     CabalGild.Unstable.Type.Dependency     CabalGild.Unstable.Type.DiscoverTarget-    CabalGild.Unstable.Type.Extension     CabalGild.Unstable.Type.Flag     CabalGild.Unstable.Type.Input     CabalGild.Unstable.Type.Leniency@@ -137,7 +134,6 @@     CabalGild.Unstable.Type.Optional     CabalGild.Unstable.Type.Output     CabalGild.Unstable.Type.Pragma-    CabalGild.Unstable.Type.Set     CabalGild.Unstable.Type.SomeParsecParser     CabalGild.Unstable.Type.TestedWith     CabalGild.Unstable.Type.Variable
source/library/CabalGild/Unstable/Action/FormatFields.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeApplications #-}  module CabalGild.Unstable.Action.FormatFields where@@ -10,22 +11,25 @@ import qualified CabalGild.Unstable.Type.Comments as Comments import qualified CabalGild.Unstable.Type.Condition as Condition import qualified CabalGild.Unstable.Type.Dependency as Dependency-import qualified CabalGild.Unstable.Type.Extension as Extension import qualified CabalGild.Unstable.Type.Mixin as Mixin import qualified CabalGild.Unstable.Type.SomeParsecParser as SPP import qualified CabalGild.Unstable.Type.TestedWith as TestedWith import qualified CabalGild.Unstable.Type.Variable as Variable import qualified Data.ByteString as ByteString+import qualified Data.Containers.ListUtils as ListUtils import qualified Data.Function as Function import qualified Data.Functor.Identity as Identity+import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Maybe as Maybe import qualified Distribution.CabalSpecVersion as CabalSpecVersion+import qualified Distribution.Compat.Newtype as Newtype import qualified Distribution.FieldGrammar.Newtypes as Newtypes import qualified Distribution.Fields as Fields import qualified Distribution.ModuleName as ModuleName import qualified Distribution.Parsec as Parsec import qualified Distribution.Parsec.FieldLineStream as FieldLineStream+import qualified Distribution.Pretty as Pretty import qualified Distribution.Types.ExeDependency as ExeDependency import qualified Distribution.Types.ForeignLibOption as ForeignLibOption import qualified Distribution.Types.LegacyExeDependency as LegacyExeDependency@@ -164,61 +168,75 @@   let (=:) :: String -> SPP.SomeParsecParser -> (Fields.FieldName, SPP.SomeParsecParser)       (=:) = (,) . String.toUtf8    in Map.fromList-        [ "asm-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "asm-sources" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "autogen-includes" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "autogen-modules" =: SPP.set @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName),-          "build-depends" =: SPP.set @Newtypes.CommaVCat @(Identity.Identity Dependency.Dependency),-          "build-tool-depends" =: SPP.set @Newtypes.CommaFSep @(Identity.Identity ExeDependency.ExeDependency),-          "build-tools" =: SPP.set @Newtypes.CommaFSep @(Identity.Identity LegacyExeDependency.LegacyExeDependency),-          "c-sources" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "cc-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "cmm-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "cmm-sources" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "code-generators" =: SPP.list @Newtypes.CommaFSep @Newtypes.Token,-          "cpp-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "cxx-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "cxx-sources" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "data-files" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "default-extensions" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Extension.Extension),-          "exposed-modules" =: SPP.set @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName),-          "extensions" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Extension.Extension),-          "extra-bundled-libraries" =: SPP.set @Newtypes.VCat @Newtypes.Token,-          "extra-doc-files" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "extra-dynamic-library-flavours" =: SPP.set @Newtypes.VCat @Newtypes.Token,-          "extra-framework-dirs" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "extra-ghci-libraries" =: SPP.set @Newtypes.VCat @Newtypes.Token,-          "extra-lib-dirs-static" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "extra-lib-dirs" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "extra-libraries-static" =: SPP.set @Newtypes.VCat @Newtypes.Token,-          "extra-libraries" =: SPP.set @Newtypes.VCat @Newtypes.Token,-          "extra-library-flavours" =: SPP.set @Newtypes.VCat @Newtypes.Token,-          "extra-source-files" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "extra-tmp-files" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "frameworks" =: SPP.set @Newtypes.FSep @Newtypes.Token,-          "ghc-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "ghc-prof-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "ghc-shared-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "ghcjs-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "ghcjs-prof-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "ghcjs-shared-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "hs-source-dirs" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT,-          "hsc2hs-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "include-dirs" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "includes" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "install-includes" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "js-sources" =: SPP.set @Newtypes.VCat @Newtypes.FilePathNT,-          "ld-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token',-          "license-files" =: SPP.set @Newtypes.FSep @Newtypes.FilePathNT,-          "mixins" =: SPP.set @Newtypes.CommaVCat @(Identity.Identity Mixin.Mixin),-          "options" =: SPP.set @Newtypes.FSep @(Identity.Identity ForeignLibOption.ForeignLibOption),-          "other-extensions" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Extension.Extension),-          "other-languages" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Haskell.Language),-          "other-modules" =: SPP.set @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName),-          "pkgconfig-depends" =: SPP.set @Newtypes.CommaFSep @(Identity.Identity PkgconfigDependency.PkgconfigDependency),-          "reexported-modules" =: SPP.set @Newtypes.CommaVCat @(Identity.Identity ModuleReexport.ModuleReexport),-          "setup-depends" =: SPP.set @Newtypes.CommaVCat @(Identity.Identity Dependency.Dependency),-          "signatures" =: SPP.set @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName),-          "tested-with" =: SPP.set @Newtypes.FSep @(Identity.Identity TestedWith.TestedWith),-          "virtual-modules" =: SPP.set @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName)+        [ "asm-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "asm-sources" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "autogen-includes" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "autogen-modules" =: SPP.list @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName) prettySet,+          "build-depends" =: SPP.list @Newtypes.CommaVCat @(Identity.Identity Dependency.Dependency) prettySet,+          "build-tool-depends" =: SPP.list @Newtypes.CommaFSep @(Identity.Identity ExeDependency.ExeDependency) prettySet,+          "build-tools" =: SPP.list @Newtypes.CommaFSep @(Identity.Identity LegacyExeDependency.LegacyExeDependency) prettySet,+          "c-sources" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "cc-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "cmm-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "cmm-sources" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "code-generators" =: SPP.list @Newtypes.CommaFSep @Newtypes.Token id,+          "cpp-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "cxx-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "cxx-sources" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "data-files" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "default-extensions" =: SPP.list @Newtypes.FSep @(Newtypes.MQuoted Haskell.Extension) prettySet,+          "exposed-modules" =: SPP.list @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName) prettySet,+          "extensions" =: SPP.list @Newtypes.FSep @(Newtypes.MQuoted Haskell.Extension) prettySet,+          "extra-bundled-libraries" =: SPP.list @Newtypes.VCat @Newtypes.Token stringSet,+          "extra-doc-files" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "extra-dynamic-library-flavours" =: SPP.list @Newtypes.VCat @Newtypes.Token stringSet,+          "extra-framework-dirs" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "extra-ghci-libraries" =: SPP.list @Newtypes.VCat @Newtypes.Token stringSet,+          "extra-lib-dirs-static" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "extra-lib-dirs" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "extra-libraries-static" =: SPP.list @Newtypes.VCat @Newtypes.Token stringSet,+          "extra-libraries" =: SPP.list @Newtypes.VCat @Newtypes.Token stringSet,+          "extra-library-flavours" =: SPP.list @Newtypes.VCat @Newtypes.Token stringSet,+          "extra-source-files" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "extra-tmp-files" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "frameworks" =: SPP.list @Newtypes.FSep @Newtypes.Token stringSet,+          "ghc-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "ghc-prof-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "ghc-shared-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "ghcjs-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "ghcjs-prof-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "ghcjs-shared-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "hs-source-dirs" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT id,+          "hsc2hs-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "include-dirs" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "includes" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "install-includes" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "js-sources" =: SPP.list @Newtypes.VCat @Newtypes.FilePathNT stringSet,+          "ld-options" =: SPP.list @Newtypes.NoCommaFSep @Newtypes.Token' id,+          "license-files" =: SPP.list @Newtypes.FSep @Newtypes.FilePathNT stringSet,+          "mixins" =: SPP.list @Newtypes.CommaVCat @(Identity.Identity Mixin.Mixin) prettySet,+          "options" =: SPP.list @Newtypes.FSep @(Identity.Identity ForeignLibOption.ForeignLibOption) prettySet,+          "other-extensions" =: SPP.list @Newtypes.FSep @(Newtypes.MQuoted Haskell.Extension) prettySet,+          "other-languages" =: SPP.list @Newtypes.FSep @(Newtypes.MQuoted Haskell.Language) prettySet,+          "other-modules" =: SPP.list @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName) prettySet,+          "pkgconfig-depends" =: SPP.list @Newtypes.CommaFSep @(Identity.Identity PkgconfigDependency.PkgconfigDependency) prettySet,+          "reexported-modules" =: SPP.list @Newtypes.CommaVCat @(Identity.Identity ModuleReexport.ModuleReexport) prettySet,+          "setup-depends" =: SPP.list @Newtypes.CommaVCat @(Identity.Identity Dependency.Dependency) prettySet,+          "signatures" =: SPP.list @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName) prettySet,+          "tested-with" =: SPP.list @Newtypes.FSep @(Identity.Identity TestedWith.TestedWith) prettySet,+          "virtual-modules" =: SPP.list @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName) prettySet         ]++stringSet :: (Newtype.Newtype [String] a) => a -> a+stringSet =+  Newtype.pack+    . List.sortOn (\x -> (String.toCaseFold x, x))+    . ListUtils.nubOrd+    . Newtype.unpack++prettySet :: (Newtype.Newtype [b] a, Ord b, Pretty.Pretty b) => a -> a+prettySet =+  Newtype.pack+    . List.sortOn (\x -> (String.toCaseFold $ Pretty.prettyShow x, x))+    . ListUtils.nubOrd+    . Newtype.unpack
− source/library/CabalGild/Unstable/Extra/LibraryName.hs
@@ -1,9 +0,0 @@-module CabalGild.Unstable.Extra.LibraryName where--import qualified CabalGild.Unstable.Extra.UnqualComponentName as UnqualComponentName-import qualified Distribution.Types.LibraryName as LibraryName--toCaseFold :: LibraryName.LibraryName -> LibraryName.LibraryName-toCaseFold ln = case ln of-  LibraryName.LMainLibName -> LibraryName.LMainLibName-  LibraryName.LSubLibName uqn -> LibraryName.LSubLibName $ UnqualComponentName.toCaseFold uqn
source/library/CabalGild/Unstable/Extra/Mixin.hs view
@@ -1,8 +1,6 @@ module CabalGild.Unstable.Extra.Mixin where  import qualified CabalGild.Unstable.Extra.IncludeRenaming as IncludeRenaming-import qualified CabalGild.Unstable.Extra.LibraryName as LibraryName-import qualified CabalGild.Unstable.Extra.PackageName as PackageName import qualified Distribution.Types.Mixin as Mixin  sort :: Mixin.Mixin -> Mixin.Mixin@@ -11,11 +9,4 @@     { Mixin.mixinPackageName = Mixin.mixinPackageName x,       Mixin.mixinLibraryName = Mixin.mixinLibraryName x,       Mixin.mixinIncludeRenaming = IncludeRenaming.sort $ Mixin.mixinIncludeRenaming x-    }--toCaseFold :: Mixin.Mixin -> Mixin.Mixin-toCaseFold x =-  x-    { Mixin.mixinPackageName = PackageName.toCaseFold $ Mixin.mixinPackageName x,-      Mixin.mixinLibraryName = LibraryName.toCaseFold $ Mixin.mixinLibraryName x     }
− source/library/CabalGild/Unstable/Extra/PackageName.hs
@@ -1,10 +0,0 @@-module CabalGild.Unstable.Extra.PackageName where--import qualified CabalGild.Unstable.Extra.String as String-import qualified Distribution.Types.PackageName as PackageName--toCaseFold :: PackageName.PackageName -> PackageName.PackageName-toCaseFold =-  PackageName.mkPackageName-    . String.toCaseFold-    . PackageName.unPackageName
source/library/CabalGild/Unstable/Type/Dependency.hs view
@@ -14,6 +14,8 @@ import qualified Distribution.Types.UnqualComponentName as UnqualComponentName import qualified Text.PrettyPrint as PrettyPrint +-- | This type primarily exists because Cabal doesn't differentiate between+-- `foo` and `foo:foo` (or `foo:{foo}`). data Dependency = MkDependency   { packageName :: PackageName.PackageName,     libraryNames :: Maybe (Either UnqualComponentName.UnqualComponentName (NonEmpty.NonEmpty UnqualComponentName.UnqualComponentName)),
− source/library/CabalGild/Unstable/Type/Extension.hs
@@ -1,25 +0,0 @@-module CabalGild.Unstable.Type.Extension where--import qualified CabalGild.Unstable.Extra.String as String-import qualified Data.Ord as Ord-import qualified Distribution.Parsec as Parsec-import qualified Distribution.Pretty as Pretty-import qualified Language.Haskell.Extension as Extension---- | This type exists to provide a different 'Ord' instance for--- 'Extension.Extension'. The instance provided by @Cabal-syntax@ sorts things--- in a surprising order. This one sorts things alphabetically.-newtype Extension = Extension-  { unwrap :: Extension.Extension-  }-  deriving (Eq, Show)--instance Ord Extension where-  compare = Ord.comparing $ \x ->-    let y = Pretty.prettyShow x in (String.toCaseFold y, y)--instance Parsec.Parsec Extension where-  parsec = Extension <$> Parsec.parsec--instance Pretty.Pretty Extension where-  pretty = Pretty.pretty . unwrap
source/library/CabalGild/Unstable/Type/List.hs view
@@ -65,3 +65,22 @@     )       . fmap (Pretty.prettyVersioned @b v . Newtype.pack)       . Newtype.unpack++-- | Overlaps the more general instance in order to use trailing commas when+-- possible.+instance+  {-# OVERLAPPING #-}+  ( Newtype.Newtype a b,+    Pretty.Pretty b+  ) =>+  Pretty.Pretty (List Newtypes.CommaVCat b a)+  where+  pretty = Pretty.prettyVersioned CabalSpecVersion.CabalSpecV1_0+  prettyVersioned v =+    ( \xs ->+        if List.compareLength xs 1 == GT && v >= CabalSpecVersion.CabalSpecV2_2+          then PrettyPrint.vcat $ fmap (<> PrettyPrint.comma) xs+          else Newtypes.prettySep (Proxy.Proxy @Newtypes.CommaVCat) xs+    )+      . fmap (Pretty.prettyVersioned @b v . Newtype.pack)+      . Newtype.unpack
source/library/CabalGild/Unstable/Type/Mixin.hs view
@@ -1,21 +1,16 @@ module CabalGild.Unstable.Type.Mixin where  import qualified CabalGild.Unstable.Extra.Mixin as Mixin-import qualified Data.Ord as Ord import qualified Distribution.Parsec as Parsec import qualified Distribution.Pretty as Pretty import qualified Distribution.Types.Mixin as Mixin --- | This is a wrapper around 'Mixin.Mixin' that compares case insensitively--- and sorts the nested module names when printing.+-- | This is a wrapper around 'Mixin.Mixin' that sorts the nested module names+-- when printing. newtype Mixin = Mixin   { unwrap :: Mixin.Mixin   }-  deriving (Eq, Show)--instance Ord Mixin where-  compare = Ord.comparing $ \x ->-    let y = unwrap x in (Mixin.toCaseFold y, y)+  deriving (Eq, Ord, Show)  instance Parsec.Parsec Mixin where   parsec = Mixin <$> Parsec.parsec
− source/library/CabalGild/Unstable/Type/Set.hs
@@ -1,91 +0,0 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-}--module CabalGild.Unstable.Type.Set where--import qualified CabalGild.Unstable.Extra.List as List-import qualified Data.Proxy as Proxy-import qualified Data.Set as Set-import qualified Distribution.CabalSpecVersion as CabalSpecVersion-import qualified Distribution.Compat.Newtype as Newtype-import qualified Distribution.FieldGrammar.Newtypes as Newtypes-import qualified Distribution.Parsec as Parsec-import qualified Distribution.Pretty as Pretty-import qualified Text.PrettyPrint as PrettyPrint---- | A thin wrapper around 'Newtypes.Set''. This is used to define custom--- instances of 'Pretty.Pretty' that use trailing commas when the Cabal spec--- version is recent enough (at least @2.2@).-newtype Set s b a = Set-  { unwrap :: Newtypes.Set' s b a-  }--instance Newtype.Newtype (Set.Set a) (Set s b a) where-  pack = Set . Newtype.pack-  unpack = Newtype.unpack . unwrap--instance-  ( Newtype.Newtype a b,-    Ord a,-    Parsec.Parsec b,-    Newtypes.Sep s-  ) =>-  Parsec.Parsec (Set s b a)-  where-  parsec = Set <$> Parsec.parsec--instance-  ( Newtype.Newtype a b,-    Pretty.Pretty b,-    Newtypes.Sep s-  ) =>-  Pretty.Pretty (Set s b a)-  where-  pretty = Pretty.prettyVersioned CabalSpecVersion.CabalSpecV1_0-  prettyVersioned v =-    Newtypes.prettySep (Proxy.Proxy @s)-      . fmap (Pretty.prettyVersioned @b v . Newtype.pack)-      . Set.toAscList-      . Newtype.unpack---- | Overlaps the more general instance in order to use trailing commas when--- possible.-instance-  {-# OVERLAPPING #-}-  ( Newtype.Newtype a b,-    Pretty.Pretty b-  ) =>-  Pretty.Pretty (Set Newtypes.CommaFSep b a)-  where-  pretty = Pretty.prettyVersioned CabalSpecVersion.CabalSpecV1_0-  prettyVersioned v =-    ( \xs ->-        if List.compareLength xs 1 == GT && v >= CabalSpecVersion.CabalSpecV2_2-          then PrettyPrint.fsep $ fmap (<> PrettyPrint.comma) xs-          else Newtypes.prettySep (Proxy.Proxy @Newtypes.CommaFSep) xs-    )-      . fmap (Pretty.prettyVersioned @b v . Newtype.pack)-      . Set.toAscList-      . Newtype.unpack---- | Overlaps the more general instance in order to use trailing commas when--- possible.-instance-  {-# OVERLAPPING #-}-  ( Newtype.Newtype a b,-    Pretty.Pretty b-  ) =>-  Pretty.Pretty (Set Newtypes.CommaVCat b a)-  where-  pretty = Pretty.prettyVersioned CabalSpecVersion.CabalSpecV1_0-  prettyVersioned v =-    ( \xs ->-        if List.compareLength xs 1 == GT && v >= CabalSpecVersion.CabalSpecV2_2-          then PrettyPrint.vcat $ fmap (<> PrettyPrint.comma) xs-          else Newtypes.prettySep (Proxy.Proxy @Newtypes.CommaVCat) xs-    )-      . fmap (Pretty.prettyVersioned @b v . Newtype.pack)-      . Set.toAscList-      . Newtype.unpack
source/library/CabalGild/Unstable/Type/SomeParsecParser.hs view
@@ -8,7 +8,6 @@ module CabalGild.Unstable.Type.SomeParsecParser where  import qualified CabalGild.Unstable.Type.List as List-import qualified CabalGild.Unstable.Type.Set as Set import qualified Distribution.CabalSpecVersion as CabalSpecVersion import qualified Distribution.Parsec as Parsec import qualified Distribution.Pretty as Pretty@@ -28,20 +27,10 @@ list ::   forall s b a.   (Parsec.Parsec (List.List s b a), Pretty.Pretty (List.List s b a)) =>+  (List.List s b a -> List.List s b a) ->   SomeParsecParser-list =+list f =   SomeParsecParser     { parsec = Parsec.parsec @(List.List s b a),-      pretty = Pretty.prettyVersioned-    }---- | Creates a new parser for the given 'Set.Set' of values.-set ::-  forall s b a.-  (Parsec.Parsec (Set.Set s b a), Pretty.Pretty (Set.Set s b a)) =>-  SomeParsecParser-set =-  SomeParsecParser-    { parsec = Parsec.parsec @(Set.Set s b a),-      pretty = Pretty.prettyVersioned+      pretty = \v -> Pretty.prettyVersioned v . f     }
source/test-suite/Main.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# OPTIONS_GHC -O0 #-}  import qualified CabalGild.Unstable.Action.EvaluatePragmas.Version as Version import qualified CabalGild.Unstable.Class.MonadHandle as MonadHandle@@ -913,6 +914,11 @@       "library\n exposed-modules: N M"       "library\n  exposed-modules:\n    M\n    N\n" +  Hspec.it "sorts exposed-modules case insensitively" $ do+    expectGilded+      "library\n exposed-modules: MB Ma"+      "library\n  exposed-modules:\n    Ma\n    MB\n"+   Hspec.it "sorts reexported-modules" $ do     expectGilded       "library\n reexported-modules: p:M4 as M5, M2 as M3, q:M6, M1"@@ -923,6 +929,11 @@       "library\n signatures: N M"       "library\n  signatures:\n    M\n    N\n" +  Hspec.it "sorts signatures case insensitively" $ do+    expectGilded+      "library\n signatures: MB Ma"+      "library\n  signatures:\n    Ma\n    MB\n"+   Hspec.it "sorts build-tools" $ do     expectGilded       "library\n build-tools: q , p == 1"@@ -990,16 +1001,31 @@       "library\n other-modules: N M"       "library\n  other-modules:\n    M\n    N\n" +  Hspec.it "sorts other-modules case insensitively" $ do+    expectGilded+      "library\n other-modules: MB Ma"+      "library\n  other-modules:\n    Ma\n    MB\n"+   Hspec.it "sorts virtual-modules" $ do     expectGilded       "library\n virtual-modules: N M"       "library\n  virtual-modules:\n    M\n    N\n" +  Hspec.it "sorts virtual-modules case insensitively" $ do+    expectGilded+      "library\n virtual-modules: MB Ma"+      "library\n  virtual-modules:\n    Ma\n    MB\n"+   Hspec.it "sorts autogen-modules" $ do     expectGilded       "library\n autogen-modules: N M"       "library\n  autogen-modules:\n    M\n    N\n" +  Hspec.it "sorts autogen-modules case insensitively" $ do+    expectGilded+      "library\n autogen-modules: MB Ma"+      "library\n  autogen-modules:\n    Ma\n    MB\n"+   Hspec.it "sorts other-languages" $ do     expectGilded       "library\n other-languages: b a"@@ -2143,6 +2169,341 @@       expectGilded         "build-depends: x (>= 1) && (< 2)"         "build-depends: x (>=1) && (<2)\n"++  Hspec.describe "fields" $ do+    Hspec.describe "asm-options" $ do+      Hspec.it "does not deduplicate" $ do+        expectGilded "asm-options: a a" "asm-options:\n  a\n  a\n"++      Hspec.it "does not sort" $ do+        expectGilded "asm-options: b a" "asm-options:\n  b\n  a\n"++    Hspec.describe "asm-sources" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "asm-sources: a a" "asm-sources: a\n"++      Hspec.it "sorts" $ do+        expectGilded "asm-sources: B a" "asm-sources:\n  a\n  B\n"++    Hspec.describe "autogen-includes" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "autogen-includes: a a" "autogen-includes: a\n"++      Hspec.it "sorts" $ do+        expectGilded "autogen-includes: B a" "autogen-includes:\n  a\n  B\n"++    Hspec.describe "autogen-modules" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "autogen-modules: A A" "autogen-modules: A\n"++      Hspec.it "sorts" $ do+        expectGilded "autogen-modules: AB Aa" "autogen-modules:\n  Aa\n  AB\n"++    Hspec.describe "build-depends" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "build-depends: a, a" "build-depends: a\n"++      Hspec.it "sorts packages" $ do+        expectGilded "build-depends: B, a" "build-depends:\n  a,\n  B\n"++      Hspec.it "sorts components" $ do+        expectGilded "cabal-version: 3.0\nbuild-depends: a:C, a:b" "cabal-version: 3.0\nbuild-depends:\n  a:b,\n  a:C,\n"++      Hspec.it "sorts multiple components" $ do+        expectGilded "cabal-version: 3.0\nbuild-depends: a:{C, b}" "cabal-version: 3.0\nbuild-depends: a:{b, C}\n"++      Hspec.it "sorts varieties" $ do+        -- These are ordered roughly from least to most complex.+        --+        -- Even though `a:a` and `a:{a}` are semantically identical, they do+        -- not get deduplicated.+        expectGilded "cabal-version: 3.0\nbuild-depends: a:a, a:{a}, a" "cabal-version: 3.0\nbuild-depends:\n  a,\n  a:a,\n  a:{a},\n"++    Hspec.describe "build-tool-depends" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "build-tool-depends: p:c, p:c" "build-tool-depends: p:c\n"++      Hspec.it "sorts packages" $ do+        expectGilded "build-tool-depends: B:c, a:c" "build-tool-depends:\n  a:c,\n  B:c\n"++      Hspec.it "sorts components" $ do+        expectGilded "build-tool-depends: a:C, a:b" "build-tool-depends:\n  a:b,\n  a:C\n"++    Hspec.describe "build-tools" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "build-tools: p, p" "build-tools: p >=0\n"++      Hspec.it "sorts" $ do+        expectGilded "build-tools: B, a" "build-tools:\n  a >=0,\n  B >=0\n"++    Hspec.describe "c-sources" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "c-sources: a a" "c-sources: a\n"++      Hspec.it "sorts" $ do+        expectGilded "c-sources: B a" "c-sources:\n  a\n  B\n"++    Hspec.describe "cmm-sources" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "cmm-sources: a a" "cmm-sources: a\n"++      Hspec.it "sorts" $ do+        expectGilded "cmm-sources: B a" "cmm-sources:\n  a\n  B\n"++    Hspec.describe "cxx-sources" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "cxx-sources: a a" "cxx-sources: a\n"++      Hspec.it "sorts" $ do+        expectGilded "cxx-sources: B a" "cxx-sources:\n  a\n  B\n"++    Hspec.describe "data-files" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "data-files: a a" "data-files: a\n"++      Hspec.it "sorts" $ do+        expectGilded "data-files: B a" "data-files:\n  a\n  B\n"++    Hspec.describe "default-extensions" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "default-extensions: A A" "default-extensions: A\n"++      Hspec.it "sorts" $ do+        expectGilded "default-extensions: AB Aa" "default-extensions:\n  Aa\n  AB\n"++    Hspec.describe "exposed-modules" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "exposed-modules: A A" "exposed-modules: A\n"++      Hspec.it "sorts" $ do+        expectGilded "exposed-modules: AB Aa" "exposed-modules:\n  Aa\n  AB\n"++    Hspec.describe "extensions" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extensions: A A" "extensions: A\n"++      Hspec.it "sorts" $ do+        expectGilded "extensions: AB Aa" "extensions:\n  Aa\n  AB\n"++    Hspec.describe "extra-bundled-libraries" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-bundled-libraries: a a" "extra-bundled-libraries: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-bundled-libraries: B a" "extra-bundled-libraries:\n  a\n  B\n"++    Hspec.describe "extra-doc-files" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-doc-files: a a" "extra-doc-files: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-doc-files: B a" "extra-doc-files:\n  a\n  B\n"++    Hspec.describe "extra-dynamic-library-flavours" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-dynamic-library-flavours: a a" "extra-dynamic-library-flavours: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-dynamic-library-flavours: B a" "extra-dynamic-library-flavours:\n  a\n  B\n"++    Hspec.describe "extra-framework-dirs" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-framework-dirs: a a" "extra-framework-dirs: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-framework-dirs: B a" "extra-framework-dirs:\n  a\n  B\n"++    Hspec.describe "extra-ghci-libraries" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-ghci-libraries: a a" "extra-ghci-libraries: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-ghci-libraries: B a" "extra-ghci-libraries:\n  a\n  B\n"++    Hspec.describe "extra-lib-dirs" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-lib-dirs: a a" "extra-lib-dirs: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-lib-dirs: B a" "extra-lib-dirs:\n  a\n  B\n"++    Hspec.describe "extra-lib-dirs-static" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-lib-dirs-static: a a" "extra-lib-dirs-static: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-lib-dirs-static: B a" "extra-lib-dirs-static:\n  a\n  B\n"++    Hspec.describe "extra-libraries" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-libraries: a a" "extra-libraries: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-libraries: B a" "extra-libraries:\n  a\n  B\n"++    Hspec.describe "extra-libraries-static" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-libraries-static: a a" "extra-libraries-static: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-libraries-static: B a" "extra-libraries-static:\n  a\n  B\n"++    Hspec.describe "extra-library-flavours" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-library-flavours: a a" "extra-library-flavours: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-library-flavours: B a" "extra-library-flavours:\n  a\n  B\n"++    Hspec.describe "extra-source-files" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-source-files: a a" "extra-source-files: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-source-files: B a" "extra-source-files:\n  a\n  B\n"++    Hspec.describe "extra-tmp-files" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "extra-tmp-files: a a" "extra-tmp-files: a\n"++      Hspec.it "sorts" $ do+        expectGilded "extra-tmp-files: B a" "extra-tmp-files:\n  a\n  B\n"++    Hspec.describe "frameworks" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "frameworks: a a" "frameworks: a\n"++      Hspec.it "sorts" $ do+        expectGilded "frameworks: B a" "frameworks:\n  a\n  B\n"++    Hspec.describe "include-dirs" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "include-dirs: a a" "include-dirs: a\n"++      Hspec.it "sorts" $ do+        expectGilded "include-dirs: B a" "include-dirs:\n  a\n  B\n"++    Hspec.describe "includes" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "includes: a a" "includes: a\n"++      Hspec.it "sorts" $ do+        expectGilded "includes: B a" "includes:\n  a\n  B\n"++    Hspec.describe "install-includes" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "install-includes: a a" "install-includes: a\n"++      Hspec.it "sorts" $ do+        expectGilded "install-includes: B a" "install-includes:\n  a\n  B\n"++    Hspec.describe "js-sources" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "js-sources: a a" "js-sources: a\n"++      Hspec.it "sorts" $ do+        expectGilded "js-sources: B a" "js-sources:\n  a\n  B\n"++    Hspec.describe "license-files" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "license-files: a a" "license-files: a\n"++      Hspec.it "sorts" $ do+        expectGilded "license-files: B a" "license-files:\n  a\n  B\n"++    Hspec.describe "mixins" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "mixins: a, a" "mixins: a\n"++      Hspec.it "sorts packages" $ do+        expectGilded "mixins: B, a" "mixins:\n  a,\n  B\n"++      Hspec.it "sorts modules" $ do+        expectGilded "mixins: a (AB, Aa)" "mixins: a (Aa, AB)\n"++      Hspec.it "sorts hiding" $ do+        expectGilded "mixins: a hiding (AB, Aa)" "mixins: a hiding (Aa, AB)\n"++    Hspec.describe "options" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "options: standalone standalone" "options: standalone\n"++      Hspec.it "sorts" $ do+        -- `ForeignLibOption` only has one constructor, so we can't actually+        -- test this.+        expectGilded "options: standalone" "options: standalone\n"++    Hspec.describe "other-extensions" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "other-extensions: A A" "other-extensions: A\n"++      Hspec.it "sorts" $ do+        expectGilded "other-extensions: AB Aa" "other-extensions:\n  Aa\n  AB\n"++    Hspec.describe "other-languages" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "other-languages: A A" "other-languages: A\n"++      Hspec.it "sorts" $ do+        expectGilded "other-languages: AB Aa" "other-languages:\n  Aa\n  AB\n"++    Hspec.describe "other-modules" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "other-modules: A A" "other-modules: A\n"++      Hspec.it "sorts" $ do+        expectGilded "other-modules: AB Aa" "other-modules:\n  Aa\n  AB\n"++    Hspec.describe "pkgconfig-depends" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "pkgconfig-depends: a, a" "pkgconfig-depends: a\n"++      Hspec.it "sorts" $ do+        expectGilded "pkgconfig-depends: B, a" "pkgconfig-depends:\n  a,\n  B\n"++    Hspec.describe "reexported-modules" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "reexported-modules: A, A" "reexported-modules: A\n"++      Hspec.it "sorts modules" $ do+        expectGilded "reexported-modules: AB, Aa" "reexported-modules:\n  Aa,\n  AB\n"++      Hspec.it "sorts aliases" $ do+        expectGilded "reexported-modules: A as AB, A as Aa" "reexported-modules:\n  A as Aa,\n  A as AB\n"++      Hspec.it "sorts packages" $ do+        expectGilded "reexported-modules: B:C, a:C" "reexported-modules:\n  a:C,\n  B:C\n"++      Hspec.it "sorts unqualified before qualified" $ do+        expectGilded "reexported-modules: a:A, A" "reexported-modules:\n  A,\n  a:A\n"++    Hspec.describe "setup-depends" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "setup-depends: a, a" "setup-depends: a\n"++      Hspec.it "sorts" $ do+        expectGilded "setup-depends: B, a" "setup-depends:\n  a,\n  B\n"++    Hspec.describe "signatures" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "signatures: A A" "signatures: A\n"++      Hspec.it "sorts" $ do+        expectGilded "signatures: AB Aa" "signatures:\n  Aa\n  AB\n"++    Hspec.describe "tested-with" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "tested-with: ghc ghc" "tested-with: ghc\n"++      Hspec.it "sorts" $ do+        expectGilded "tested-with: B a" "tested-with:\n  a\n  B\n"++    Hspec.describe "virtual-modules" $ do+      Hspec.it "deduplicates" $ do+        expectGilded "virtual-modules: A A" "virtual-modules: A\n"++      Hspec.it "sorts" $ do+        expectGilded "virtual-modules: AB Aa" "virtual-modules:\n  Aa\n  AB\n"    Hspec.around_ withTemporaryDirectory     . Hspec.it "discovers modules on the file system"