From d3b1bf125b47ea50307c4ef893fcc5594e021f74 Mon Sep 17 00:00:00 2001 From: Nikolay Yakimov Date: Thu, 2 Jul 2015 14:01:03 +0300 Subject: [PATCH] Move reading source from stdin to frontend --- Language/Haskell/GhcMod/FileMapping.hs | 16 ++-------------- src/GHCMod.hs | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Language/Haskell/GhcMod/FileMapping.hs b/Language/Haskell/GhcMod/FileMapping.hs index d40bd64..e0eb773 100644 --- a/Language/Haskell/GhcMod/FileMapping.hs +++ b/Language/Haskell/GhcMod/FileMapping.hs @@ -21,22 +21,10 @@ import GHC loadMappedFiles :: IOish m => GhcModT m () loadMappedFiles = do Options {fileMappings} <- options - mapM_ (uncurry loadMappedFile) $ reverse fileMappings + mapM_ (uncurry loadMappedFile) fileMappings loadMappedFile :: IOish m => FilePath -> FileMapping -> GhcModT m () -loadMappedFile from fm@(RedirectedMapping _) = - addToState from fm -loadMappedFile from (MemoryMapping _) = do - let loop' acc = do - line <- getLine - if not (null line) && last line == '\EOT' - then return $ acc ++ init line - else loop' (acc++line++"\n") - src <- liftIO $ loop' "" - addToState from (MemoryMapping $ Just src) - -addToState :: IOish m => FilePath -> FileMapping -> GhcModT m () -addToState from fm = do +loadMappedFile from fm = do crdl <- cradle let ccfn = cradleCurrentDir crdl from cfn <- liftIO $ canonicalizePath ccfn diff --git a/src/GHCMod.hs b/src/GHCMod.hs index 7ccefd6..1c21738 100644 --- a/src/GHCMod.hs +++ b/src/GHCMod.hs @@ -438,11 +438,12 @@ legacyInteractiveLoop symdbreq world = do "boot" -> bootCmd [] "browse" -> browseCmd args - "map-file" -> loadMappedFile arg (MemoryMapping Nothing) - >> return "" + "map-file" -> liftIO getFileSourceFromStdin + >>= loadMappedFile arg . MemoryMapping . Just + >> return "" - "unmap-file" -> unloadMappedFile arg - >> return "" + "unmap-file" -> unloadMappedFile arg + >> return "" "quit" -> liftIO $ exitSuccess "" -> liftIO $ exitSuccess @@ -456,6 +457,15 @@ legacyInteractiveLoop symdbreq world = do , GHandler $ \(SomeException e) -> gmErrStrLn (show e) >> return "" ] +getFileSourceFromStdin :: IO String +getFileSourceFromStdin = do + let loop' acc = do + line <- getLine + if not (null line) && last line == '\EOT' + then return $ acc ++ init line + else loop' (acc++line++"\n") + loop' "" + ghcCommands :: IOish m => [String] -> GhcModT m () ghcCommands [] = fatalError "No command given (try --help)" ghcCommands (cmd:args) = do