diff --git a/Language/Haskell/GhcMod.hs b/Language/Haskell/GhcMod.hs index 01c0e04..f1bb0f2 100644 --- a/Language/Haskell/GhcMod.hs +++ b/Language/Haskell/GhcMod.hs @@ -13,6 +13,8 @@ module Language.Haskell.GhcMod ( , ModuleString , Expression , GhcPkgDb + , Symbol + , SymbolDb -- * 'GhcMod' utilities , boot , browse @@ -21,6 +23,7 @@ module Language.Haskell.GhcMod ( , debugInfo , expandTemplate , findSymbol + , dumpSymbol , info , lint , pkgDoc @@ -31,6 +34,9 @@ module Language.Haskell.GhcMod ( , modules , languages , flags + -- * SymbolDb + , loadSymbolDb + , lookupSymbol ) where import Language.Haskell.GhcMod.Boot diff --git a/Language/Haskell/GhcMod/Find.hs b/Language/Haskell/GhcMod/Find.hs index f08ac77..e8ef11b 100644 --- a/Language/Haskell/GhcMod/Find.hs +++ b/Language/Haskell/GhcMod/Find.hs @@ -3,7 +3,7 @@ module Language.Haskell.GhcMod.Find ( Symbol , SymbolDb - , getSymbolDb + , loadSymbolDb , lookupSymbol , dumpSymbol , findSymbol @@ -44,10 +44,10 @@ import qualified Data.Map as M ---------------------------------------------------------------- --- | Type of key for `SymbolDb`. +-- | Type of function and operation names. type Symbol = String type Db = Map Symbol [ModuleString] --- | Database from 'Symbol' to modules. +-- | Database from 'Symbol' to \['ModuleString'\]. newtype SymbolDb = SymbolDb Db ---------------------------------------------------------------- @@ -65,23 +65,24 @@ packageConfDir = "package.conf.d" -- | Finding modules to which the symbol belong. findSymbol :: IOish m => Symbol -> GhcModT m String -findSymbol sym = convert' =<< lookupSymbol' sym <$> liftIO getSymbolDb +findSymbol sym = convert' =<< lookupSymbol' sym <$> liftIO loadSymbolDb lookupSymbol' :: Symbol -> SymbolDb -> [ModuleString] lookupSymbol' sym (SymbolDb db) = fromMaybe [] (M.lookup sym db) --- | Looking up 'SymbolDb' with 'Symbol' to find modules. +-- | Looking up 'SymbolDb' with 'Symbol' to \['ModuleString'\] +-- which will be concatenated. lookupSymbol :: Options -> Symbol -> SymbolDb -> String lookupSymbol opt sym db = convert opt $ lookupSymbol' sym db --------------------------------------------------------------- --- | Creating 'SymbolDb'. -getSymbolDb :: IO SymbolDb -getSymbolDb = SymbolDb <$> loadSymbolDb +-- | Loading a file and creates 'SymbolDb'. +loadSymbolDb :: IO SymbolDb +loadSymbolDb = SymbolDb <$> readSymbolDb -loadSymbolDb :: IO Db -loadSymbolDb = handle (\(SomeException _) -> return M.empty) $ do +readSymbolDb :: IO Db +readSymbolDb = handle (\(SomeException _) -> return M.empty) $ do file <- chop <$> readProcess "ghc-mod" ["dumpsym"] [] M.fromAscList . map conv . lines <$> readFile file where @@ -101,6 +102,9 @@ getPath = do [] -> return Nothing u:_ -> liftIO $ resolvePackageDb df u +-- | Dumping a set of ('Symbol',\['ModuleString'\]) to a file +-- if the file does not exist or is invalid. +-- The file name is printed. dumpSymbol :: IOish m => GhcModT m String dumpSymbol = do mdir <- getPath diff --git a/Language/Haskell/GhcMod/Ghc.hs b/Language/Haskell/GhcMod/Ghc.hs deleted file mode 100644 index ce9b3e2..0000000 --- a/Language/Haskell/GhcMod/Ghc.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Language.Haskell.GhcMod.Ghc ( - -- * 'SymMdlDb' - module Language.Haskell.GhcMod.Find - ) where - -import Language.Haskell.GhcMod.Find diff --git a/ghc-mod.cabal b/ghc-mod.cabal index 9a23d1e..7587bb9 100644 --- a/ghc-mod.cabal +++ b/ghc-mod.cabal @@ -53,7 +53,6 @@ Library GHC-Options: -Wall Default-Extensions: ConstraintKinds, FlexibleContexts Exposed-Modules: Language.Haskell.GhcMod - Language.Haskell.GhcMod.Ghc Language.Haskell.GhcMod.Monad Language.Haskell.GhcMod.Internal Other-Modules: Language.Haskell.GhcMod.Boot diff --git a/src/GHCMod.hs b/src/GHCMod.hs index 561aa86..9018157 100644 --- a/src/GHCMod.hs +++ b/src/GHCMod.hs @@ -10,7 +10,6 @@ import qualified Control.Exception as E import Data.Typeable (Typeable) import Data.Version (showVersion) import Language.Haskell.GhcMod -import Language.Haskell.GhcMod.Ghc import Language.Haskell.GhcMod.Monad import Paths_ghc_mod import System.Console.GetOpt (OptDescr(..), ArgDescr(..), ArgOrder(..)) diff --git a/src/GHCModi.hs b/src/GHCModi.hs index 16554c3..f380ff6 100644 --- a/src/GHCModi.hs +++ b/src/GHCModi.hs @@ -34,7 +34,6 @@ import Data.Version (showVersion) import GHC (GhcMonad) import qualified GHC as G import Language.Haskell.GhcMod -import Language.Haskell.GhcMod.Ghc import Language.Haskell.GhcMod.Monad import Paths_ghc_mod import System.Console.GetOpt @@ -116,7 +115,7 @@ replace (x:xs) = x : replace xs ---------------------------------------------------------------- setupDB :: MVar SymbolDb -> IO () -setupDB mvar = getSymbolDb >>= putMVar mvar +setupDB mvar = loadSymbolDb >>= putMVar mvar ----------------------------------------------------------------