X-Git-Url: http://nitlanguage.org diff --git a/lib/opts.nit b/lib/opts.nit index d6efd3e..5a226b9 100644 --- a/lib/opts.nit +++ b/lib/opts.nit @@ -29,19 +29,19 @@ abstract class Option var errors: Array[String] = new Array[String] # Is this option mandatory? - var mandatory: Bool writable = false + var mandatory: Bool = false is writable # Is this option hidden from `usage`? - var hidden: Bool writable = false + var hidden: Bool = false is writable # Has this option been read? - var read: Bool writable = false + var read: Bool = false is writable # Current value of this option - var value: VALUE writable + var value: VALUE is writable # Default value of this option - var default_value: VALUE writable + var default_value: VALUE is writable # Create a new option init(help: String, default: VALUE, names: nullable Array[String]) @@ -138,7 +138,7 @@ abstract class OptionParameter protected fun convert(str: String): VALUE is abstract # Is the parameter mandatory? - var parameter_mandatory: Bool writable = true + var parameter_mandatory: Bool = true is writable redef fun read_param(it) do @@ -194,11 +194,7 @@ class OptionEnum redef fun pretty_default do - if default_value != null then - return " ({values[default_value]})" - else - return "" - end + return " ({values[default_value]})" end end @@ -245,23 +241,15 @@ end # Context where the options process class OptionContext # Options present in the context - var options: Array[Option] + var options = new Array[Option] # Rest of the options after `parse` is called - var rest: Array[String] + var rest = new Array[String] # Errors found in the context after parsing - var errors: Array[String] + var errors = new Array[String] - private var optmap: Map[String, Option] - - init - do - options = new Array[Option] - optmap = new HashMap[String, Option] - rest = new Array[String] - errors = new Array[String] - end + private var optmap = new HashMap[String, Option] # Add one or more options to the context fun add_option(opts: Option...) do @@ -294,6 +282,14 @@ class OptionContext parse_intern(it) end + # Must all option be given before the first argument? + # + # When set to `false` (the default), options of the command line are + # all parsed until the end of the list of arguments or until "--" is met (in this case "--" is discarded). + # + # When set to `true` options are parsed until the first non-option is met. + var options_before_rest = false is writable + # Parse the command line protected fun parse_intern(it: Iterator[String]) do @@ -331,6 +327,10 @@ class OptionContext else rest.add(it.item) it.next + if options_before_rest then + rest.add_all(it.to_a) + parseargs = false + end end end end @@ -354,7 +354,7 @@ class OptionContext fun get_errors: Array[String] do - var errors: Array[String] = new Array[String] + var errors = new Array[String] errors.add_all(errors) for o in options do for e in o.errors do