Commit 625a2a2f authored by Sumit Sahrawat's avatar Sumit Sahrawat

Merge pull request #639 from nicluo/master

Support --version, -V in CLI
parents d1c84ee2 ed3b892e
...@@ -28,6 +28,7 @@ import System.Posix.Signals ...@@ -28,6 +28,7 @@ import System.Posix.Signals
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified Data.Text.Encoding as E import qualified Data.Text.Encoding as E
import Data.List (break, last) import Data.List (break, last)
import Data.Version (showVersion)
-- IHaskell imports. -- IHaskell imports.
import IHaskell.Convert (convert) import IHaskell.Convert (convert)
...@@ -46,6 +47,9 @@ import IHaskell.IPython.Types ...@@ -46,6 +47,9 @@ import IHaskell.IPython.Types
import qualified IHaskell.IPython.Message.UUID as UUID import qualified IHaskell.IPython.Message.UUID as UUID
import qualified IHaskell.IPython.Stdin as Stdin import qualified IHaskell.IPython.Stdin as Stdin
-- Cabal imports.
import Paths_ihaskell(version)
-- GHC API imports. -- GHC API imports.
import GHC hiding (extensions, language) import GHC hiding (extensions, language)
...@@ -69,7 +73,7 @@ main = do ...@@ -69,7 +73,7 @@ main = do
Right args -> ihaskell args Right args -> ihaskell args
ihaskell :: Args -> IO () ihaskell :: Args -> IO ()
ihaskell (Args (ShowHelp help) _) = putStrLn help ihaskell (Args (ShowDefault helpStr) args) = showDefault helpStr args
ihaskell (Args ConvertLhs args) = showingHelp ConvertLhs args $ convert args ihaskell (Args ConvertLhs args) = showingHelp ConvertLhs args $ convert args
ihaskell (Args InstallKernelSpec args) = showingHelp InstallKernelSpec args $ do ihaskell (Args InstallKernelSpec args) = showingHelp InstallKernelSpec args $ do
let kernelSpecOpts = parseKernelArgs args let kernelSpecOpts = parseKernelArgs args
...@@ -82,6 +86,14 @@ ihaskell a@(Args (Kernel Nothing) _) = do ...@@ -82,6 +86,14 @@ ihaskell a@(Args (Kernel Nothing) _) = do
hPutStrLn stderr "This may be a bug!" hPutStrLn stderr "This may be a bug!"
hPrint stderr a hPrint stderr a
showDefault :: String -> [Argument] -> IO ()
showDefault helpStr flags =
case find (== Version) flags of
Just _ ->
putStrLn (showVersion version)
Nothing ->
putStrLn helpStr
showingHelp :: IHaskellMode -> [Argument] -> IO () -> IO () showingHelp :: IHaskellMode -> [Argument] -> IO () -> IO ()
showingHelp mode flags act = showingHelp mode flags act =
case find (== Help) flags of case find (== Help) flags of
...@@ -240,9 +252,9 @@ replyTo _ KernelInfoRequest{} replyHeader state = ...@@ -240,9 +252,9 @@ replyTo _ KernelInfoRequest{} replyHeader state =
(state, KernelInfoReply (state, KernelInfoReply
{ header = replyHeader { header = replyHeader
, protocolVersion = "5.0" , protocolVersion = "5.0"
, banner = "IHaskell " ++ VERSION_ipython_kernel ++ " GHC " ++ VERSION_ghc , banner = "IHaskell " ++ (showVersion version) ++ " GHC " ++ VERSION_ghc
, implementation = "IHaskell" , implementation = "IHaskell"
, implementationVersion = VERSION_ipython_kernel , implementationVersion = showVersion version
, languageInfo = LanguageInfo , languageInfo = LanguageInfo
{ languageName = "haskell" { languageName = "haskell"
, languageVersion = VERSION_ghc , languageVersion = VERSION_ghc
......
...@@ -32,6 +32,7 @@ data Argument = ConfFile String -- ^ A file with commands to load at startup ...@@ -32,6 +32,7 @@ data Argument = ConfFile String -- ^ A file with commands to load at startup
| GhcLibDir String -- ^ Where to find the GHC libraries. | GhcLibDir String -- ^ Where to find the GHC libraries.
| KernelDebug -- ^ Spew debugging output from the kernel. | KernelDebug -- ^ Spew debugging output from the kernel.
| Help -- ^ Display help text. | Help -- ^ Display help text.
| Version -- ^ Display version text.
| ConvertFrom String | ConvertFrom String
| ConvertTo String | ConvertTo String
| ConvertFromFormat NotebookFormat | ConvertFromFormat NotebookFormat
...@@ -57,7 +58,7 @@ data NotebookFormat = LhsMarkdown ...@@ -57,7 +58,7 @@ data NotebookFormat = LhsMarkdown
deriving (Eq, Show) deriving (Eq, Show)
-- Which mode IHaskell is being invoked in. -- Which mode IHaskell is being invoked in.
data IHaskellMode = ShowHelp String data IHaskellMode = ShowDefault String
| InstallKernelSpec | InstallKernelSpec
| ConvertLhs | ConvertLhs
| Kernel (Maybe String) | Kernel (Maybe String)
...@@ -70,9 +71,7 @@ parseFlags flags = ...@@ -70,9 +71,7 @@ parseFlags flags =
in case modeIndex of in case modeIndex of
Nothing -> Nothing ->
-- Treat no mode as 'console'. -- Treat no mode as 'console'.
if "--help" `elem` flags process ihaskellArgs flags
then Left $ showText (Wrap 100) $ helpText [] HelpFormatAll ihaskellArgs
else process ihaskellArgs flags
Just 0 -> process ihaskellArgs flags Just 0 -> process ihaskellArgs flags
Just idx -> Just idx ->
...@@ -177,10 +176,12 @@ lhsStyleTex = LhsStyle "" "" "\\begin{code}" "\\end{code}" "\\begin{verbatim}" " ...@@ -177,10 +176,12 @@ lhsStyleTex = LhsStyle "" "" "\\begin{code}" "\\end{code}" "\\begin{verbatim}" "
ihaskellArgs :: Mode Args ihaskellArgs :: Mode Args
ihaskellArgs = ihaskellArgs =
let descr = "Haskell for Interactive Computing." let noMode = mode "IHaskell" defaultReport descr noArgs [helpFlag, versionFlag]
defaultReport = Args (ShowDefault helpStr) []
descr = "Haskell for Interactive Computing."
helpFlag = flagHelpSimple (add Help)
versionFlag = flagVersion (add Version)
helpStr = showText (Wrap 100) $ helpText [] HelpFormatAll ihaskellArgs helpStr = showText (Wrap 100) $ helpText [] HelpFormatAll ihaskellArgs
onlyHelp = [flagHelpSimple (add Help)]
noMode = mode "IHaskell" (Args (ShowHelp helpStr) []) descr noArgs onlyHelp
in noMode { modeGroupModes = toGroup allModes } in noMode { modeGroupModes = toGroup allModes }
where where
add flag (Args mode flags) = Args mode $ flag : flags add flag (Args mode flags) = Args mode $ flag : flags
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment