packages feed

hslua-cli 1.0.0 → 1.1.0

raw patch · 3 files changed

+47/−18 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -2,6 +2,15 @@  `hslua-cli` uses [PVP Versioning](https://pvp.haskell.org). +## hslua-cli-1.1.0++Released 2022-09-26.++-   Added support for the `LUA_INIT` environment variable. The+    behavior is as described in the Lua reference manual.++-   Warnings are now enabled when flag `-W` is given.+ ## hslua-cli-1.0.0  Released 2022-09-23.
hslua-cli.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.2 name:                hslua-cli-version:             1.0.0+version:             1.1.0 synopsis:            Command-line interface for Lua description:         Provides an embeddable command-line interface for Lua.                      The interface is compatible with the standard Lua
src/HsLua/CLI.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP               #-} {-# LANGUAGE LambdaCase        #-} {-# LANGUAGE OverloadedStrings #-} {- |@@ -20,16 +21,18 @@ import Data.Foldable (foldl') import Data.Maybe (listToMaybe) import Data.Text (Text)+import Foreign.C.String (withCString) import Foreign.Ptr (nullPtr) import HsLua.Core (LuaE, LuaError) import System.Console.GetOpt-import System.Environment (getArgs, getProgName)+import System.Environment (getArgs, getProgName, lookupEnv) import System.IO (hPutStrLn, stderr) import qualified Lua.Auxiliary as Lua import qualified Lua.Constants as Lua+import qualified Lua.Primary as Lua import qualified HsLua.Core as Lua-import qualified HsLua.Marshalling as Lua import qualified HsLua.Core.Types as Lua+import qualified HsLua.Marshalling as Lua import qualified Data.Text as T import qualified Data.Text.IO as T import qualified HsLua.Core.Utf8 as UTF8@@ -52,7 +55,7 @@     in concat errs ++ usageInfo usageHead luaOptions    let (mscript, arg) = first listToMaybe $ splitAt 1 args-  opts <- foldl' (>>=) (return defaultLuaOpts) actions+  let opts = foldl' (flip ($)) defaultLuaOpts actions   return opts     { optScript = mscript     , optScriptArgs = arg@@ -90,8 +93,13 @@ runStandalone settings = do   opts <- getOptions   settingsRunner settings $ do+    let putErr = Lua.liftIO . hPutStrLn stderr     -- print version info     when (optVersion opts) (showVersion $ settingsVersionInfo settings)+    when (optInteractive opts) $+      putErr "[WARNING] Flag `-i` is not supported yet."+    when (optNoEnv opts) $+      putErr "[WARNING] Flag `-E` is not fully supported yet."      -- push `arg` table     case optScript opts of@@ -107,6 +115,24 @@         Lua.rawseti (Lua.nth 2) 0     Lua.setglobal "arg" +#if MIN_VERSION_lua(2,2,1)+    when (optWarnings opts) $ do+      l <- Lua.state+      -- turn warnings on+      Lua.liftIO $ withCString "@on" $ \w -> Lua.lua_warning l w Lua.FALSE+#endif++    -- Run init code.+    unless (optNoEnv opts) $ do+      init' <- Lua.liftIO $ lookupEnv "LUA_INIT"+      (case init' of+         Just ('@' : filename) -> Lua.dofileTrace filename+         Just cmd              -> Lua.dostring (UTF8.fromString cmd)+         Nothing               -> return Lua.OK)+        >>= \case+        Lua.OK -> pure ()+        _      -> Lua.throwErrorAsException+     -- run code statements and module loading instructions     mapM_ runCode (reverse $ optExecute opts) @@ -165,22 +191,20 @@   }  -- | Lua command line options.-luaOptions :: [OptDescr (Options -> IO Options)]+luaOptions :: [OptDescr (Options -> Options)] luaOptions =   [ Option "e" []-    (flip ReqArg "stat" $ \stat opt -> return $+    (flip ReqArg "stat" $ \stat opt ->         let code = ExecuteCode $ UTF8.fromString stat         in opt{ optExecute = code:optExecute opt })     "execute string 'stat'"    , Option "i" []-    (NoArg $ \opt -> do-        hPutStrLn stderr "[WARNING] Flag `-i` is not supported yet."-        return opt { optInteractive = True })+    (NoArg $ \opt -> opt { optInteractive = True })     "interactive mode -- currently not supported"    , Option "l" []-    (flip ReqArg "mod" $ \mod' opt -> return $+    (flip ReqArg "mod" $ \mod' opt ->       let toName = Lua.Name . UTF8.fromString           code = case break (== '=') mod' of             (glb, '=':m)  -> RequireModule (toName glb) (toName m)@@ -193,18 +217,14 @@      ])    , Option "v" []-    (NoArg $ \opt -> return opt { optVersion = True })+    (NoArg $ \opt -> opt { optVersion = True })     "show version information"    , Option "E" []-    (NoArg $ \opt -> do-        hPutStrLn stderr "[WARNING] Flag `-E` is not supported yet."-        return opt { optNoEnv = True })-    "ignore environment variables -- currently not supported"+    (NoArg $ \opt -> opt { optNoEnv = True })+    "ignore environment variables -- partially supported"    , Option "W" []-    (NoArg $ \opt -> do-        hPutStrLn stderr "[WARNING] Flag `-W` is not supported yet."-        return opt { optWarnings = True })+    (NoArg $ \opt -> opt { optWarnings = True })     "turn warnings on -- currently not supported"   ]