From 2dd7bab9b2060c5a65f66113b3d405babdbeedf7 Mon Sep 17 00:00:00 2001 From: Kazu Yamamoto Date: Thu, 27 Mar 2014 16:22:49 +0900 Subject: [PATCH] packageDoc for sandbox. --- Language/Haskell/GhcMod.hs | 2 ++ Language/Haskell/GhcMod/PkgDoc.hs | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 Language/Haskell/GhcMod/PkgDoc.hs diff --git a/Language/Haskell/GhcMod.hs b/Language/Haskell/GhcMod.hs index af1c885..63a1f03 100644 --- a/Language/Haskell/GhcMod.hs +++ b/Language/Haskell/GhcMod.hs @@ -23,6 +23,7 @@ module Language.Haskell.GhcMod ( , listFlags , debugInfo , rootInfo + , packageDoc -- * Converting the 'Ghc' monad to the 'IO' monad , withGHC , withGHCDummyFile @@ -46,4 +47,5 @@ import Language.Haskell.GhcMod.Info import Language.Haskell.GhcMod.Lang import Language.Haskell.GhcMod.Lint import Language.Haskell.GhcMod.List +import Language.Haskell.GhcMod.PkgDoc import Language.Haskell.GhcMod.Types diff --git a/Language/Haskell/GhcMod/PkgDoc.hs b/Language/Haskell/GhcMod/PkgDoc.hs new file mode 100644 index 0000000..5fc4362 --- /dev/null +++ b/Language/Haskell/GhcMod/PkgDoc.hs @@ -0,0 +1,23 @@ +module Language.Haskell.GhcMod.PkgDoc (packageDoc) where + +import Control.Applicative ((<$>)) +import Language.Haskell.GhcMod.Types +import System.Process (readProcess) + +-- | Obtaining the package name and the doc path of a module. +packageDoc :: Options + -> Cradle + -> ModuleString + -> IO String +packageDoc _ cradle mdl = pkgDoc cradle mdl + +pkgDoc :: Cradle -> String -> IO String +pkgDoc cradle mdl = do + pkg <- trim <$> readProcess "ghc-pkg" toModuleOpts [] + htmlpath <- readProcess "ghc-pkg" ["field", pkg, "haddock-html"] [] + let ret = pkg ++ " " ++ drop 14 htmlpath + return ret + where + toModuleOpts = ["find-module", "--simple-output"] ++ cradlePackageDbOpts cradle ++ [mdl] + trim = fst . break (== '\n') +