diff options
-rw-r--r-- | tools/addlabels.ml | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/addlabels.ml b/tools/addlabels.ml index c19dac016..7997946d6 100644 --- a/tools/addlabels.ml +++ b/tools/addlabels.ml @@ -183,6 +183,20 @@ let rec insert_labels_app ~labels ~text args = | _ -> () +let insert_labels_app ~labels ~text args = + let labels, opt_labels = + List.partition labels ~f:(fun l -> l = "" || l.[0] <> '?') in + let nopt_labels = + List.map opt_labels + ~f:(fun l -> String.sub l ~pos:1 ~len:(String.length l - 1)) in + (* avoid ambiguous labels *) + if List.exists labels ~f:(List.mem ~set:nopt_labels) then () else + let aopt_labels = opt_labels @ nopt_labels in + let args, lab_args = List.partition args ~f:(fun (l,_) -> l = "") in + (* only optional arguments are labeled *) + if List.for_all lab_args ~f:(fun (l,_) -> List.mem l ~set:aopt_labels) + then insert_labels_app ~labels ~text args + let rec add_labels_expr ~text ~values ~classes expr = let add_labels_rec ?(values=values) expr = add_labels_expr ~text ~values ~classes expr in |