cabal-gild 1.7.0.2 → 1.8.0.0
raw patch · 13 files changed
+157/−37 lines, 13 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- CabalGild.Unstable.Type.Mixin: sortIncludeRenaming :: IncludeRenaming -> IncludeRenaming
- CabalGild.Unstable.Type.Mixin: sortMixin :: Mixin -> Mixin
- CabalGild.Unstable.Type.Mixin: sortModuleRenaming :: ModuleRenaming -> ModuleRenaming
+ CabalGild.Unstable.Extra.IncludeRenaming: sort :: IncludeRenaming -> IncludeRenaming
+ CabalGild.Unstable.Extra.LibraryName: toCaseFold :: LibraryName -> LibraryName
+ CabalGild.Unstable.Extra.Mixin: sort :: Mixin -> Mixin
+ CabalGild.Unstable.Extra.Mixin: toCaseFold :: Mixin -> Mixin
+ CabalGild.Unstable.Extra.ModuleName: toCaseFold :: ModuleName -> ModuleName
+ CabalGild.Unstable.Extra.ModuleRenaming: sort :: ModuleRenaming -> ModuleRenaming
+ CabalGild.Unstable.Extra.PackageName: toCaseFold :: PackageName -> PackageName
+ CabalGild.Unstable.Extra.String: toCaseFold :: String -> String
+ CabalGild.Unstable.Extra.UnqualComponentName: toCaseFold :: UnqualComponentName -> UnqualComponentName
Files
- cabal-gild.cabal +7/−1
- source/library/CabalGild/Unstable/Extra/IncludeRenaming.hs +11/−0
- source/library/CabalGild/Unstable/Extra/LibraryName.hs +9/−0
- source/library/CabalGild/Unstable/Extra/Mixin.hs +21/−0
- source/library/CabalGild/Unstable/Extra/ModuleName.hs +7/−0
- source/library/CabalGild/Unstable/Extra/ModuleRenaming.hs +12/−0
- source/library/CabalGild/Unstable/Extra/PackageName.hs +10/−0
- source/library/CabalGild/Unstable/Extra/String.hs +3/−0
- source/library/CabalGild/Unstable/Extra/UnqualComponentName.hs +10/−0
- source/library/CabalGild/Unstable/Type/Dependency.hs +2/−1
- source/library/CabalGild/Unstable/Type/Extension.hs +3/−1
- source/library/CabalGild/Unstable/Type/Mixin.hs +7/−34
- source/test-suite/Main.hs +55/−0
cabal-gild.cabal view
@@ -11,7 +11,7 @@ maintainer: Taylor Fausak name: cabal-gild synopsis: Formats package descriptions.-version: 1.7.0.2+version: 1.8.0.0 source-repository head type: git@@ -98,11 +98,17 @@ CabalGild.Unstable.Extra.Field 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 CabalGild.Unstable.Main CabalGild.Unstable.Type.Block CabalGild.Unstable.Type.Chunk
+ source/library/CabalGild/Unstable/Extra/IncludeRenaming.hs view
@@ -0,0 +1,11 @@+module CabalGild.Unstable.Extra.IncludeRenaming where++import qualified CabalGild.Unstable.Extra.ModuleRenaming as ModuleRenaming+import qualified Distribution.Types.IncludeRenaming as IncludeRenaming++sort :: IncludeRenaming.IncludeRenaming -> IncludeRenaming.IncludeRenaming+sort x =+ IncludeRenaming.IncludeRenaming+ { IncludeRenaming.includeProvidesRn = ModuleRenaming.sort $ IncludeRenaming.includeProvidesRn x,+ IncludeRenaming.includeRequiresRn = ModuleRenaming.sort $ IncludeRenaming.includeRequiresRn x+ }
+ source/library/CabalGild/Unstable/Extra/LibraryName.hs view
@@ -0,0 +1,9 @@+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
@@ -0,0 +1,21 @@+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+sort x =+ Mixin.Mixin+ { 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/ModuleName.hs view
@@ -12,6 +12,13 @@ fromFilePath :: FilePath -> Maybe ModuleName.ModuleName fromFilePath = Parsec.simpleParsec . List.intercalate "." . FilePath.splitDirectories +toCaseFold :: ModuleName.ModuleName -> ModuleName.ModuleName+toCaseFold =+ ModuleName.fromString+ . List.intercalate "."+ . fmap String.toCaseFold+ . ModuleName.components+ -- | Converts a 'ModuleName.ModuleName' into a 'Fields.FieldLine'. toFieldLine :: a -> ModuleName.ModuleName -> Fields.FieldLine a toFieldLine a = Fields.FieldLine a . String.toUtf8 . Pretty.prettyShow
+ source/library/CabalGild/Unstable/Extra/ModuleRenaming.hs view
@@ -0,0 +1,12 @@+module CabalGild.Unstable.Extra.ModuleRenaming where++import qualified CabalGild.Unstable.Extra.ModuleName as ModuleName+import qualified Data.Bifunctor as Bifunctor+import qualified Data.List as List+import qualified Distribution.Types.ModuleRenaming as ModuleRenaming++sort :: ModuleRenaming.ModuleRenaming -> ModuleRenaming.ModuleRenaming+sort x = case x of+ ModuleRenaming.DefaultRenaming -> ModuleRenaming.DefaultRenaming+ ModuleRenaming.HidingRenaming ys -> ModuleRenaming.HidingRenaming $ List.sortOn ModuleName.toCaseFold ys+ ModuleRenaming.ModuleRenaming ys -> ModuleRenaming.ModuleRenaming $ List.sortOn (Bifunctor.bimap ModuleName.toCaseFold ModuleName.toCaseFold) ys
+ source/library/CabalGild/Unstable/Extra/PackageName.hs view
@@ -0,0 +1,10 @@+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/Extra/String.hs view
@@ -4,6 +4,9 @@ import qualified Data.Text as Text import qualified Data.Text.Encoding as Encoding +toCaseFold :: String -> String+toCaseFold = Text.unpack . Text.toCaseFold . Text.pack+ -- | Converts the given 'String' into a UTF-8 encoded 'ByteString.ByteString'. toUtf8 :: String -> ByteString.ByteString toUtf8 = Encoding.encodeUtf8 . Text.pack
+ source/library/CabalGild/Unstable/Extra/UnqualComponentName.hs view
@@ -0,0 +1,10 @@+module CabalGild.Unstable.Extra.UnqualComponentName where++import qualified CabalGild.Unstable.Extra.String as String+import qualified Distribution.Types.UnqualComponentName as UnqualComponentName++toCaseFold :: UnqualComponentName.UnqualComponentName -> UnqualComponentName.UnqualComponentName+toCaseFold =+ UnqualComponentName.mkUnqualComponentName+ . String.toCaseFold+ . UnqualComponentName.unUnqualComponentName
source/library/CabalGild/Unstable/Type/Dependency.hs view
@@ -2,6 +2,7 @@ module CabalGild.Unstable.Type.Dependency where +import qualified CabalGild.Unstable.Extra.UnqualComponentName as UnqualComponentName import qualified CabalGild.Unstable.Type.VersionRange as VersionRange import qualified Control.Monad as Monad import qualified Data.List.NonEmpty as NonEmpty@@ -53,6 +54,6 @@ . PrettyPrint.punctuate PrettyPrint.comma . fmap Pretty.pretty . NonEmpty.toList- $ NonEmpty.sort ucns+ $ NonEmpty.sortOn UnqualComponentName.toCaseFold ucns ver = foldMap Pretty.pretty $ versionRange dependency in PrettyPrint.hsep [pkg <> libs, ver]
source/library/CabalGild/Unstable/Type/Extension.hs view
@@ -1,5 +1,6 @@ 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@@ -14,7 +15,8 @@ deriving (Eq, Show) instance Ord Extension where- compare = Ord.comparing Pretty.prettyShow+ compare = Ord.comparing $ \x ->+ let y = Pretty.prettyShow x in (String.toCaseFold y, y) instance Parsec.Parsec Extension where parsec = Extension <$> Parsec.parsec
source/library/CabalGild/Unstable/Type/Mixin.hs view
@@ -1,51 +1,24 @@ module CabalGild.Unstable.Type.Mixin where -import qualified Data.List as List+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.IncludeRenaming as IncludeRenaming import qualified Distribution.Types.Mixin as Mixin-import qualified Distribution.Types.ModuleRenaming as ModuleRenaming --- | This is a wrapper around 'Mixin.Mixin' that sorts the nested module names--- when parsing.+-- | This is a wrapper around 'Mixin.Mixin' that compares case insensitively+-- and sorts the nested module names when printing. newtype Mixin = Mixin { unwrap :: Mixin.Mixin } deriving (Eq, Show) instance Ord Mixin where- compare = Ord.comparing unwrap+ compare = Ord.comparing $ \x ->+ let y = unwrap x in (Mixin.toCaseFold y, y) instance Parsec.Parsec Mixin where- parsec = Mixin . sortMixin <$> Parsec.parsec+ parsec = Mixin <$> Parsec.parsec instance Pretty.Pretty Mixin where- pretty = Pretty.pretty . unwrap---- | Sorts the 'Mixin.mixinIncludeRenaming' field using 'sortIncludeRenaming'.-sortMixin :: Mixin.Mixin -> Mixin.Mixin-sortMixin x =- Mixin.Mixin- { Mixin.mixinPackageName = Mixin.mixinPackageName x,- Mixin.mixinLibraryName = Mixin.mixinLibraryName x,- Mixin.mixinIncludeRenaming = sortIncludeRenaming $ Mixin.mixinIncludeRenaming x- }---- | Sorts both 'IncludeRenaming.includeProvidesRn' and--- 'IncludeRenaming.includeRequiresRn' fields using 'sortModuleRenaming'.-sortIncludeRenaming :: IncludeRenaming.IncludeRenaming -> IncludeRenaming.IncludeRenaming-sortIncludeRenaming x =- IncludeRenaming.IncludeRenaming- { IncludeRenaming.includeProvidesRn = sortModuleRenaming $ IncludeRenaming.includeProvidesRn x,- IncludeRenaming.includeRequiresRn = sortModuleRenaming $ IncludeRenaming.includeRequiresRn x- }---- | Sorts both 'ModuleRenaming.HidingRenaming' and--- 'ModuleRenaming.ModuleRenaming' variants.-sortModuleRenaming :: ModuleRenaming.ModuleRenaming -> ModuleRenaming.ModuleRenaming-sortModuleRenaming x = case x of- ModuleRenaming.DefaultRenaming -> ModuleRenaming.DefaultRenaming- ModuleRenaming.HidingRenaming ys -> ModuleRenaming.HidingRenaming $ List.sort ys- ModuleRenaming.ModuleRenaming ys -> ModuleRenaming.ModuleRenaming $ List.sort ys+ pretty = Pretty.pretty . Mixin.sort . unwrap
source/test-suite/Main.hs view
@@ -1002,6 +1002,11 @@ "library\n default-extensions: b a" "library\n default-extensions:\n a\n b\n" + Hspec.it "sorts default-extensions case insensitively" $ do+ expectGilded+ "library\n default-extensions: B a"+ "library\n default-extensions:\n a\n B\n"+ Hspec.it "sorts known extensions by name" $ do expectGilded "library\n default-extensions: DerivingVia BlockArguments"@@ -1032,11 +1037,21 @@ "library\n other-extensions: b a" "library\n other-extensions:\n a\n b\n" + Hspec.it "sorts other-extensions case insensitively" $ do+ expectGilded+ "library\n other-extensions: B a"+ "library\n other-extensions:\n a\n B\n"+ Hspec.it "sorts extensions" $ do expectGilded "library\n extensions: b a" "library\n extensions:\n a\n b\n" + Hspec.it "sorts extensions case insensitively" $ do+ expectGilded+ "library\n extensions: B a"+ "library\n extensions:\n a\n B\n"+ Hspec.it "sorts build-depends" $ do expectGilded "library\n build-depends: q , p == 1"@@ -1057,6 +1072,11 @@ "cabal-version: 3.0\nlibrary\n build-depends: p:{b,a}" "cabal-version: 3.0\n\nlibrary\n build-depends: p:{a, b}\n" + Hspec.it "sorts sub-libraries case insensitively in build-depends" $ do+ expectGilded+ "cabal-version: 3.0\nlibrary\n build-depends: p:{B,a}"+ "cabal-version: 3.0\n\nlibrary\n build-depends: p:{a, B}\n"+ Hspec.it "removes duplicate options" $ do -- This is kind of silly because there's only one possible foreign library -- option.@@ -1184,26 +1204,56 @@ "library\n mixins: q (M, N as O), p" "library\n mixins:\n p,\n q (M, N as O)\n" + Hspec.it "sorts mixins case insensitively" $ do+ expectGilded+ "library\n mixins: B, a"+ "library\n mixins:\n a,\n B\n"++ Hspec.it "sorts mixin sub-libraries case insensitively" $ do+ expectGilded+ "cabal-version: 3.4\nlibrary\n mixins: p:B, p:a"+ "cabal-version: 3.4\n\nlibrary\n mixins:\n p:a,\n p:B,\n"+ Hspec.it "sorts hiding in mixins" $ do expectGilded "library\n mixins: p hiding (N, M)" "library\n mixins: p hiding (M, N)\n" + Hspec.it "sorts hiding in mixins case insensitively" $ do+ expectGilded+ "library\n mixins: p hiding (MB, Ma)"+ "library\n mixins: p hiding (Ma, MB)\n"+ Hspec.it "sorts modules in mixins" $ do expectGilded "library\n mixins: p (N, M)" "library\n mixins: p (M, N)\n" + Hspec.it "sorts modules in mixins case insensitively" $ do+ expectGilded+ "library\n mixins: p (MB, Ma)"+ "library\n mixins: p (Ma, MB)\n"+ Hspec.it "sorts hiding in mixins requires" $ do expectGilded "library\n mixins: p requires hiding (N, M)" "library\n mixins: p requires hiding (M, N)\n" + Hspec.it "sorts hiding in mixins requires case insensitively" $ do+ expectGilded+ "library\n mixins: p requires hiding (MB, Ma)"+ "library\n mixins: p requires hiding (Ma, MB)\n"+ Hspec.it "sorts modules in mixins requires" $ do expectGilded "library\n mixins: p requires (N, M)" "library\n mixins: p requires (M, N)\n" + Hspec.it "sorts modules in mixins requires case insensitively" $ do+ expectGilded+ "library\n mixins: p requires (MB, Ma)"+ "library\n mixins: p requires (Ma, MB)\n"+ Hspec.it "does not sort ghc-options" $ do expectGilded "library\n ghc-options: b a"@@ -1243,6 +1293,11 @@ expectGilded "cabal-version: 3.0\ncustom-setup\n setup-depends: p:{b,a}" "cabal-version: 3.0\n\ncustom-setup\n setup-depends: p:{a, b}\n"++ Hspec.it "sorts sub-libraries case insensitively in setup-depends" $ do+ expectGilded+ "cabal-version: 3.0\ncustom-setup\n setup-depends: p:{B,a}"+ "cabal-version: 3.0\n\ncustom-setup\n setup-depends: p:{a, B}\n" Hspec.it "discovers an exposed module" $ do expectDiscover