diff --git a/ghc-mod.cabal b/ghc-mod.cabal index 9ea9352..ed5d6f7 100644 --- a/ghc-mod.cabal +++ b/ghc-mod.cabal @@ -88,7 +88,8 @@ Library Executable ghc-mod Default-Language: Haskell2010 Main-Is: GHCMod.hs - Other-Modules: Paths_ghc_mod + Other-Modules: Boot + Paths_ghc_mod GHC-Options: -Wall HS-Source-Dirs: src Build-Depends: base >= 4.0 && < 5 @@ -100,7 +101,8 @@ Executable ghc-mod Executable ghc-modi Default-Language: Haskell2010 Main-Is: GHCModi.hs - Other-Modules: Paths_ghc_mod + Other-Modules: Boot + Paths_ghc_mod GHC-Options: -Wall HS-Source-Dirs: src Build-Depends: base >= 4.0 && < 5 diff --git a/src/Boot.hs b/src/Boot.hs new file mode 100644 index 0000000..cf0ea66 --- /dev/null +++ b/src/Boot.hs @@ -0,0 +1,42 @@ +module Boot where + +import Language.Haskell.GhcMod +import Control.Applicative ((<$>)) + +boot :: Options -> Cradle -> IO String +boot opt cradle = do + mods <- listModules opt cradle + langs <- listLanguages opt + flags <- listFlags opt + let opt' = addPackages opt + pre <- concat <$> mapM (browseModule opt' cradle) preBrowsedModules + return $ mods ++ langs ++ flags ++ pre + +preBrowsedModules :: [String] +preBrowsedModules = [ + "Prelude" + , "Control.Applicative" + , "Control.Exception" + , "Control.Monad" + , "Data.ByteString" + , "Data.Char" + , "Data.List" + , "Data.Maybe" + , "System.Directory" + , "System.FilePath" + , "System.IO" + ] + +preBrowsePackages :: [String] +preBrowsePackages = [ + "bytestring" + , "directory" + , "filepath" + ] + +addPackages :: Options -> Options +addPackages opt = opt { ghcOpts = pkgs ++ ghcOpts opt} + where + pkgs = map ("-package " ++) preBrowsePackages + + diff --git a/src/GHCMod.hs b/src/GHCMod.hs index 9771ff2..f19734e 100644 --- a/src/GHCMod.hs +++ b/src/GHCMod.hs @@ -16,6 +16,8 @@ import System.Environment (getArgs) import System.Exit (exitFailure) import System.IO (hPutStr, hPutStrLn, stdout, stderr, hSetEncoding, utf8) +import Boot + ---------------------------------------------------------------- ghcOptHelp :: String @@ -118,13 +120,7 @@ main = flip E.catches handlers $ do "lint" -> nArgs 1 withFile (lintSyntax opt) cmdArg1 "root" -> rootInfo opt cradle "doc" -> nArgs 1 $ packageDoc opt cradle cmdArg1 - "boot" -> do - mods <- listModules opt cradle - langs <- listLanguages opt - flags <- listFlags opt - let opt' = addPackages opt - pre <- concat <$> mapM (browseModule opt' cradle) preBrowsedModules - return $ mods ++ langs ++ flags ++ pre + "boot" -> boot opt cradle "help" -> return $ O.usageInfo usage argspec cmd -> E.throw (NoSuchCommand cmd) putStr res @@ -156,32 +152,3 @@ main = flip E.catches handlers $ do xs !. idx | length xs <= idx = E.throw SafeList | otherwise = xs !! idx - ----------------------------------------------------------------- - -preBrowsedModules :: [String] -preBrowsedModules = [ - "Prelude" - , "Control.Applicative" - , "Control.Exception" - , "Control.Monad" - , "Data.ByteString" - , "Data.Char" - , "Data.List" - , "Data.Maybe" - , "System.Directory" - , "System.FilePath" - , "System.IO" - ] - -preBrowsePackages :: [String] -preBrowsePackages = [ - "bytestring" - , "directory" - , "filepath" - ] - -addPackages :: Options -> Options -addPackages opt = opt { ghcOpts = pkgs ++ ghcOpts opt} - where - pkgs = map ("-package " ++) preBrowsePackages