From e198f68f2a39780ce66447b996479d414df946c9 Mon Sep 17 00:00:00 2001 From: Alan Zimmerman Date: Tue, 18 Aug 2015 10:54:55 +0200 Subject: [PATCH] Rearrange loadTargets code. The loadTargets function is exposed via the Internal module for use by external programmes, such as HaRe. Re-arrange to code so that it can still be called with a list of string targets, as it was before. --- Language/Haskell/GhcMod/Internal.hs | 1 + Language/Haskell/GhcMod/Target.hs | 31 +++++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Language/Haskell/GhcMod/Internal.hs b/Language/Haskell/GhcMod/Internal.hs index d5fdff7..76eb7fb 100644 --- a/Language/Haskell/GhcMod/Internal.hs +++ b/Language/Haskell/GhcMod/Internal.hs @@ -40,6 +40,7 @@ module Language.Haskell.GhcMod.Internal ( , cradle , getCompilerMode , setCompilerMode + , targetGhcOptions , withOptions -- * 'GhcModError' , gmeDoc diff --git a/Language/Haskell/GhcMod/Target.hs b/Language/Haskell/GhcMod/Target.hs index de73b13..3429818 100644 --- a/Language/Haskell/GhcMod/Target.hs +++ b/Language/Haskell/GhcMod/Target.hs @@ -137,20 +137,8 @@ runGmlTWith efnmns' mdf wrapper action = do let targetStrs = mappedStrs ++ map moduleNameString mns ++ cfns unGmlT $ wrapper $ do - targets <- - withLightHscEnv opts $ \env -> - liftM (nubBy ((==) `on` targetId)) - (mapM ((`guessTarget` Nothing) >=> mapFile env) targetStrs) - >>= mapM relativize - loadTargets targets + loadTargets opts targetStrs action - where - relativize (Target (TargetFile filePath phase) taoc src) = do - crdl <- cradle - let tid = TargetFile relativeFilePath phase - relativeFilePath = makeRelative (cradleRootDir crdl) filePath - return $ Target tid taoc src - relativize tgt = return tgt targetGhcOptions :: forall m. IOish m => Cradle @@ -413,8 +401,14 @@ resolveGmComponents mumns cs = do same f a b = (f a) == (f b) -- | Set the files as targets and load them. -loadTargets :: IOish m => [Target] -> GmlT m () -loadTargets targets = do +loadTargets :: IOish m => [GHCOption] -> [FilePath] -> GmlT m () +loadTargets opts targetStrs = do + targets <- + withLightHscEnv opts $ \env -> + liftM (nubBy ((==) `on` targetId)) + (mapM ((`guessTarget` Nothing) >=> mapFile env) targetStrs) + >>= mapM relativize + gmLog GmDebug "loadTargets" $ text "Loading" <+>: fsep (map (text . showTargetId) targets) @@ -435,6 +429,13 @@ loadTargets targets = do else loadTargets' Simple where + relativize (Target (TargetFile filePath phase) taoc src) = do + crdl <- cradle + let tid = TargetFile relativeFilePath phase + relativeFilePath = makeRelative (cradleRootDir crdl) filePath + return $ Target tid taoc src + relativize tgt = return tgt + loadTargets' Simple = do void $ load LoadAllTargets mapM_ (parseModule >=> typecheckModule >=> desugarModule) =<< getModuleGraph