From f8a0325617e7659b8b6407e2e43143452cadb45d Mon Sep 17 00:00:00 2001 From: Nikolay Yakimov Date: Tue, 16 Jun 2015 11:28:46 +0300 Subject: [PATCH] Load all mapped targets --- Language/Haskell/GhcMod/Monad/Types.hs | 4 ++++ Language/Haskell/GhcMod/Target.hs | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Language/Haskell/GhcMod/Monad/Types.hs b/Language/Haskell/GhcMod/Monad/Types.hs index 7a866f3..1339513 100644 --- a/Language/Haskell/GhcMod/Monad/Types.hs +++ b/Language/Haskell/GhcMod/Monad/Types.hs @@ -53,6 +53,7 @@ module Language.Haskell.GhcMod.Monad.Types ( , addMMappedFile , delMMappedFile , lookupMMappedFile + , getMMappedFilePaths -- * Re-exporting convenient stuff , MonadIO , liftIO @@ -464,6 +465,9 @@ lookupMMappedFile :: GmState m => FilePath -> m (Maybe FileMapping) lookupMMappedFile t = M.lookup t `liftM` getMMappedFiles +getMMappedFilePaths :: GmState m => m [FilePath] +getMMappedFilePaths = M.keys `liftM` getMMappedFiles + withOptions :: GmEnv m => (Options -> Options) -> m a -> m a withOptions changeOpt action = gmeLocal changeEnv action where diff --git a/Language/Haskell/GhcMod/Target.hs b/Language/Haskell/GhcMod/Target.hs index 386cec4..67432cc 100644 --- a/Language/Haskell/GhcMod/Target.hs +++ b/Language/Haskell/GhcMod/Target.hs @@ -53,6 +53,8 @@ import Data.Map (Map) import qualified Data.Map as Map import Data.Set (Set) import qualified Data.Set as Set +import Data.List (nubBy) +import Data.Function (on) import Distribution.Helper import Prelude hiding ((.)) @@ -163,12 +165,15 @@ runGmlTWith efnmns' mdf wrapper action = do initSession opts' $ setModeSimple >>> setEmptyLogger >>> mdf + mappedStrs <- getMMappedFilePaths + let targetStrs = mappedStrs ++ map moduleNameString mns ++ cfns + unGmlT $ wrapper $ do targets <- withLightHscEnv opts $ \env -> - mapM (`guessTarget` Nothing) (map moduleNameString mns ++ cfns) - >>= mapM (mapFile env) - >>= mapM relativize + liftM (nubBy ((==) `on` targetId)) + (mapM ((`guessTarget` Nothing) >=> mapFile env) targetStrs) + >>= mapM relativize loadTargets targets action where