mpeterv 247c8a9cce Redesign argument storing
* Use state objects instead of tons of locals in the main
  function.
* Use actions for storing arguments into result table.
  Actions are now called at the end of each invocation,
  with result table, target index, arguments and overwrite flag as
  arguments.
* Remove command actions.
* Improve error messages, refer to options by the last used alias
  instead of the main name.

TODO:

* Improve error messages further ("argument 'foo' is required"
  -> "missing argument 'foo'", etc.).
* Add actions for positional arguments.
* Add actions for commands (should be called with final results
  after parsing is over, in "innermost first" order).
* Allow referring to built-in actions by strings a-la Python
  (e.g. action = "store_false").
* Allow setting initial value to be stored at target index
  for each option (perhaps use default value for that).
* Add more tests, particularly for actions.
2015-10-29 21:00:49 +03:00
2015-10-29 21:00:49 +03:00
2015-10-29 21:00:49 +03:00
2015-06-09 21:57:02 +03:00
2015-09-24 18:55:10 +03:00
2015-09-24 18:55:10 +03:00
2015-01-15 16:25:00 +03:00

argparse

Build Status Coverage Status

Argparse is a feature-rich command line parser for Lua inspired by argparse for Python.

Argparse supports positional arguments, options, flags, optional arguments, subcommands and more. Argparse automatically generates usage, help and error messages.

Simple example:

-- script.lua
local argparse = require "argparse"

local parser = argparse("script", "An example.")
parser:argument("input", "Input file.")
parser:option("-o --output", "Output file.", "a.out")
parser:option("-I --include", "Include locations."):count("*")

local args = parser:parse()
print(args)  -- Assuming print is patched to handle tables nicely.
$ lua script.lua foo
{
   input = "foo",
   output = "a.out",
   include = {}
}
$ lua script.lua foo -I/usr/local/include -Isrc -o bar
{
   input = "foo",
   output = "bar",
   include = {"/usr/local/include", "src"}
}
$ lua script.lua foo bar
Usage: script [-o <output>] [-I <include>] [-h] <input>

Error: too many arguments
$ lua script.lua --help
Usage: script [-o <output>] [-I <include>] [-h] <input>

An example. 

Arguments: 
   input                 Input file.

Options: 
   -o <output>, --output <output>
                         Output file. (default: a.out)
   -I <include>, --include <include>
                         Include locations.
   -h, --help            Show this help message and exit.
$ lua script.lua foo --outptu=bar
Usage: script [-o <output>] [-I <include>] [-h] <input>

Error: unknown option '--outptu'
Did you mean '--output'?

Contents

Installation

Using LuaRocks

Installing argparse using LuaRocks is simple:

$ luarocks install argparse

Without LuaRocks

Download src/argparse.lua file and put it into the directory for Lua libraries or your working directory.

Tutorial

The tutorial is available online. If argparse has been installed using LuaRocks 2.1.2 or later, it can be viewed using luarocks doc argparse command.

Tutorial HTML files can be built using Sphinx: sphinx-build docsrc doc, the files will be found inside doc/.

Testing

argparse comes with a testing suite located in spec directory. busted is required for testing, it can be installed using LuaRocks. Run the tests using busted command from the argparse folder.

License

argparse is licensed under the same terms as Lua itself (MIT license).

Description
Feature-rich command line parser for Lua
Readme MIT 774 KiB
Languages
Lua 94.7%
Python 5.3%