Some docs in CabalConfig.hs
This commit is contained in:
parent
a61728bc5a
commit
b13465b588
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user