ihaskell 0.8.3.0 → 0.8.4.0
raw patch · 4 files changed
+44/−19 lines, 4 filesdep ~aesondep ~ipython-kernel
Dependency ranges changed: aeson, ipython-kernel
Files
- ihaskell.cabal +4/−4
- main/Main.hs +31/−7
- src/IHaskell/Eval/Lint.hs +1/−1
- src/IHaskell/Flags.hs +8/−7
ihaskell.cabal view
@@ -7,7 +7,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.8.3.0+version: 0.8.4.0 -- A short (one-line) description of the package. synopsis: A Haskell backend kernel for the IPython project.@@ -54,7 +54,7 @@ hs-source-dirs: src default-language: Haskell2010 build-depends:- aeson >=0.7 && < 0.11,+ aeson >=0.7 && < 0.12, base >=4.6 && < 4.9, base64-bytestring >=1.0, bytestring >=0.10,@@ -141,7 +141,7 @@ transformers -any, ghc >=7.6 || < 7.11, process >=1.1,- aeson >=0.7 && < 0.11,+ aeson >=0.7 && < 0.12, bytestring >=0.10, containers >=0.5, strict >=0.3,@@ -165,7 +165,7 @@ default-language: Haskell2010 build-depends: ihaskell,- aeson >=0.6 && < 0.11,+ aeson >=0.6 && < 0.12, base >=4.6 && < 4.9, base64-bytestring >=1.0, bytestring >=0.10,
main/Main.hs view
@@ -27,7 +27,8 @@ import System.Posix.Signals import qualified Data.Map as Map import qualified Data.Text.Encoding as E-import Data.List (break)+import Data.List (break, last)+import Data.Version (showVersion) -- IHaskell imports. import IHaskell.Convert (convert)@@ -46,6 +47,9 @@ import qualified IHaskell.IPython.Message.UUID as UUID import qualified IHaskell.IPython.Stdin as Stdin +-- Cabal imports.+import Paths_ihaskell(version)+ -- GHC API imports. import GHC hiding (extensions, language) @@ -69,7 +73,7 @@ Right args -> ihaskell args 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 InstallKernelSpec args) = showingHelp InstallKernelSpec args $ do let kernelSpecOpts = parseKernelArgs args@@ -82,6 +86,14 @@ hPutStrLn stderr "This may be a bug!" 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 mode flags act = case find (== Help) flags of@@ -239,8 +251,10 @@ return (state, KernelInfoReply { header = replyHeader+ , protocolVersion = "5.0"+ , banner = "IHaskell " ++ (showVersion version) ++ " GHC " ++ VERSION_ghc , implementation = "IHaskell"- , implementationVersion = VERSION_ipython_kernel+ , implementationVersion = showVersion version , languageInfo = LanguageInfo { languageName = "haskell" , languageVersion = VERSION_ghc@@ -305,11 +319,21 @@ , status = Ok }) --- Always assume that the code is complete, which allows for only--- single line inputs for now.-replyTo _ IsCompleteRequest{} replyHeader state = do- let reply = IsCompleteReply { header = replyHeader, reviewResult = CodeComplete }+-- Check for a trailing empty line. If it doesn't exist, we assume the code is incomplete,+-- otherwise we assume the code is complete. Todo: Implement a mechanism that only requests+-- a trailing empty line, when multiline code is entered.+replyTo _ req@IsCompleteRequest{} replyHeader state = do+ isComplete <- isInputComplete+ let reply = IsCompleteReply { header = replyHeader, reviewResult = isComplete } return (state, reply)++ where+ isInputComplete = do+ let code = lines $ inputToReview req+ if nub (last code) == " "+ then return CodeComplete+ else return $ CodeIncomplete $ indent 4+ indent n = take n $ repeat ' ' replyTo _ req@CompleteRequest{} replyHeader state = do let code = getCode req
src/IHaskell/Eval/Lint.hs view
@@ -187,7 +187,7 @@ _ -> "warning" style :: String -> String -> String- style = printf "<div class=\"suggestion-${cls}\">%s</div>"+ style = printf "<div class=\"suggestion-%s\">%s</div>" named :: String -> String named = printf "<div class=\"suggestion-name\" style=\"clear:both;\">%s</div>"
src/IHaskell/Flags.hs view
@@ -32,6 +32,7 @@ | GhcLibDir String -- ^ Where to find the GHC libraries. | KernelDebug -- ^ Spew debugging output from the kernel. | Help -- ^ Display help text.+ | Version -- ^ Display version text. | ConvertFrom String | ConvertTo String | ConvertFromFormat NotebookFormat@@ -57,7 +58,7 @@ deriving (Eq, Show) -- Which mode IHaskell is being invoked in.-data IHaskellMode = ShowHelp String+data IHaskellMode = ShowDefault String | InstallKernelSpec | ConvertLhs | Kernel (Maybe String)@@ -70,9 +71,7 @@ in case modeIndex of Nothing -> -- Treat no mode as 'console'.- if "--help" `elem` flags- then Left $ showText (Wrap 100) $ helpText [] HelpFormatAll ihaskellArgs- else process ihaskellArgs flags+ process ihaskellArgs flags Just 0 -> process ihaskellArgs flags Just idx ->@@ -177,10 +176,12 @@ ihaskellArgs :: Mode Args 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- onlyHelp = [flagHelpSimple (add Help)]- noMode = mode "IHaskell" (Args (ShowHelp helpStr) []) descr noArgs onlyHelp in noMode { modeGroupModes = toGroup allModes } where add flag (Args mode flags) = Args mode $ flag : flags