[Libguestfs] [libnbd PATCH 3/3] generator: indent C argument list 2 spaces relative to function designator

Laszlo Ersek lersek at redhat.com
Thu Apr 20 15:11:52 UTC 2023


On 4/20/23 16:36, Richard W.M. Jones wrote:
> On Thu, Apr 20, 2023 at 04:04:58PM +0200, Laszlo Ersek wrote:
>> Change the optional "parens" parameter of "print_arg_list" from bool to a
>> new union type. The new union type has three data constructors, NoParens
>> (matching the previous "false" value), ParensSameLine (matching the
>> previous "true" value), and a third constructor called "ParensNewLine",
>> which wraps an "int". [ParensNewLine n] stands for the following
>> formatting construct (with wrapping):
>>
>>> ret_type foobar (
>>>            type1 param1, type2 param2, type3 param3, type4 param4,
>>>            type5 param5
>>>          );
>>> <---n--->
> 
> I would have called it ParensNewLineWithIndent, and I would
> have called this:
> 
>> +type args_style = NoParens | ParensSameLine | ParensNewLine of int
> 
> parens_style or parens_t just to tie it back to the only parameter
> where it is used.

I'll adopt these, thanks!

> 
>> +let rec print_arg_list ?(wrap = false) ?maxcol ?handle ?types
>> +          ?(parens = ParensSameLine) ?closure_style args optargs =
>> +  (match parens with
>> +   | NoParens -> ()
>> +   | ParensSameLine -> pr "("
>> +   | ParensNewLine indent ->
>> +       pr "(\n";
>> +       for i = 0 to indent + 2 - 1 do
>> +         pr " "
>> +       done
> 
> libguestfs common/mlstdutils/std_utils.ml has a "spaces" function
> which might be worth grabbing for this.  The license is compatible
> enough, and if not as author I give you permission.
> 
>>    if wrap then
>>      pr_wrap ?maxcol ','
>>        (fun () -> print_arg_list' ?handle ?types ?closure_style args optargs)
>>    else
>>      print_arg_list' ?handle ?types ?closure_style args optargs;
>> -  if parens then pr ")"
>> +  (match parens with
>> +   | NoParens -> ()
>> +   | ParensSameLine -> pr ")"
>> +   | ParensNewLine indent ->
>> +       pr "\n";
>> +       for i = 0 to indent - 1 do
>> +         pr " "
>> +       done;
>> +       pr ")"
>> +  )
> 
> & here.

Well I took the open-coded loop directly from the "pr_wrap"
implementation [generator/utils.ml] :)

...
         for i = 0 to wrapping_col-1 do pr " " done;
...

So I guess I should rebase that to the "spaces" function too.

Now, looking up what "spaces" does...

    let spaces n = String.make n ' '

OK, that's simple enough. (But, I agree it adds value: "spaces 5" is
much easier to understand than "String.make 5 ' '".)

> 
> The rest looks good to me.

Thanks!
Laszlo



More information about the Libguestfs mailing list