git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
.psci config file support
commitcf946bd541988bd0ebc4bed618a41094e3591652 authorPhil Freeman <paf31@cantab.net> dateThu 3 Apr 2014, 14:48 (13 years ago) parent869c4e1
2 files changed+19−2
RELEASE-0.5.md+1 psci/Main.hs+18−2
RELEASE-0.5.md+1
@@ -34,6 +34,7 @@
3434- PSCI history is in XDG config (joneshf)
3535- PSCI allows loading of modules from ~ paths (joneshf)
3636- PSCI can accept a list of modules to load on start from the command line (paf31)
37+- PSCI can now be configured using a `.psci` file in the current directory. If such a file exists, it should contain a list of commands to run on startup. (paf31)
3738- Type class instances are now named, to enable easier interop with Javascript (paf31)
3839- Class names no longer need to be qualified in instance declarations (garyb)
3940- Module exports can now be specified explicitly (garyb)
psci/Main.hs+18−2
@@ -27,13 +27,14 @@ import Control.Monad.Trans.State.Strict
2727
2828import Data.List (intercalate, isPrefixOf, nub, sortBy)
2929import Data.Maybe (mapMaybe)
30+import Data.Foldable (traverse_)
3031import Data.Traversable (traverse)
3132import Data.Version (showVersion)
3233
3334import Parser
3435
3536import System.Console.Haskeline
36−import System.Directory (doesFileExist, findExecutable, getHomeDirectory)
37+import System.Directory (doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
3738import System.Exit
3839import System.Environment.XDG.BaseDir
3940import System.FilePath ((</>), isPathSeparator)
@@ -45,7 +46,7 @@ import Text.Parsec (ParseError)
4546import qualified Data.Map as M
4647import qualified Language.PureScript as P
4748import qualified Paths_purescript as Paths
48−import qualified System.IO.UTF8 as U (readFile)
49+import qualified System.IO.UTF8 as U (print, readFile)
4950
5051-- |
5152-- The PSCI state.
@@ -289,11 +290,25 @@ inputFiles :: Cmd.Term [FilePath]
289290inputFiles = Cmd.value $ Cmd.posAny [] $ Cmd.posInfo { Cmd.posName = "file(s)"
290291 , Cmd.posDoc = "Optional .purs files to load on start" }
291292
293+loadUserConfig :: IO (Maybe [Command])
294+loadUserConfig = do
295+ configFile <- (</> ".psci") <$> getCurrentDirectory
296+ exists <- doesFileExist configFile
297+ if exists
298+ then do
299+ ls <- lines <$> U.readFile configFile
300+ case mapM parseCommand ls of
301+ Left err -> U.print err >> exitFailure
302+ Right cs -> return $ Just cs
303+ else
304+ return Nothing
305+
292306-- |
293307-- The PSCI main loop.
294308--
295309loop :: [FilePath] -> IO ()
296310loop files = do
311+ config <- loadUserConfig
297312 preludeFilename <- getPreludeFilename
298313 modulesOrFirstError <- fmap concat . sequence <$> mapM loadModule (preludeFilename : files)
299314 case modulesOrFirstError of
@@ -303,6 +318,7 @@ loop files = do
303318 let settings = defaultSettings {historyFile = Just historyFilename}
304319 flip evalStateT (PSCiState (preludeFilename : files) defaultImports modules []) . runInputT (setComplete completion settings) $ do
305320 outputStrLn prologueMessage
321+ traverse_ (mapM_ handleCommand) config
306322 go
307323 where
308324 go :: InputT (StateT PSCiState IO) ()