packages feed

cabal-fmt 0.1.10 → 0.1.11

raw patch · 7 files changed

+112/−18 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

Changelog.md view
@@ -1,3 +1,26 @@+# 0.1.11++- Change how dependencies on (multiple) sublibraries are output:+  Always print each sublibrary on individual line,+  with the first one having the version range.++  ```cabal+  build-depends:+    ...+    , megalib              >=0.1 && <0.2+    , megalib:sublib-a+    , megalib:sublib-b+    , megalib:sublib-c+  ```++  instead of previous++  ```+  build-depends:+    ...+    , megalib:{megalib, sublib-a, sublib-b, sublib-c} >=0.1 && <0.2+  ```+ # 0.1.10  - Fix removal of empty lines in free text fields (like `description`)
cabal-fmt.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.2 name:               cabal-fmt-version:            0.1.10+version:            0.1.11 synopsis:           Format .cabal files category:           Development description:
+ fixtures/sublib.cabal view
@@ -0,0 +1,23 @@+cabal-version:      3.0+name:               sublib+version:            0++library+  default-language: Haskell2010+  hs-source-dirs:   src++  -- the anotherlib case tests case insensitivity.+  build-depends:+      base        >=4.3   && <4.18+    , megalib+    , megalib:sublib-a >=0.1+    , megalib:sublib-b <0.3+    , megalib:sublib-c <0.2++    , anotherlib:sublib-B <0.3+    , anotherlib:sublib-a >=0.1+    , anotherlib:sublib-C <0.2++  exposed-modules:+    Data.ExampleA+    Data.ExampleB
+ fixtures/sublib.format view
@@ -0,0 +1,22 @@+cabal-version: 3.0+name:          sublib+version:       0++library+  default-language: Haskell2010+  hs-source-dirs:   src++  -- the anotherlib case tests case insensitivity.+  build-depends:+    , anotherlib:sublib-a  >=0.1 && <0.2+    , anotherlib:sublib-B+    , anotherlib:sublib-C+    , base                 >=4.3 && <4.18+    , megalib              >=0.1 && <0.2+    , megalib:sublib-a+    , megalib:sublib-b+    , megalib:sublib-c++  exposed-modules:+    Data.ExampleA+    Data.ExampleB
fixtures/with-sublibs.format view
@@ -1,4 +1,3 @@-Up to date cabal-version: 3.0 name:          with-sublibs version:       1@@ -7,14 +6,21 @@   hs-source-dirs:   src   default-language: Haskell2010   build-depends:-    , test1:{test1, sub}-    , test2:{test2, sub}  >=2 && <3+    , test1+    , test1:sub+    , test2      >=2 && <3+    , test2:sub    build-depends:    test1   build-depends:    test2 >=1   build-depends:    test2:sub   build-depends:    test2:sub-  build-depends:    test2:{sub1, sub2}+  build-depends:+    , test2:sub1+    , test2:sub2+   build-depends:    test2:sub >=1 && <3   build-depends:    test2:sub >=2 && <3-  build-depends:    test2:{sub1, sub2} >=3 && <4+  build-depends:+    , test2:sub1  >=3 && <4+    , test2:sub2
src/CabalFmt/Fields/BuildDepends.hs view
@@ -11,20 +11,22 @@  import Data.List (dropWhileEnd) +import           CabalFmt.Fields+import           CabalFmt.Options+import           CabalFmt.Prelude import qualified Distribution.CabalSpecVersion    as C+import qualified Distribution.Compat.NonEmptySet  as NES import qualified Distribution.FieldGrammar        as C import qualified Distribution.Parsec              as C import qualified Distribution.Pretty              as C import qualified Distribution.Types.Dependency    as C import qualified Distribution.Types.DependencyMap as C import qualified Distribution.Types.ExeDependency as C+import qualified Distribution.Types.LibraryName   as C import qualified Distribution.Types.VersionRange  as C import qualified Text.PrettyPrint                 as PP--import CabalFmt.Fields-import CabalFmt.Options-import CabalFmt.Prelude-import VersionInterval  (normaliseVersionRange, ConversionProblem (..))+import           VersionInterval+                 (ConversionProblem (..), normaliseVersionRange)  setupDependsF :: Options -> FieldDescrs () () setupDependsF opts = singletonF "setup-depends" (pretty opts) parse@@ -48,7 +50,7 @@     fromConversionProblem OtherConversionProblem = vr  pretty :: Options -> [C.Dependency] -> PP.Doc-pretty opts deps = case deps of+pretty opts deps = case deps' of     []    -> PP.empty     [dep] -> PP.text (prettyDepNoVersion dep) PP.<+> prettyVR vr'       where@@ -58,18 +60,33 @@                     | vr == C.noVersion  = PP.text "<0"                     | otherwise          = C.pretty vr -    _ -> prettyMany opts deps'+    _ -> prettyMany opts deps''       where-        deps' :: [(String, C.VersionRange)]-        deps' = sortOn (map toLower . fst)-              $ map (prettyDepNoVersion &&& C.depVerRange)-              $ C.fromDepMap . C.toDepMap -- this combines duplicate packages-              $ deps+        deps'' :: [(String, C.VersionRange)]+        deps'' =+            sortOn (map toLower . fst) $+            map (prettyDepNoVersion &&& C.depVerRange) deps'     where+      -- combined and expanded dependencies+      deps' :: [C.Dependency]+      deps' = concatMap expandDep $ C.fromDepMap $ C.toDepMap deps+       prettyDepNoVersion :: C.Dependency -> String       prettyDepNoVersion (C.Dependency pkg _ libs) =         C.prettyShow (C.Dependency pkg C.anyVersion libs) +      expandDep :: C.Dependency -> [C.Dependency]+      expandDep (C.Dependency pkg vr libs) = makeDep $ sortOn f (NES.toList libs)+        where+          f C.LMainLibName    = Nothing+          f (C.LSubLibName n) = Just (map toLower (C.prettyShow n))++          -- attach version range to the first dependency of the group.+          makeDep :: [C.LibraryName] -> [C.Dependency]+          makeDep []         = []+          makeDep (ln : lns) =+              C.Dependency pkg vr (NES.singleton ln) :+              map (\ln' -> C.Dependency pkg C.anyVersion (NES.singleton ln')) lns  prettyExe :: Options -> [C.ExeDependency] -> PP.Doc prettyExe opts deps = case deps of
tests/golden.hs view
@@ -33,6 +33,9 @@      , goldenTest' "issue69"     , goldenTest' "issue29"++    , goldenTest' "sublib"+    , goldenTest' "with-sublibs"     ]  goldenTest' :: String -> TestTree