From 136e09e704abd200d23f1705168486a4ab6c63d2 Mon Sep 17 00:00:00 2001 From: Kohei Suzuki Date: Fri, 27 Sep 2013 12:25:41 +0900 Subject: [PATCH] `ghc-mod browse` should take care of sandboxes --- Language/Haskell/GhcMod/Browse.hs | 9 ++++++--- src/GHCMod.hs | 4 ++-- test/BrowseSpec.hs | 9 ++++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Language/Haskell/GhcMod/Browse.hs b/Language/Haskell/GhcMod/Browse.hs index c5b25dc..6d5452f 100644 --- a/Language/Haskell/GhcMod/Browse.hs +++ b/Language/Haskell/GhcMod/Browse.hs @@ -1,6 +1,7 @@ module Language.Haskell.GhcMod.Browse (browseModule, browse) where import Control.Applicative +import Control.Monad (void) import Data.Char import Data.List import Data.Maybe (fromMaybe) @@ -21,9 +22,10 @@ import Var -- If 'detailed' is 'True', their types are also obtained. -- If 'operators' is 'True', operators are also returned. browseModule :: Options + -> Cradle -> ModuleString -- ^ A module name. (e.g. \"Data.List\") -> IO String -browseModule opt mdlName = convert opt . format <$> withGHCDummyFile (browse opt mdlName) +browseModule opt cradle mdlName = convert opt . format <$> withGHCDummyFile (browse opt cradle mdlName) where format | operators opt = formatOps @@ -41,10 +43,11 @@ browseModule opt mdlName = convert opt . format <$> withGHCDummyFile (browse opt -- If 'detailed' is 'True', their types are also obtained. -- If 'operators' is 'True', operators are also returned. browse :: Options + -> Cradle -> ModuleString -- ^ A module name. (e.g. \"Data.List\") -> Ghc [String] -browse opt mdlName = do - initializeFlags opt +browse opt cradle mdlName = do + void $ initializeFlagsWithCradle opt cradle [] False getModule >>= getModuleInfo >>= listExports where getModule = findModule (mkModuleName mdlName) Nothing diff --git a/src/GHCMod.hs b/src/GHCMod.hs index 9d159e0..7ac88ad 100644 --- a/src/GHCMod.hs +++ b/src/GHCMod.hs @@ -96,7 +96,7 @@ main = flip catches handlers $ do then f else throw (TooManyArguments cmdArg0) res <- case cmdArg0 of - "browse" -> concat <$> mapM (browseModule opt) remainingArgs + "browse" -> concat <$> mapM (browseModule opt cradle) remainingArgs "list" -> listModules opt cradle "check" -> checkSyntax opt cradle remainingArgs "expand" -> checkSyntax opt { expandSplice = True } cradle remainingArgs @@ -110,7 +110,7 @@ main = flip catches handlers $ do mods <- listModules opt cradle langs <- listLanguages opt flags <- listFlags opt - pre <- concat <$> mapM (browseModule opt) preBrowsedModules + pre <- concat <$> mapM (browseModule opt cradle) preBrowsedModules return $ mods ++ langs ++ flags ++ pre "help" -> return $ usageInfo usage argspec cmd -> throw (NoSuchCommand cmd) diff --git a/test/BrowseSpec.hs b/test/BrowseSpec.hs index 616c7f6..c1e5f88 100644 --- a/test/BrowseSpec.hs +++ b/test/BrowseSpec.hs @@ -8,14 +8,17 @@ spec :: Spec spec = do describe "browseModule" $ do it "lists up symbols in the module" $ do - syms <- lines <$> browseModule defaultOptions "Data.Map" + cradle <- findCradle + syms <- lines <$> browseModule defaultOptions cradle "Data.Map" syms `shouldContain` ["differenceWithKey"] describe "browseModule -d" $ do it "lists up symbols with type info in the module" $ do - syms <- lines <$> browseModule defaultOptions { detailed = True } "Data.Either" + cradle <- findCradle + syms <- lines <$> browseModule defaultOptions { detailed = True } cradle "Data.Either" syms `shouldContain` ["either :: (a -> c) -> (b -> c) -> Either a b -> c"] it "lists up data constructors with type info in the module" $ do - syms <- lines <$> browseModule defaultOptions { detailed = True} "Data.Either" + cradle <- findCradle + syms <- lines <$> browseModule defaultOptions { detailed = True} cradle "Data.Either" syms `shouldContain` ["Left :: a -> Either a b"]