[m-rev.] for review: structured errors for getopt and getopt_io

Julien Fischer jfischer at opturion.com
Sun Jun 15 18:47:52 AEST 2014



On Sun, 15 Jun 2014, Paul Bone wrote:

> On Tue, Jun 10, 2014 at 02:20:17PM +1000, Julien Fischer wrote:
>> diff --git a/library/getopt.m b/library/getopt.m
>> index 6287e3b..9fc647a 100644
>> --- a/library/getopt.m
>> +++ b/library/getopt.m
>> @@ -148,6 +148,27 @@
>>      option_table(OptionType)::in, maybe_option_table(OptionType)::out,
>>      set(OptionType)::out) is det.
>>
>> +% Variants of the above that return structured errors.
>> +% These behave as the above versions except that any error values returned are
>> +% members of the option_error/1 type rather than strings.
>> +
>> +:- pred getopt.process_options_se(option_ops(OptionType)::in(option_ops),
>> +    list(string)::in, list(string)::out, maybe_option_table_se(OptionType)::out)
>> +    is det.
>> +
>> +:- pred getopt.process_options_se(option_ops(OptionType)::in(option_ops),
>> +    list(string)::in, list(string)::out, list(string)::out,
>> +    maybe_option_table_se(OptionType)::out) is det.
>> +
>> +% getopt.process_options_track_se(OptionOps, Args, OptionArgs,
>> +%       NonOptionArgs, OptionTable0, Result, OptionsSet)
>> +
>
> What's this commented out code for?

It's not commented out code; it's the docuemntation for
process_option_track_se.  (There's a similar thing for
process_options_track above -- arguably the documentation should be
better, but I don't intend to address that in this change.)

>
>> +:- pred getopt.process_options_track_se(
>> +    option_ops_track(OptionType)::in(option_ops_track),
>> +    list(string)::in, list(string)::out, list(string)::out,
>> +    option_table(OptionType)::in, maybe_option_table_se(OptionType)::out,
>> +    set(OptionType)::out) is det.
>> +
>>  :- pred init_option_table(
>>      pred(OptionType, option_data)::in(pred(out, out) is nondet),
>>      option_table(OptionType)::out) is det.
>> @@ -255,6 +276,59 @@
>>      --->    ok(option_table(OptionType))
>>      ;       error(string).
>>
>> +:- type maybe_option_table_se(OptionType)
>> +    --->    ok(option_table(OptionType))
>> +    ;       error(option_error(OptionType)).
>> +
>> +:- type option_error(OptionType)
>> +    --->    unrecognized_option(string)
>> +            % An option that is not recognized appeared on the command line.
>> +            % The argument gives the option as it appeared on the command line.
>> +
>> +    ;       option_error(OptionType, string, option_error_reason).
>> +            % An error occurred with a specific option.  The first two arguments
>> +            % identify the option enumeration value and the string that appeared
>> +            % on the command line for that option respectively.  The third
>> +            % argument describes the nature of the error with that option.
>> +
>
> These lines and others are too long.  (Yes the standard is currently 79 but
> I'd prefer to make it 76 please).

Fixed spots where they are over 79 characters.

>
>> +:- type option_error_reason
>> +    --->    unknown_type
>> +            % No type for this option has been specified in the
>> +            % `option_default'/2 predicate.
>> +
>> +    ;       requires_argument
>> +            % The option requires an argument but it occurred on the command
>> +            % line without one.
>> +
>> +    ;       does_not_allow_argument(string)
>> +            % The option does not allow an argument but it was provided with
>> +            % one on the command line.
>> +            % The argument gives the contents of the argument position
>> +            % on the command line.
>> +
>> +    ;       cannot_negate
>> +            % The option cannot be negated but its negated form appeared on
>> +            % the command line.
>> +
>> +    ;       special_handler_failed
>> +            % The special option handler predicate for the option failed.
>> +
>> +    ;       special_handler_missing
>> +            % A special option handler predicate was not provided for the option.
>> +
>> +    ;       special_handler_error(string)
>> +            % The special option handler predicate for the option returned an
>> +            % error.
>> +            % The argument is a string describing the error.
>> +
>> +    ;       requires_numeric_argument(string).
>> +            % The option requires a numeric argument but it occurred on the
>> +            % command line with a non-numeric argument.
>> +            % The third argument gives the argument as it appeared on
>> the +            % command line.
>> +
>
> third argument?

Fixed.  That was a remanant of an earlier version of this change.
(Before I addressed the previous round of review comments.)

>> diff --git a/library/getopt_io.m b/library/getopt_io.m
>> index 84ea522..d4f54f7 100644
>> --- a/library/getopt_io.m
>> +++ b/library/getopt_io.m
>
> Some (maybe all) of the problems above also occur in this file.

Also, fixed.

>
> The implementation itself is fine, the only problems superficial.

Thanks,

Cheers,
Julien.



More information about the reviews mailing list