let extract ~f_slice_names new_proj_name slicing_project =
  SlicingParameters.feedback ~level:1
    "exporting project to '%s'..." new_proj_name;
  !Db.Slicing.Request.apply_all_internal slicing_project;
  let module S = struct let get = f_slice_names end in
  let module Visi = Visibility (Sin
  let module Transform = Filter.F (Visiin
  let tmp_prj =
    Transform.build_cil_file (new_proj_name ^ " tmp") slicing_project
  in
  let new_prj =
    !Db.Sparecode.rm_unused_globals ~new_proj_name ~project:tmp_prj ()
  in
  Project.remove ~project:tmp_prj ();
  let ctx = Plugin.get_selection_context () in
  Project.copy ~selection:ctx new_prj;
  SlicingParameters.feedback
    ~level:2 "done (exporting project to '%s')." new_proj_name;
  new_prj