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 +2/−6
- source/library/CabalGild/Unstable/Action/FormatFields.hs +76/−58
- source/library/CabalGild/Unstable/Extra/LibraryName.hs +0/−9
- source/library/CabalGild/Unstable/Extra/Mixin.hs +0/−9
- source/library/CabalGild/Unstable/Extra/PackageName.hs +0/−10
- source/library/CabalGild/Unstable/Type/Dependency.hs +2/−0
- source/library/CabalGild/Unstable/Type/Extension.hs +0/−25
- source/library/CabalGild/Unstable/Type/List.hs +19/−0
- source/library/CabalGild/Unstable/Type/Mixin.hs +3/−8
- source/library/CabalGild/Unstable/Type/Set.hs +0/−91
- source/library/CabalGild/Unstable/Type/SomeParsecParser.hs +3/−14
- source/test-suite/Main.hs +361/−0
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"