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