From 03799d0a93e4a7eb5790836f50cb4a1188c360b6 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Fri, 2 Jan 2026 14:45:28 -0600 Subject: T8232: simplify return value of fold_tree_with_path The details do not need to be exposed in the function signature. --- src/reference_tree.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/reference_tree.ml') diff --git a/src/reference_tree.ml b/src/reference_tree.ml index 81e45cf..d76c480 100644 --- a/src/reference_tree.ml +++ b/src/reference_tree.ml @@ -933,7 +933,7 @@ let validate_tree_filter dir rt ct = List.fold_left try_validate (p, (ctree, out)) l' in let tree, out = - snd (Vytree.fold_tree_with_path validate_path_filter ([], (ct, "")) ct) + Vytree.fold_tree_with_path validate_path_filter ([], (ct, "")) ct in tree, out -- cgit v1.2.3 From 9186d3f1cfff21af08d64f94612967bfa5775c9c Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Mon, 19 Jan 2026 20:24:43 -0600 Subject: T8232: add util get_subtree for reference_tree This is the direct analogue of Config_tree.get_subtree, a safe wrapper around Vytree.get. Note that the twin functions could easily have been abstracted under Tree_alg, however, for such simple functions the redundancy is preferable. --- src/reference_tree.ml | 18 ++++++++++++++++++ src/reference_tree.mli | 4 ++++ 2 files changed, 22 insertions(+) (limited to 'src/reference_tree.ml') diff --git a/src/reference_tree.ml b/src/reference_tree.ml index d76c480..10cc833 100644 --- a/src/reference_tree.ml +++ b/src/reference_tree.ml @@ -94,6 +94,8 @@ let default_data = { let default = Vytree.make default_data "" +let make name = Vytree.make default_data name + (* Loading from XML *) let node_type_of_string s = @@ -602,6 +604,22 @@ let get_default_value reftree path = let data = (Vytree.get_data[@alert "-exn"]) reftree path in data.default_value +let get_subtree ?(with_node=false) node path = + (* alert exn Vytree.get: + [Vytree.Empty_path] checked + [Vytree.Nonexistent_path] caught + *) + match path with + | [] -> node + | _ -> + try + let n = (Vytree.get[@alert "-exn"]) node path in + if with_node then + Vytree.make_full default_data "" [n] + else + Vytree.make_full default_data "" (Vytree.children_of_node n) + with Vytree.Nonexistent_path -> make "" + (* Convert from config path to reference tree path *) let refpath reftree path = let check_existence p = diff --git a/src/reference_tree.mli b/src/reference_tree.mli index 96cb24f..f915275 100644 --- a/src/reference_tree.mli +++ b/src/reference_tree.mli @@ -51,6 +51,8 @@ val default_data : ref_node_data val default : t +val make : string -> t + val load_from_xml : t -> string -> t [@@alert exn "Reference_tree.Bad_interface_definition"] @@ -110,6 +112,8 @@ val get_default_value : t -> string list -> string option [@@alert exn "Vytree.Empty_path"] [@@alert exn "Vytree.Nonexistent_path"] +val get_subtree : ?with_node:bool -> t -> string list -> t + val refpath : t -> string list -> string list val set_tag_data : t -> Config_tree.t -> string list -> Config_tree.t -- cgit v1.2.3