From 6372943d139f74cfa714e413d7f2eda6331c894c Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Tue, 7 Nov 2017 15:57:42 +0100 Subject: [PATCH] Simplify list of input files --- src/plugins/markdown-report/md_gen.ml | 50 ++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/plugins/markdown-report/md_gen.ml b/src/plugins/markdown-report/md_gen.ml index 37fcddd4ad1..aa32175fb9a 100644 --- a/src/plugins/markdown-report/md_gen.ml +++ b/src/plugins/markdown-report/md_gen.ml @@ -146,6 +146,54 @@ let section_stubs env = else content +let get_files () = + let dir_table = Datatype.String.Hashtbl.create 17 in + let add_entry f = + let dir = Filename.dirname f in + let base = Filename.basename f in + let suf = + try + let i = String.rindex base '.' in + String.sub base i (String.length base - i) + with Not_found -> "" + in + let entries = + try Datatype.String.Hashtbl.find dir_table dir + with Not_found -> Datatype.String.Map.empty + in + let subentries = + try Datatype.String.Map.find suf entries + with Not_found -> Datatype.String.Set.empty + in + Datatype.String.( + Hashtbl.replace + dir_table dir (Map.add suf (Set.add base subentries) entries)) + in + List.iter add_entry (Kernel.Files.get()); + let treat_subentry dir dir_files suf files l = + let dir_files = + List.fold_left + (fun acc s -> + if Filename.check_suffix s suf then Datatype.String.Set.add s acc + else acc) + Datatype.String.Set.empty dir_files + in + if Datatype.String.Set.subset dir_files files then + (dir ^ "/*" ^ suf) :: l + else + Datatype.String.Set.elements files @ l + in + let treat_entry dir map l = + try + let dir_files = Array.to_list (Sys.readdir dir) in + Datatype.String.Map.fold (treat_subentry dir dir_files) map l + with Sys_error s -> + Mdr_params.warning "Unable to find directory %s: %s" dir s; + Datatype.String.Map.fold + (fun _ s l -> Datatype.String.Set.elements s @ l) map l + in + Datatype.String.Hashtbl.fold treat_entry dir_table [] + let gen_inputs env = let anchor = "c-input" in let prelude = @@ -166,7 +214,7 @@ let gen_inputs env = plain "that have been considered during the analysis \ are the following:" ); - UL (List.map (fun x -> [Text [ Inline_code x ]]) (Kernel.Files.get ())); + UL (List.map (fun x -> [Text [ Inline_code x ]]) (get_files())); ]] let gen_config env = -- GitLab