packages feed

cabal-gild 1.0.2.3 → 1.0.2.4

raw patch · 4 files changed

+44/−7 lines, 4 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ CabalGild.Extra.Name: annotationLens :: Lens' (Name a) a

Files

cabal-gild.cabal view
@@ -11,7 +11,7 @@ maintainer: Taylor Fausak name: cabal-gild synopsis: Formats package descriptions.-version: 1.0.2.3+version: 1.0.2.4  source-repository head   type: git
source/library/CabalGild/Action/EvaluatePragmas.hs view
@@ -1,6 +1,7 @@ module CabalGild.Action.EvaluatePragmas where  import qualified CabalGild.Class.MonadWalk as MonadWalk+import qualified CabalGild.Extra.FieldLine as FieldLine import qualified CabalGild.Extra.ModuleName as ModuleName import qualified CabalGild.Extra.Name as Name import qualified CabalGild.Extra.String as String@@ -12,6 +13,7 @@ import qualified Data.List.NonEmpty as NonEmpty import qualified Data.Maybe as Maybe import qualified Data.Set as Set+import qualified Distribution.Compat.Lens as Lens import qualified Distribution.Fields as Fields import qualified Distribution.ModuleName as ModuleName import qualified Distribution.Parsec as Parsec@@ -39,7 +41,7 @@   Fields.Field [Comment.Comment a] ->   m (Fields.Field [Comment.Comment a]) field p f = case f of-  Fields.Field n _ -> fmap (Maybe.fromMaybe f) . MaybeT.runMaybeT $ do+  Fields.Field n fls -> fmap (Maybe.fromMaybe f) . MaybeT.runMaybeT $ do     Monad.guard $ Set.member (Name.value n) relevantFieldNames     comment <- hoistMaybe . Utils.safeLast $ Name.annotation n     pragma <- hoistMaybe . Parsec.simpleParsecBS $ Comment.value comment@@ -52,11 +54,17 @@                 . FilePath.combine root                 <$> NonEmpty.toList ds         files <- Trans.lift . fmap mconcat $ traverse MonadWalk.walk directories-        pure-          . Fields.Field n-          . fmap (ModuleName.toFieldLine [])-          . Maybe.mapMaybe (toModuleName directories)-          $ Maybe.mapMaybe (stripAnyExtension extensions) files+        let comments = concatMap FieldLine.annotation fls+            fieldLines =+              zipWith ModuleName.toFieldLine (comments : repeat [])+                . Maybe.mapMaybe (toModuleName directories)+                $ Maybe.mapMaybe (stripAnyExtension extensions) files+            -- This isn't great, but the comments have to go /somewhere/.+            name =+              if null fieldLines+                then Lens.over Name.annotationLens (comments <>) n+                else n+        pure $ Fields.Field name fieldLines   Fields.Section n sas fs -> Fields.Section n sas <$> traverse (field p) fs  -- | These are the names of the fields that can have this action applied to
source/library/CabalGild/Extra/Name.hs view
@@ -1,10 +1,15 @@ module CabalGild.Extra.Name where +import qualified Distribution.Compat.Lens as Lens import qualified Distribution.Fields as Fields  -- | Extracts the annotation from the given 'Fields.Name'. annotation :: Fields.Name a -> a annotation (Fields.Name x _) = x++-- | A lens for the 'annotation'.+annotationLens :: Lens.Lens' (Fields.Name a) a+annotationLens f s = fmap (\a -> Fields.Name a $ value s) . f $ annotation s  -- | Extracts the value from the given 'Fields.Name'. value :: Fields.Name a -> Fields.FieldName
source/test-suite/Main.hs view
@@ -799,6 +799,12 @@       "library\n -- cabal-gild: discover .\n exposed-modules:"       "library\n  -- cabal-gild: discover .\n  exposed-modules:\n    M\n    N\n" +  Hspec.it "discovers no modules" $ do+    expectDiscover+      [(".", [])]+      "library\n -- cabal-gild: discover .\n exposed-modules:"+      "library\n  -- cabal-gild: discover .\n  exposed-modules:\n"+   Hspec.it "discovers a .lhs file" $ do     expectDiscover       [(".", ["M.lhs"])]@@ -885,6 +891,24 @@       [("d", ["M.hs"]), ("e", ["N.hs"])]       "library\n -- cabal-gild: discover d e\n exposed-modules:"       "library\n  -- cabal-gild: discover d e\n  exposed-modules:\n    M\n    N\n"++  Hspec.it "retains comments when discovering" $ do+    expectDiscover+      [(".", ["M.hs"])]+      "library\n -- cabal-gild: discover .\n exposed-modules:\n  -- c\n  N"+      "library\n  -- cabal-gild: discover .\n  exposed-modules:\n    -- c\n    M\n"++  Hspec.it "concatenates comments when discovering" $ do+    expectDiscover+      [(".", ["M.hs"])]+      "library\n -- cabal-gild: discover .\n exposed-modules:\n  -- c\n  N\n  -- d\n  O"+      "library\n  -- cabal-gild: discover .\n  exposed-modules:\n    -- c\n    -- d\n    M\n"++  Hspec.it "retains comments even when no modules are discovered" $ do+    expectDiscover+      [(".", [])]+      "library\n -- cabal-gild: discover .\n exposed-modules:\n  -- c\n  N"+      "library\n  -- c\n  -- cabal-gild: discover .\n  exposed-modules:\n"    Hspec.it "parses an empty brace section" $ do     expectGilded