cabal-file-th 0.2.3 → 0.2.4
raw patch · 4 files changed
+44/−13 lines, 4 filesdep +prettydep ~Cabaldep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: pretty
Dependency ranges changed: Cabal, base
API changes (from Hackage documentation)
- Distribution.PackageDescription.TH: author :: PackageDescription -> String
- Distribution.PackageDescription.TH: benchmarks :: PackageDescription -> [Benchmark]
- Distribution.PackageDescription.TH: bugReports :: PackageDescription -> String
- Distribution.PackageDescription.TH: buildDepends :: PackageDescription -> [Dependency]
- Distribution.PackageDescription.TH: buildType :: PackageDescription -> Maybe BuildType
- Distribution.PackageDescription.TH: category :: PackageDescription -> String
- Distribution.PackageDescription.TH: copyright :: PackageDescription -> String
- Distribution.PackageDescription.TH: customFieldsPD :: PackageDescription -> [(String, String)]
- Distribution.PackageDescription.TH: dataDir :: PackageDescription -> FilePath
- Distribution.PackageDescription.TH: dataFiles :: PackageDescription -> [FilePath]
- Distribution.PackageDescription.TH: description :: PackageDescription -> String
- Distribution.PackageDescription.TH: executables :: PackageDescription -> [Executable]
- Distribution.PackageDescription.TH: extraSrcFiles :: PackageDescription -> [FilePath]
- Distribution.PackageDescription.TH: extraTmpFiles :: PackageDescription -> [FilePath]
- Distribution.PackageDescription.TH: homepage :: PackageDescription -> String
- Distribution.PackageDescription.TH: library :: PackageDescription -> Maybe Library
- Distribution.PackageDescription.TH: license :: PackageDescription -> License
- Distribution.PackageDescription.TH: licenseFile :: PackageDescription -> FilePath
- Distribution.PackageDescription.TH: maintainer :: PackageDescription -> String
- Distribution.PackageDescription.TH: package :: PackageDescription -> PackageIdentifier
- Distribution.PackageDescription.TH: pkgName :: PackageIdentifier -> PackageName
- Distribution.PackageDescription.TH: pkgUrl :: PackageDescription -> String
- Distribution.PackageDescription.TH: pkgVersion :: PackageIdentifier -> Version
- Distribution.PackageDescription.TH: sourceRepos :: PackageDescription -> [SourceRepo]
- Distribution.PackageDescription.TH: specVersionRaw :: PackageDescription -> Either Version VersionRange
- Distribution.PackageDescription.TH: stability :: PackageDescription -> String
- Distribution.PackageDescription.TH: synopsis :: PackageDescription -> String
- Distribution.PackageDescription.TH: testSuites :: PackageDescription -> [TestSuite]
- Distribution.PackageDescription.TH: testedWith :: PackageDescription -> [(CompilerFlavor, VersionRange)]
- Distribution.PackageDescription.TH: versionBranch :: Version -> [Int]
- Distribution.PackageDescription.TH: versionTags :: Version -> [String]
+ Distribution.PackageDescription.TH: [author] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [benchmarks] :: PackageDescription -> [Benchmark]
+ Distribution.PackageDescription.TH: [bugReports] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [buildDepends] :: PackageDescription -> [Dependency]
+ Distribution.PackageDescription.TH: [buildType] :: PackageDescription -> Maybe BuildType
+ Distribution.PackageDescription.TH: [category] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [copyright] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [customFieldsPD] :: PackageDescription -> [(String, String)]
+ Distribution.PackageDescription.TH: [dataDir] :: PackageDescription -> FilePath
+ Distribution.PackageDescription.TH: [dataFiles] :: PackageDescription -> [FilePath]
+ Distribution.PackageDescription.TH: [description] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [executables] :: PackageDescription -> [Executable]
+ Distribution.PackageDescription.TH: [extraDocFiles] :: PackageDescription -> [FilePath]
+ Distribution.PackageDescription.TH: [extraSrcFiles] :: PackageDescription -> [FilePath]
+ Distribution.PackageDescription.TH: [extraTmpFiles] :: PackageDescription -> [FilePath]
+ Distribution.PackageDescription.TH: [homepage] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [library] :: PackageDescription -> Maybe Library
+ Distribution.PackageDescription.TH: [licenseFiles] :: PackageDescription -> [FilePath]
+ Distribution.PackageDescription.TH: [license] :: PackageDescription -> License
+ Distribution.PackageDescription.TH: [maintainer] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [package] :: PackageDescription -> PackageIdentifier
+ Distribution.PackageDescription.TH: [pkgName] :: PackageIdentifier -> PackageName
+ Distribution.PackageDescription.TH: [pkgUrl] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [pkgVersion] :: PackageIdentifier -> Version
+ Distribution.PackageDescription.TH: [setupBuildInfo] :: PackageDescription -> Maybe SetupBuildInfo
+ Distribution.PackageDescription.TH: [sourceRepos] :: PackageDescription -> [SourceRepo]
+ Distribution.PackageDescription.TH: [specVersionRaw] :: PackageDescription -> Either Version VersionRange
+ Distribution.PackageDescription.TH: [stability] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [synopsis] :: PackageDescription -> String
+ Distribution.PackageDescription.TH: [testSuites] :: PackageDescription -> [TestSuite]
+ Distribution.PackageDescription.TH: [testedWith] :: PackageDescription -> [(CompilerFlavor, VersionRange)]
+ Distribution.PackageDescription.TH: [versionBranch] :: Version -> [Int]
+ Distribution.PackageDescription.TH: [versionTags] :: Version -> [String]
+ Distribution.PackageDescription.TH: instance Distribution.Text.Text Distribution.PackageDescription.TH.DocString
+ Distribution.PackageDescription.TH: packageString :: String -> DocString
- Distribution.PackageDescription.TH: PackageDescription :: PackageIdentifier -> License -> FilePath -> String -> String -> String -> String -> [(CompilerFlavor, VersionRange)] -> String -> String -> String -> [SourceRepo] -> String -> String -> String -> [(String, String)] -> [Dependency] -> Either Version VersionRange -> Maybe BuildType -> Maybe Library -> [Executable] -> [TestSuite] -> [Benchmark] -> [FilePath] -> FilePath -> [FilePath] -> [FilePath] -> PackageDescription
+ Distribution.PackageDescription.TH: PackageDescription :: PackageIdentifier -> License -> [FilePath] -> String -> String -> String -> String -> [(CompilerFlavor, VersionRange)] -> String -> String -> String -> [SourceRepo] -> String -> String -> String -> [(String, String)] -> [Dependency] -> Either Version VersionRange -> Maybe BuildType -> Maybe SetupBuildInfo -> Maybe Library -> [Executable] -> [TestSuite] -> [Benchmark] -> [FilePath] -> FilePath -> [FilePath] -> [FilePath] -> [FilePath] -> PackageDescription
Files
- Distribution/PackageDescription/TH.hs +21/−3
- cabal-file-th.cabal +7/−5
- test/Test.hs +12/−4
- test/test-version-interp.cabal +4/−1
Distribution/PackageDescription/TH.hs view
@@ -7,6 +7,7 @@ -- * Template Haskell functions packageVariable, packageVariableFrom,+ packageString, -- * Cabal file data structures -- | The data structures for the cabal file are re-exported here for ease of use. PackageDescription(..),@@ -18,13 +19,27 @@ import Distribution.Package import Distribution.Version -import Distribution.Text (Text, display)+import Distribution.Text+import Distribution.Compat.ReadP import Distribution.Verbosity (silent)+import Text.PrettyPrint import Distribution.PackageDescription.Parse (readPackageDescription) import System.Directory (getCurrentDirectory, getDirectoryContents) import Data.List (isSuffixOf) import Language.Haskell.TH (Q, Exp, stringE, runIO) +newtype DocString = DocString String++instance Text DocString where+ parse = DocString <$> (readS_to_P read)+ disp (DocString s) = text s++-- | Provides a Text instance for String, allowing text fields to be used+-- in `packageVariable`. Use it composed with an accessor, eg.+-- packageVariable (packageString . copyright)+packageString :: String -> DocString+packageString = DocString+ -- | Renders the package variable specified by the function. -- The cabal file interrogated is the first one that is found -- in the current working directory.@@ -38,8 +53,11 @@ ------ renderField :: Text b => IO a -> (a -> b) -> Q Exp-renderField pd f = runIO pd >>= stringE . display . f +renderField pd f = renderFieldS pd (display . f) +renderFieldS :: IO a -> (a -> String) -> Q Exp+renderFieldS pd f = runIO pd >>= stringE . f+ currentPackageDescription :: IO PackageDescription currentPackageDescription = fmap packageDescription $ do dir <- getCurrentDirectory@@ -59,7 +77,7 @@ * Get this module name, use TH.location and loc_module. Parse each cabal file in the cwd and look for references to this module in each thing.- + -}
cabal-file-th.cabal view
@@ -1,5 +1,5 @@ Name: cabal-file-th-Version: 0.2.3+Version: 0.2.4 Synopsis: Template Haskell expressions for reading fields from a project's cabal file. Description: Template Haskell expressions for reading fields from a project's cabal file. Homepage: http://github.com/nkpart/cabal-file-th@@ -20,15 +20,17 @@ Library Exposed-modules: Distribution.PackageDescription.TH Build-depends: base >= 4 && < 5,- Cabal >= 1.10 && < 1.17,+ Cabal >= 1.10, directory,- template-haskell- Ghc-options: -Wall+ template-haskell,+ pretty+ Ghc-options: -Wall Test-suite test+ Ghc-options: -Wall Main-is: Test.hs Hs-source-dirs: test Type: exitcode-stdio-1.0 Build-depends: base >= 4 && < 5,- cabal-file-th+ cabal-file-th, Cabal
test/Test.hs view
@@ -2,11 +2,19 @@ module Main where import Distribution.PackageDescription.TH+import Control.Monad (when) +main :: IO () main = do+ let simpleAssert msg a b =+ when (a /= b) $+ error (msg ++ ": expected " ++ b ++ ", read: " ++ a)+ putStrLn $ "This package is version " ++ $(packageVariable (pkgVersion . package)) let testVersion = $(packageVariableFrom "test/test-version-interp.cabal" (pkgVersion . package))- let expectedVersion = "5.5.5"- if testVersion /= expectedVersion- then error ("Expected " ++ expectedVersion ++ ", read: " ++ testVersion)- else putStrLn "Everything went better than expected."+ testCopyright = $(packageVariableFrom "test/test-version-interp.cabal" (packageString . copyright))+ simpleAssert "version" testVersion "5.5.5"+ simpleAssert "copyright" testCopyright "(c) 1953 Gumby"++ putStrLn "Everything went better than expected."+
test/test-version-interp.cabal view
@@ -1,9 +1,12 @@ Name: test-version-interp Version: 5.5.5 License: BSD3-License-file: LICENSE Build-type: Simple Cabal-version: >=1.2 +copyright: (c) 1953 Gumby+ Library Exposed-modules: Test+ build-depends: base, cabal-file-th+