From 20e68337d800f2570d69938609db889d359a0d89 Mon Sep 17 00:00:00 2001 From: Kazu Yamamoto Date: Fri, 30 Apr 2010 16:27:10 +0900 Subject: [PATCH] browse takes a list of modules. --- Browse.hs | 16 +++++++--------- GHCMod.hs | 5 +++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Browse.hs b/Browse.hs index f642b7b..f56c040 100644 --- a/Browse.hs +++ b/Browse.hs @@ -3,7 +3,7 @@ module Browse (browseModule) where import Control.Applicative import Data.Char import Data.List -import DynFlags +import Exception import GHC import GHC.Paths (libdir) import Name @@ -17,14 +17,12 @@ browseModule opt mdlName = convert opt . validate <$> browse mdlName validate = sort . filter (isAlpha.head) browse :: String -> IO [String] -browse mdlName = withGHCAPI (maybeNamesToStrings <$> lookupModuleInfo) - +browse mdlName = ghandle ignore $ runGhc (Just libdir) $ do + initSession + maybeNamesToStrings <$> lookupModuleInfo where + initSession = getSessionDynFlags >>= setSessionDynFlags lookupModuleInfo = findModule (mkModuleName mdlName) Nothing >>= getModuleInfo maybeNamesToStrings = maybe [] (map getOccString . modInfoExports) - -withGHCAPI :: Ghc a -> IO a -withGHCAPI body = defaultErrorHandler defaultDynFlags $ - runGhc (Just libdir) $ do - getSessionDynFlags >>= setSessionDynFlags - body + ignore :: SomeException -> IO [String] + ignore _ = return [] diff --git a/GHCMod.hs b/GHCMod.hs index d25145c..c850ba9 100644 --- a/GHCMod.hs +++ b/GHCMod.hs @@ -2,10 +2,11 @@ module Main where import Browse import Check +import Control.Applicative import Control.Exception hiding (try) +import Lang import List import Param -import Lang import Prelude hiding (catch) import System.Console.GetOpt import System.Environment (getArgs) @@ -50,7 +51,7 @@ main = flip catch handler $ do args <- getArgs let (opt,cmdArg) = parseArgs argspec args res <- case head cmdArg of - "browse" -> browseModule opt (cmdArg !! 1) + "browse" -> concat <$> mapM (browseModule opt) (tail cmdArg) "list" -> listModules opt "check" -> checkSyntax opt (cmdArg !! 1) "lang" -> listLanguages opt