@@ -4146,7 +4146,13 @@ and print_pexp_apply ~state expr cmt_tbl =
41464146 let partial, attrs = ParsetreeViewer. process_partial_app_attribute attrs in
41474147 let args =
41484148 if partial then
4149- let dummy = Ast_helper.Exp. constant (Ast_helper.Const. int 0 ) in
4149+ let loc =
4150+ {Asttypes. txt = " res.partial" ; Asttypes. loc = expr.pexp_loc}
4151+ in
4152+ let attr = (loc, Parsetree. PTyp (Ast_helper.Typ. any () )) in
4153+ let dummy =
4154+ Ast_helper.Exp. constant ~attrs: [attr] (Ast_helper.Const. int 0 )
4155+ in
41504156 args @ [(Asttypes. Labelled " ..." , dummy)]
41514157 else args
41524158 in
@@ -4730,6 +4736,18 @@ and print_arguments ~state ?(partial = false)
47304736 in
47314737 Doc. concat [Doc. lparen; arg_doc; Doc. rparen]
47324738 | args ->
4739+ (* Avoid printing trailing comma when there is ... in function application *)
4740+ let has_partial_attr, printed_args =
4741+ List. fold_right
4742+ (fun arg (flag , acc ) ->
4743+ let _, expr = arg in
4744+ let has_partial_attr =
4745+ ParsetreeViewer. has_partial_attribute expr.Parsetree. pexp_attributes
4746+ in
4747+ let doc = print_argument ~state arg cmt_tbl in
4748+ (flag || has_partial_attr, doc :: acc))
4749+ args (false , [] )
4750+ in
47334751 Doc. group
47344752 (Doc. concat
47354753 [
@@ -4738,13 +4756,9 @@ and print_arguments ~state ?(partial = false)
47384756 (Doc. concat
47394757 [
47404758 Doc. soft_line;
4741- Doc. join
4742- ~sep: (Doc. concat [Doc. comma; Doc. line])
4743- (List. map
4744- (fun arg -> print_argument ~state arg cmt_tbl)
4745- args);
4759+ Doc. join ~sep: (Doc. concat [Doc. comma; Doc. line]) printed_args;
47464760 ]);
4747- (if partial then Doc. nil else Doc. trailing_comma);
4761+ (if partial || has_partial_attr then Doc. nil else Doc. trailing_comma);
47484762 Doc. soft_line;
47494763 Doc. rparen;
47504764 ])
0 commit comments