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 +9/−0
- hslua-cli.cabal +1/−1
- src/HsLua/CLI.hs +37/−17
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" ]