ghc-mod browse
should take care of sandboxes
This commit is contained in:
parent
67166a4d75
commit
136e09e704
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"]
|
||||
|
Loading…
Reference in New Issue
Block a user