# 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)
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
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
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
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
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)