packages feed

cabal-gild 1.0.2.1 → 1.0.2.2

raw patch · 5 files changed

+68/−6 lines, 5 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ CabalGild.Type.Extension: Extension :: Extension -> Extension
+ CabalGild.Type.Extension: [unwrap] :: Extension -> Extension
+ CabalGild.Type.Extension: instance Distribution.Parsec.Parsec CabalGild.Type.Extension.Extension
+ CabalGild.Type.Extension: instance Distribution.Pretty.Pretty CabalGild.Type.Extension.Extension
+ CabalGild.Type.Extension: instance GHC.Classes.Eq CabalGild.Type.Extension.Extension
+ CabalGild.Type.Extension: instance GHC.Classes.Ord CabalGild.Type.Extension.Extension
+ CabalGild.Type.Extension: instance GHC.Show.Show CabalGild.Type.Extension.Extension
+ CabalGild.Type.Extension: isDisable :: Extension -> Bool
+ CabalGild.Type.Extension: newtype Extension

Files

README.md view
@@ -11,10 +11,6 @@  [the pragmas section]: #pragmas -To run Gild in CI, consider using [cabal-gild-setup-action][].--[cabal-gild-setup-action]: https://github.com/tfausak/cabal-gild-setup-action- Gild started as a fork of [phadej/cabal-fmt][], but is now totally separate. For a brief summary of the differences between Gild and `cabal-fmt`, read [the announcement post][].@@ -96,6 +92,10 @@ Go to [the latest release page][] and download the binary for your platform.  [the latest release page]: https://github.com/tfausak/cabal-gild/releases/latest++To run Gild in a GitHub Actions workflow, consider using [cabal-gild-setup-action][].++[cabal-gild-setup-action]: https://github.com/marketplace/actions/setup-gild  ### From Source 
cabal-gild.cabal view
@@ -11,7 +11,7 @@ maintainer: Taylor Fausak name: cabal-gild synopsis: Formats package descriptions.-version: 1.0.2.1+version: 1.0.2.2  source-repository head   type: git@@ -102,6 +102,7 @@     CabalGild.Type.Config     CabalGild.Type.Dependency     CabalGild.Type.ExeDependency+    CabalGild.Type.Extension     CabalGild.Type.Flag     CabalGild.Type.ForeignLibOption     CabalGild.Type.Language
source/library/CabalGild/Action/FormatFields.hs view
@@ -7,6 +7,7 @@ import qualified CabalGild.Extra.String as String import qualified CabalGild.Type.Dependency as Dependency import qualified CabalGild.Type.ExeDependency as ExeDependency+import qualified CabalGild.Type.Extension as Extension import qualified CabalGild.Type.ForeignLibOption as ForeignLibOption import qualified CabalGild.Type.Language as Language import qualified CabalGild.Type.LegacyExeDependency as LegacyExeDependency@@ -22,7 +23,6 @@ import qualified Distribution.ModuleName as ModuleName import qualified Distribution.Parsec as Parsec import qualified Distribution.Types.Mixin as Mixin-import qualified Language.Haskell.Extension as Extension import qualified Text.PrettyPrint as PrettyPrint  -- | A wrapper around 'field' to allow this to be composed with other actions.
+ source/library/CabalGild/Type/Extension.hs view
@@ -0,0 +1,36 @@+module CabalGild.Type.Extension where++import qualified Data.Char as Char+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 with "enable"+-- extensions before "disable" ones.+newtype Extension = Extension+  { unwrap :: Extension.Extension+  }+  deriving (Eq, Show)++instance Ord Extension where+  compare = Ord.comparing $ \e -> (isDisable $ unwrap e, Pretty.prettyShow e)++instance Parsec.Parsec Extension where+  parsec = Extension <$> Parsec.parsec++instance Pretty.Pretty Extension where+  pretty = Pretty.pretty . unwrap++-- | Returns 'True' if the given extension is either a+-- 'Extension.DisableExtension' or it's an 'Extension.UnknownExtension' that+-- starts with @"No"@ followed by an uppercase letter.+isDisable :: Extension.Extension -> Bool+isDisable e = case e of+  Extension.EnableExtension _ -> False+  Extension.DisableExtension _ -> True+  Extension.UnknownExtension s -> case s of+    'N' : 'o' : c : _ -> Char.isUpper c+    _ -> False
source/test-suite/Main.hs view
@@ -563,6 +563,31 @@       "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"+      "library\n  default-extensions:\n    BlockArguments\n    DerivingVia\n"++  Hspec.it "sorts disabling extensions after enabling ones" $ do+    expectGilded+      "library\n default-extensions: NoStrictData StrictData"+      "library\n  default-extensions:\n    StrictData\n    NoStrictData\n"++  Hspec.it "sorts unknown extensions with known ones" $ do+    expectGilded+      "library\n default-extensions: LambdaCase Imaginary"+      "library\n  default-extensions:\n    Imaginary\n    LambdaCase\n"++  Hspec.it "sorts unknown disabling extensions with known ones" $ do+    expectGilded+      "library\n default-extensions: NoLambdaCase NoImaginary"+      "library\n  default-extensions:\n    NoImaginary\n    NoLambdaCase\n"++  Hspec.it "sorts extensions (issue 29)" $ do+    expectGilded+      "library\n default-extensions: Arrows Imaginary1 NoCPP NoImaginary2 NoUnboxedTuples UnicodeSyntax"+      "library\n  default-extensions:\n    Arrows\n    Imaginary1\n    UnicodeSyntax\n    NoCPP\n    NoImaginary2\n    NoUnboxedTuples\n"+   Hspec.it "sorts other-extensions" $ do     expectGilded       "library\n other-extensions: b a"