From 438b15463e7dd41d78e3d1c5ca4bf10a4610e8f8 Mon Sep 17 00:00:00 2001 From: Nikolay Yakimov Date: Fri, 3 Jul 2015 20:25:54 +0300 Subject: [PATCH] Move getCanonicalFileName(Safe) to Utils module --- Language/Haskell/GhcMod/FileMapping.hs | 17 +++-------------- Language/Haskell/GhcMod/Utils.hs | 9 +++++++++ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Language/Haskell/GhcMod/FileMapping.hs b/Language/Haskell/GhcMod/FileMapping.hs index 93f7cb1..bae425e 100644 --- a/Language/Haskell/GhcMod/FileMapping.hs +++ b/Language/Haskell/GhcMod/FileMapping.hs @@ -9,9 +9,7 @@ import Language.Haskell.GhcMod.Types import Language.Haskell.GhcMod.Monad.Types import Language.Haskell.GhcMod.Gap import Language.Haskell.GhcMod.HomeModuleGraph - -import System.Directory -import System.FilePath +import Language.Haskell.GhcMod.Utils import Data.Time @@ -25,7 +23,7 @@ loadMappedFiles = do loadMappedFile :: IOish m => FilePath -> FileMapping -> GhcModT m () loadMappedFile from fm = - getCanonicalFileName from >>= (`addMMappedFile` fm) + getCanonicalFileNameSafe from >>= (`addMMappedFile` fm) mapFile :: (IOish m, GmState m, GhcMonad m) => HscEnv -> Target -> m Target @@ -48,14 +46,5 @@ mkMappedTarget tid taoc (Just (MemoryMapping (Just src))) = do return $ mkTarget tid taoc $ Just (sb, ct) mkMappedTarget tid taoc _ = return $ mkTarget tid taoc Nothing -getCanonicalFileName :: IOish m => FilePath -> GhcModT m FilePath -getCanonicalFileName fn = do - crdl <- cradle - let ccfn = cradleCurrentDir crdl fn - fex <- liftIO $ doesFileExist ccfn - if fex - then liftIO $ canonicalizePath ccfn - else return ccfn - unloadMappedFile :: IOish m => FilePath -> GhcModT m () -unloadMappedFile = (delMMappedFile =<<) . getCanonicalFileName +unloadMappedFile = (delMMappedFile =<<) . getCanonicalFileNameSafe diff --git a/Language/Haskell/GhcMod/Utils.hs b/Language/Haskell/GhcMod/Utils.hs index 87c9a53..209b983 100644 --- a/Language/Haskell/GhcMod/Utils.hs +++ b/Language/Haskell/GhcMod/Utils.hs @@ -174,3 +174,12 @@ withMappedFile file action = lookupMMappedFile file >>= runWithFile liftIO $ removeFile fp return result runWithFile _ = action file + +getCanonicalFileNameSafe :: IOish m => FilePath -> GhcModT m FilePath +getCanonicalFileNameSafe fn = do + crdl <- cradle + let ccfn = cradleCurrentDir crdl fn + fex <- liftIO $ doesFileExist ccfn + if fex + then liftIO $ canonicalizePath ccfn + else return ccfn