X-Git-Url: http://nitlanguage.org diff --git a/lib/opts.nit b/lib/opts.nit index ffa5954..a7789f8 100644 --- a/lib/opts.nit +++ b/lib/opts.nit @@ -127,7 +127,7 @@ end # A count option. Count the number of time this option is present class OptionCount super Option - redef type VALUE: Int + redef type VALUE: Int is fixed # Init a new OptionCount with a `help` message and `names`. init(help: String, names: String...) is old_style_init do super(help, 0, names) @@ -236,7 +236,13 @@ class OptionInt super(help, default, names) end - redef fun convert(str) do return str.to_i + redef fun convert(str) + do + if str.is_int then return str.to_i + + errors.add "Expected an integer for option {names.join(", ")}." + return 0 + end end # An option with a Float as parameter @@ -281,14 +287,12 @@ class OptionContext var rest = new Array[String] # Errors found in the context after parsing - var errors = new Array[String] + var context_errors = new Array[String] private var optmap = new HashMap[String, Option] # Add one or more options to the context - fun add_option(opts: Option...) do - options.add_all(opts) - end + fun add_option(opts: Option...) do options.add_all(opts) # Display all the options available fun usage @@ -309,9 +313,10 @@ class OptionContext end end - # Parse and assign options everywhere in the argument list - fun parse(argv: Collection[String]) + # Parse and assign options in `argv` or `args` + fun parse(argv: nullable Collection[String]) do + if argv == null then argv = args var it = argv.iterator parse_intern(it) end @@ -372,7 +377,7 @@ class OptionContext for opt in options do if opt.mandatory and not opt.read then - errors.add("Mandatory option {opt.names.join(", ")} not found.") + context_errors.add("Mandatory option {opt.names.join(", ")} not found.") end end end @@ -387,10 +392,10 @@ class OptionContext end # Options parsing errors. - fun get_errors: Array[String] + fun errors: Array[String] do var errors = new Array[String] - errors.add_all(errors) + errors.add_all context_errors for o in options do for e in o.errors do errors.add(e)