Browse Source

Refactore function to prettify rc file

 + Prettifying code now leaves aside, refactored. A mli file has been added, to
 ensure easy reuse.
 + It is usable in the edit command now. The summary use it to avoid double
 display of things, and to be more accurate to the changes really done.
 + Linked to #12.
Leo 9 years ago
parent
commit
a762a77e37
3 changed files with 69 additions and 20 deletions
  1. 1 1
      src/edit_command.ml
  2. 27 19
      src/unify.ml
  3. 41 0
      src/unify.mli

+ 1 - 1
src/edit_command.ml

@@ -40,7 +40,7 @@ open Core.Std;;
 
 (* Function to remove empty element in a list *)
 let epur =
-     List.filter ~f:(function "" -> false | _ -> true)
+  Unify.prettify_cmd
 ;;
 
 (* Function to create a new list augmented by some commands *)

+ 27 - 19
src/unify.ml

@@ -55,12 +55,13 @@ let make_uniq dubbled_entries =
       | true -> false))
 ;;
 
-(* Removing doubled entries (cmds). We need to remove carriage return before
- * deduplicating, since they don't need to be in rc file, and the first one
- * would be kept during deduplication. *)
-let prettify rc_file =
-  let cmds = rc_file.Settings_v.progs in
-  let without_lr = (* Removing line return, and trailing spaces *)
+(* Remove doubled or void entries in a list. Commands are cleanup (removing
+ * space caracters at the bottom and at the end) *)
+(* TODO Test it separatly, reusing tests from edit_command.ml *)
+let prettify_cmd cmds =
+  let without_lr =
+  (* Removing line return, and trailing spaces, at the end or
+  at the start of a command *)
     List.filter_map cmds ~f:(fun str ->
       trim str |> function
         | "" ->
@@ -68,19 +69,26 @@ let prettify rc_file =
           None
         | s -> Some s)
   in
-  let unique = make_uniq without_lr in
-  (* Store the deduplicated list in new rc_file *)
-  let unified_rc = {rc_file with Settings_v.progs = unique} in
-  (* If there is the same number of element, each one is present only once. *)
-  if List.(length unique = length without_lr) then
-    begin
-      Messages.debug "No duplicate found";
-      unified_rc
-    end
+
+  (* Remove doubled entries *)
+  let unified_rc = make_uniq without_lr in
+
+  (* Display whether duplicates were found *)
+  if List.(length unified_rc = length without_lr) then
+    Messages.debug "No duplicate found"
   else
-    begin
-      Messages.debug "Duplicate found, removed";
-      unified_rc
-    end
+    Messages.debug "Duplicate found, removed";
+
+  unified_rc
+;;
+
+(* Removing doubled entries (cmds). We need to remove carriage return before
+ * deduplicating, since they don't need to be in rc file, and the first one
+ * would be kept during deduplication. *)
+let prettify rc_file =
+  let cmds = rc_file.Settings_v.progs in
+  let unique = prettify_cmd cmds in
+  (* Store the deduplicated list in new rc_file *)
+  {rc_file with Settings_v.progs = unique}
 ;;
 

+ 41 - 0
src/unify.mli

@@ -0,0 +1,41 @@
+(******************************************************************************)
+(* Copyright © Joly Clément, 2014-2015                                        *)
+(*                                                                            *)
+(*  leowzukw@vmail.me                                                         *)
+(*                                                                            *)
+(*  Ce logiciel est un programme informatique servant à exécuter              *)
+(*  automatiquement des programmes à l'ouverture du terminal.                 *)
+(*                                                                            *)
+(*  Ce logiciel est régi par la licence CeCILL soumise au droit français et   *)
+(*  respectant les principes de diffusion des logiciels libres. Vous pouvez   *)
+(*  utiliser, modifier et/ou redistribuer ce programme sous les conditions    *)
+(*  de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA    *)
+(*  sur le site "http://www.cecill.info".                                     *)
+(*                                                                            *)
+(*  En contrepartie de l'accessibilité au code source et des droits de copie, *)
+(*  de modification et de redistribution accordés par cette licence, il n'est *)
+(*  offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons, *)
+(*  seule une responsabilité restreinte pèse sur l'auteur du programme,  le   *)
+(*  titulaire des droits patrimoniaux et les concédants successifs.           *)
+(*                                                                            *)
+(*  A cet égard  l'attention de l'utilisateur est attirée sur les risques     *)
+(*  associés au chargement,  à l'utilisation,  à la modification et/ou au     *)
+(*  développement et à la reproduction du logiciel par l'utilisateur étant    *)
+(*  donné sa spécificité de logiciel libre, qui peut le rendre complexe à     *)
+(*  manipuler et qui le réserve donc à des développeurs et des professionnels *)
+(*  avertis possédant  des  connaissances  informatiques approfondies.  Les   *)
+(*  utilisateurs sont donc invités à charger  et  tester  l'adéquation  du    *)
+(*  logiciel à leurs besoins dans des conditions permettant d'assurer la      *)
+(*  sécurité de leurs systèmes et ou de leurs données et, plus généralement,  *)
+(*  à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.        *)
+(*                                                                            *)
+(*  Le fait que vous puissiez accéder à cet en-tête signifie que vous avez    *)
+(*  pris connaissance de la licence CeCILL, et que vous en avez accepté les   *)
+(*  termes.                                                                   *)
+(******************************************************************************)
+
+open Core.Std;;
+
+val make_uniq : 'a list -> 'a list
+val prettify_cmd : string list -> string list
+val prettify : Settings_t.rc_file -> Settings_t.rc_file