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 +23/−0
- cabal-fmt.cabal +1/−1
- fixtures/sublib.cabal +23/−0
- fixtures/sublib.format +22/−0
- fixtures/with-sublibs.format +11/−5
- src/CabalFmt/Fields/BuildDepends.hs +29/−12
- tests/golden.hs +3/−0
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