Some docs in CabalConfig.hs

This commit is contained in:
Daniel Gröber 2014-08-11 23:45:33 +02:00
parent a61728bc5a
commit b13465b588

View File

@ -1,6 +1,7 @@
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
-- | Reading cabal @dist/setup-config@ -- | This module facilitates extracting information from Cabal's on-disk
-- 'LocalBuildInfo' (@dist/setup-config@).
module Language.Haskell.GhcMod.CabalConfig ( module Language.Haskell.GhcMod.CabalConfig (
CabalConfig CabalConfig
, cabalConfigDependencies , cabalConfigDependencies
@ -37,10 +38,12 @@ import Distribution.Simple.LocalBuildInfo (ComponentName)
import System.FilePath ((</>)) import System.FilePath ((</>))
---------------------------------------------------------------- ----------------------------------------------------------------
-- | 'Show'ed cabal 'LocalBuildInfo' string
type CabalConfig = String type CabalConfig = String
-- | Get file containing 'LocalBuildInfo' data. If it doesn't exist run @cabal -- | Get contents of the file containing 'LocalBuildInfo' data. If it doesn't
-- configure@ i.e. configure with default options like @cabal build@ would do. -- exist run @cabal configure@ i.e. configure with default options like @cabal
-- build@ would do.
getConfig :: Cradle -> IO CabalConfig getConfig :: Cradle -> IO CabalConfig
getConfig cradle = getConfig cradle =
readFile path `E.catch` (\(E.SomeException _) -> configure >> readFile path) readFile path `E.catch` (\(E.SomeException _) -> configure >> readFile path)
@ -55,10 +58,12 @@ getConfig cradle =
configPath :: FilePath configPath :: FilePath
configPath = localBuildInfoFile defaultDistPref configPath = localBuildInfoFile defaultDistPref
-- | Get list of 'Package's needed by all components of the current package
cabalConfigDependencies :: Cradle -> PackageIdentifier -> IO [Package] cabalConfigDependencies :: Cradle -> PackageIdentifier -> IO [Package]
cabalConfigDependencies cradle thisPkg = cabalConfigDependencies cradle thisPkg =
configDependencies thisPkg <$> getConfig cradle configDependencies thisPkg <$> getConfig cradle
-- | Extract list of depencenies for all components from 'CabalConfig'
configDependencies :: PackageIdentifier -> CabalConfig -> [Package] configDependencies :: PackageIdentifier -> CabalConfig -> [Package]
configDependencies thisPkg config = map fromInstalledPackageId deps configDependencies thisPkg config = map fromInstalledPackageId deps
where where
@ -116,6 +121,8 @@ configDependencies thisPkg config = map fromInstalledPackageId deps
Right x -> x Right x -> x
Left msg -> error $ "reading config " ++ f ++ " failed ("++msg++")" Left msg -> error $ "reading config " ++ f ++ " failed ("++msg++")"
-- | Find @field@ in 'CabalConfig'. Returns 'Left' containing a user readable
-- error message with lots of context on failure.
extractField :: CabalConfig -> String -> Either String String extractField :: CabalConfig -> String -> Either String String
extractField config field = extractField config field =
case extractParens <$> find (field `isPrefixOf`) (tails config) of case extractParens <$> find (field `isPrefixOf`) (tails config) of