hsinspect 0.0.15 → 0.0.16
raw patch · 3 files changed
+26/−21 lines, 3 files
Files
- exe/Main.hs +7/−2
- hsinspect.cabal +1/−1
- library/HsInspect/Runner.hs +18/−18
exe/Main.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE ViewPatterns #-} module Main where@@ -6,6 +7,7 @@ import qualified Config as GHC import Control.Monad import Control.Monad.IO.Class+import Control.Monad.Trans.Except (runExceptT) import qualified Data.Text.IO as T import DynFlags (unsafeGlobalDynFlags) import HsInspect.Imports@@ -48,8 +50,11 @@ when (elem "--ghc-version" args) $ (putStrLn GHC.cProjectVersion) >> exitWith ExitSuccess + let ghcflags_flags' w = runExceptT (ghcflags_flags w) >>= \case+ Left err -> (putStrLn err) >> exitWith (ExitFailure 1)+ Right flags -> pure flags flags <- if (elem "--ghcflags" args)- then ghcflags_flags $ case args of+ then ghcflags_flags' $ case args of "imports" : file : _ -> Just file "types" : file : _ -> Just file _ -> Nothing@@ -62,7 +67,7 @@ Right j -> putStrLn $ encodeJson unsafeGlobalDynFlags j else T.putStrLn $ S.render a - runGhcAndJamMasterShe flags $ case args of+ runGhcAndJamMasterShe flags True $ case args of "imports" : file : rest -> do quals <- imports file respond rest quals
hsinspect.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: hsinspect-version: 0.0.15+version: 0.0.16 synopsis: Inspect Haskell source files. license: GPL-3.0-or-later license-file: LICENSE
library/HsInspect/Runner.hs view
@@ -5,7 +5,7 @@ import Control.Monad import Control.Monad.IO.Class-import Control.Monad.Trans.Except (runExceptT)+import Control.Monad.Trans.Except (ExceptT(..)) import Data.List (find, isPrefixOf) import qualified Data.List as L import Data.Maybe (catMaybes)@@ -22,8 +22,8 @@ -- expects the PWD to be the same as the .cabal file and the PATH to be what the -- build tool sees.-runGhcAndJamMasterShe :: [String] -> Ghc a -> IO a-runGhcAndJamMasterShe (filterFlags -> flags) work =+runGhcAndJamMasterShe :: [String] -> Bool -> Ghc a -> IO a+runGhcAndJamMasterShe (filterFlags -> flags) setTargets work = let libdir = (drop 2) <$> find ("-B" `isPrefixOf`) flags flags' = filter (not . ("-B" `isPrefixOf`)) flags in GHC.runGhc libdir $ do@@ -38,25 +38,25 @@ , GHC.fatalWarningFlags = EnumSet.empty } - -- The caller may have provided a list of home modules, but we do not trust- -- them because the ghcflags plugin does not keep the flags up to date for- -- incremental compiles.- let mkTarget m = GHC.Target (GHC.TargetModule m) True Nothing- homeModules <- inferHomeModules- GHC.setTargets $ mkTarget <$> homeModules+ when setTargets $ do+ -- The caller may have provided a list of home modules, but we do not trust+ -- them because the ghcflags plugin does not keep the flags up to date for+ -- incremental compiles.+ let mkTarget m = GHC.Target (GHC.TargetModule m) True Nothing+ homeModules <- inferHomeModules+ GHC.setTargets $ mkTarget <$> homeModules+ work -- gets the flags (and sets the environment) from the output of the ghcflags plugin-ghcflags_flags :: Maybe FilePath -> IO [String]+ghcflags_flags :: Maybe FilePath -> ExceptT String IO [String] ghcflags_flags mf = do- from <- maybe getCurrentDirectory pure mf- ctx <- runExceptT $ findContext from- case ctx of- Left err -> error err- Right Context{package_dir, ghcflags, ghcpath} -> do- setCurrentDirectory package_dir- setEnv "PATH" (T.unpack ghcpath)- pure $ T.unpack <$> ghcflags+ from <- liftIO $ maybe getCurrentDirectory pure mf+ Context{package_dir, ghcflags, ghcpath} <- findContext from+ liftIO $ do+ setCurrentDirectory package_dir+ setEnv "PATH" (T.unpack ghcpath)+ pure $ T.unpack <$> ghcflags inferHomeModules :: GHC.GhcMonad m => m [GHC.ModuleName] inferHomeModules = do