From 3dea19b2703e3cff9efde0948263592245e8f111 Mon Sep 17 00:00:00 2001 From: Nikolay Yakimov Date: Mon, 17 Aug 2015 10:39:49 +0300 Subject: [PATCH] Fix getCanonicalFileNameSafe to work on all relevant ghc versions --- Language/Haskell/GhcMod/Utils.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Language/Haskell/GhcMod/Utils.hs b/Language/Haskell/GhcMod/Utils.hs index 377a7e7..2ee4e4d 100644 --- a/Language/Haskell/GhcMod/Utils.hs +++ b/Language/Haskell/GhcMod/Utils.hs @@ -29,7 +29,7 @@ import qualified Data.Map as M import Data.Maybe (fromMaybe) import Data.Either (rights) import Data.List (inits) -import System.FilePath (joinPath, splitPath) +import System.FilePath (joinPath, splitPath, normalise) import Exception import Language.Haskell.GhcMod.Error import Language.Haskell.GhcMod.Types @@ -173,11 +173,18 @@ withMappedFile file action = getCanonicalFileNameSafe file >>= lookupMMappedFile getCanonicalFileNameSafe :: (IOish m, GmEnv m) => FilePath -> m FilePath getCanonicalFileNameSafe fn = do - pl <- liftIO $ rights <$> (mapM ((try :: IO FilePath -> IO (Either SomeException FilePath)) . canonicalizePath . joinPath) $ reverse $ inits $ splitPath fn) + let fn' = normalise fn + pl <- liftIO $ rights <$> (mapM ((try :: IO FilePath -> IO (Either SomeException FilePath)) . canonicalizePath . joinPath) $ reverse $ inits $ splitPath' fn') return $ if (length pl > 0) - then joinPath $ (head pl):(drop (length pl - 1) (splitPath fn)) + then joinPath $ (head pl):(drop (length pl - 1) (splitPath fn')) else error "Current dir doesn't seem to exist?" + where +#if __GLASGOW_HASKELL__ < 710 + splitPath' = (".":) . splitPath +#else + splitPath' = splitPath +#endif mkRevRedirMapFunc :: (Functor m, GmState m, GmEnv m) => m (FilePath -> FilePath) mkRevRedirMapFunc = do