Fix custom package-db stack for non Cabal projects
This commit is contained in:
parent
2b7249e445
commit
5713fd9908
@ -21,7 +21,6 @@ module Language.Haskell.GhcMod.CabalHelper
|
|||||||
, getGhcMergedPkgOptions
|
, getGhcMergedPkgOptions
|
||||||
, getCabalPackageDbStack
|
, getCabalPackageDbStack
|
||||||
, getStackPackageDbStack
|
, getStackPackageDbStack
|
||||||
, getCustomPkgDbStack
|
|
||||||
, prepareCabalHelper
|
, prepareCabalHelper
|
||||||
)
|
)
|
||||||
#endif
|
#endif
|
||||||
@ -43,6 +42,7 @@ import Language.Haskell.GhcMod.Utils
|
|||||||
import Language.Haskell.GhcMod.PathsAndFiles
|
import Language.Haskell.GhcMod.PathsAndFiles
|
||||||
import Language.Haskell.GhcMod.Logging
|
import Language.Haskell.GhcMod.Logging
|
||||||
import Language.Haskell.GhcMod.Output
|
import Language.Haskell.GhcMod.Output
|
||||||
|
import Language.Haskell.GhcMod.CustomPackageDb
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.Directory (findExecutable)
|
import System.Directory (findExecutable)
|
||||||
import System.Process
|
import System.Process
|
||||||
@ -139,18 +139,6 @@ prepareCabalHelper = do
|
|||||||
when (cradleProjectType crdl == CabalProject || cradleProjectType crdl == StackProject) $
|
when (cradleProjectType crdl == CabalProject || cradleProjectType crdl == StackProject) $
|
||||||
withCabal $ liftIO $ prepare readProc projdir distdir
|
withCabal $ liftIO $ prepare readProc projdir distdir
|
||||||
|
|
||||||
parseCustomPackageDb :: String -> [GhcPkgDb]
|
|
||||||
parseCustomPackageDb src = map parsePkgDb $ filter (not . null) $ lines src
|
|
||||||
where
|
|
||||||
parsePkgDb "global" = GlobalDb
|
|
||||||
parsePkgDb "user" = UserDb
|
|
||||||
parsePkgDb s = PackageDb s
|
|
||||||
|
|
||||||
getCustomPkgDbStack :: (IOish m, GmEnv m) => m (Maybe [GhcPkgDb])
|
|
||||||
getCustomPkgDbStack = do
|
|
||||||
mCusPkgDbFile <- liftIO . (traverse readFile <=< findCustomPackageDbFile) . cradleRootDir =<< cradle
|
|
||||||
return $ parseCustomPackageDb <$> mCusPkgDbFile
|
|
||||||
|
|
||||||
getStackPackageDbStack :: IOish m => m [GhcPkgDb]
|
getStackPackageDbStack :: IOish m => m [GhcPkgDb]
|
||||||
getStackPackageDbStack = do
|
getStackPackageDbStack = do
|
||||||
mstack <- liftIO $ findExecutable "stack"
|
mstack <- liftIO $ findExecutable "stack"
|
||||||
|
25
Language/Haskell/GhcMod/CustomPackageDb.hs
Normal file
25
Language/Haskell/GhcMod/CustomPackageDb.hs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
module Language.Haskell.GhcMod.CustomPackageDb where
|
||||||
|
|
||||||
|
|
||||||
|
import Control.Applicative
|
||||||
|
import Control.Monad
|
||||||
|
import Control.Category ((.))
|
||||||
|
import Data.Maybe
|
||||||
|
import Data.Traversable
|
||||||
|
import Language.Haskell.GhcMod.Types
|
||||||
|
import Language.Haskell.GhcMod.Monad.Types
|
||||||
|
import Language.Haskell.GhcMod.PathsAndFiles
|
||||||
|
import Prelude hiding ((.))
|
||||||
|
|
||||||
|
|
||||||
|
parseCustomPackageDb :: String -> [GhcPkgDb]
|
||||||
|
parseCustomPackageDb src = map parsePkgDb $ filter (not . null) $ lines src
|
||||||
|
where
|
||||||
|
parsePkgDb "global" = GlobalDb
|
||||||
|
parsePkgDb "user" = UserDb
|
||||||
|
parsePkgDb s = PackageDb s
|
||||||
|
|
||||||
|
getCustomPkgDbStack :: (IOish m, GmEnv m) => m (Maybe [GhcPkgDb])
|
||||||
|
getCustomPkgDbStack = do
|
||||||
|
mCusPkgDbFile <- liftIO . (traverse readFile <=< findCustomPackageDbFile) . cradleRootDir =<< cradle
|
||||||
|
return $ parseCustomPackageDb <$> mCusPkgDbFile
|
@ -22,6 +22,7 @@ import Language.Haskell.GhcMod.Types
|
|||||||
import Language.Haskell.GhcMod.Monad.Types
|
import Language.Haskell.GhcMod.Monad.Types
|
||||||
import Language.Haskell.GhcMod.CabalHelper
|
import Language.Haskell.GhcMod.CabalHelper
|
||||||
import Language.Haskell.GhcMod.PathsAndFiles
|
import Language.Haskell.GhcMod.PathsAndFiles
|
||||||
|
import Language.Haskell.GhcMod.CustomPackageDb
|
||||||
|
|
||||||
ghcVersion :: Int
|
ghcVersion :: Int
|
||||||
ghcVersion = read cProjectVersionInt
|
ghcVersion = read cProjectVersionInt
|
||||||
|
@ -264,8 +264,9 @@ pkgDbStackCacheFile :: FilePath -> FilePath
|
|||||||
pkgDbStackCacheFile dist =
|
pkgDbStackCacheFile dist =
|
||||||
setupConfigPath dist <.> "ghc-mod.package-db-stack"
|
setupConfigPath dist <.> "ghc-mod.package-db-stack"
|
||||||
|
|
||||||
-- | @findCustomPackageDbFile dir@. Searches for a @.ghc-mod.cradle@ file in @dir@.
|
-- | @findCustomPackageDbFile dir@. Searches for a @ghc-mod.package-db-stack@ file in @dir@.
|
||||||
-- If it exists in the given directory it is returned otherwise @findCradleFile@ returns @Nothing@
|
-- If it exists in the given directory it is returned otherwise @findCradleFile@
|
||||||
|
-- returns @Nothing@
|
||||||
findCustomPackageDbFile :: FilePath -> IO (Maybe FilePath)
|
findCustomPackageDbFile :: FilePath -> IO (Maybe FilePath)
|
||||||
findCustomPackageDbFile directory = do
|
findCustomPackageDbFile directory = do
|
||||||
let path = directory </> "ghc-mod.package-db-stack"
|
let path = directory </> "ghc-mod.package-db-stack"
|
||||||
|
@ -37,6 +37,7 @@ import Language.Haskell.GhcMod.Types
|
|||||||
import Language.Haskell.GhcMod.Utils as U
|
import Language.Haskell.GhcMod.Utils as U
|
||||||
import Language.Haskell.GhcMod.FileMapping
|
import Language.Haskell.GhcMod.FileMapping
|
||||||
import Language.Haskell.GhcMod.LightGhc
|
import Language.Haskell.GhcMod.LightGhc
|
||||||
|
import Language.Haskell.GhcMod.CustomPackageDb
|
||||||
|
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Monoid as Monoid
|
import Data.Monoid as Monoid
|
||||||
@ -270,10 +271,11 @@ packageGhcOptions = do
|
|||||||
_ -> sandboxOpts crdl
|
_ -> sandboxOpts crdl
|
||||||
|
|
||||||
-- also works for plain projects!
|
-- also works for plain projects!
|
||||||
sandboxOpts :: MonadIO m => Cradle -> m [String]
|
sandboxOpts :: (IOish m, GmEnv m) => Cradle -> m [String]
|
||||||
sandboxOpts crdl = do
|
sandboxOpts crdl = do
|
||||||
|
mCusPkgDb <- getCustomPkgDbStack
|
||||||
pkgDbStack <- liftIO $ getSandboxPackageDbStack
|
pkgDbStack <- liftIO $ getSandboxPackageDbStack
|
||||||
let pkgOpts = ghcDbStackOpts pkgDbStack
|
let pkgOpts = ghcDbStackOpts $ fromMaybe pkgDbStack mCusPkgDb
|
||||||
return $ ["-i" ++ d | d <- [wdir,rdir]] ++ pkgOpts ++ ["-Wall"]
|
return $ ["-i" ++ d | d <- [wdir,rdir]] ++ pkgOpts ++ ["-Wall"]
|
||||||
where
|
where
|
||||||
(wdir, rdir) = (cradleCurrentDir crdl, cradleRootDir crdl)
|
(wdir, rdir) = (cradleCurrentDir crdl, cradleRootDir crdl)
|
||||||
|
@ -47,7 +47,7 @@ all sorts of nasty conflicts.
|
|||||||
|
|
||||||
## Custom ghc-mod cradle
|
## Custom ghc-mod cradle
|
||||||
|
|
||||||
To customize the package databases used by `ghc-mod`, put a file called `ghc-mod.cradle` beside the `.cabal` file with the following syntax:
|
To customize the package databases used by `ghc-mod`, put a file called `ghc-mod.package-db-stack` beside the `.cabal` file with the following syntax:
|
||||||
|
|
||||||
```
|
```
|
||||||
temp directory root
|
temp directory root
|
||||||
|
@ -110,6 +110,7 @@ Library
|
|||||||
Language.Haskell.GhcMod.Check
|
Language.Haskell.GhcMod.Check
|
||||||
Language.Haskell.GhcMod.Convert
|
Language.Haskell.GhcMod.Convert
|
||||||
Language.Haskell.GhcMod.Cradle
|
Language.Haskell.GhcMod.Cradle
|
||||||
|
Language.Haskell.GhcMod.CustomPackageDb
|
||||||
Language.Haskell.GhcMod.Debug
|
Language.Haskell.GhcMod.Debug
|
||||||
Language.Haskell.GhcMod.Doc
|
Language.Haskell.GhcMod.Doc
|
||||||
Language.Haskell.GhcMod.DynFlags
|
Language.Haskell.GhcMod.DynFlags
|
||||||
|
Loading…
Reference in New Issue
Block a user