diff --git a/src/kernel_services/cmdline_parameters/parameter_builder.ml b/src/kernel_services/cmdline_parameters/parameter_builder.ml index fbad1cab3272dcb7bec80b992711f55f945b4461..80881489f15e2a298c73e0f316f432f1a9c5ec6b 100644 --- a/src/kernel_services/cmdline_parameters/parameter_builder.ml +++ b/src/kernel_services/cmdline_parameters/parameter_builder.ml @@ -70,8 +70,8 @@ let force_ast_compute (** {2 Specific functors} *) (* ************************************************************************* *) -let iter_on_this_parameter stage = - match !Parameter_customize.do_iterate_ref, stage with +let is_parameter_reconfigurable stage = + match !Parameter_customize.is_reconfigurable_ref, stage with | Some false, _ | None, (Cmdline.Early | Cmdline.Extending | Cmdline.Extended | Cmdline.Exiting | Cmdline.Loading) -> @@ -96,17 +96,15 @@ struct let parameters_ref : Typed_parameter.t list ref = ref [] let parameters () = !parameters_ref - let add_parameter group stage param = - if iter_on_this_parameter stage then begin - parameters_ref := param :: !parameters_ref; - let parameter_groups = P.parameters in - try - let group_name = Cmdline.Group.name group in - let parameters = Hashtbl.find P.parameters group_name in - Hashtbl.replace parameter_groups group_name (param :: parameters) - with Not_found -> - assert false - end + let add_parameter group _stage param = + parameters_ref := param :: !parameters_ref; + let parameter_groups = P.parameters in + try + let group_name = Cmdline.Group.name group in + let parameters = Hashtbl.find P.parameters group_name in + Hashtbl.replace parameter_groups group_name (param :: parameters) + with Not_found -> + assert false (* ************************************************************************ *) (** {3 Bool} *) @@ -212,8 +210,10 @@ struct add_set_hook = add_set_hook; add_update_hook = add_update_hook }, negative_option) in + let reconfigurable = is_parameter_reconfigurable stage in let p = - Typed_parameter.create ~name ~help:X.help ~accessor:accessor ~is_set + Typed_parameter.create ~name ~help:X.help ~accessor:accessor + ~visible:is_visible ~reconfigurable ~is_set in add_parameter !Parameter_customize.group_ref stage p; Parameter_customize.reset (); @@ -318,8 +318,10 @@ struct add_set_hook = add_set_hook; add_update_hook = add_update_hook }, get_range) in + let reconfigurable = is_parameter_reconfigurable stage in let p = - Typed_parameter.create ~name ~help:X.help ~accessor ~is_set:is_set + Typed_parameter.create ~name ~help:X.help ~accessor + ~visible:is_visible ~reconfigurable ~is_set:is_set in add_parameter !Parameter_customize.group_ref stage p; add_option X.option_name; @@ -425,8 +427,10 @@ struct add_set_hook = add_set_hook; add_update_hook = add_update_hook }, get_possible_values) in + let reconfigurable = is_parameter_reconfigurable stage in let p = - Typed_parameter.create ~name ~help:X.help ~accessor ~is_set + Typed_parameter.create ~name ~help:X.help ~accessor + ~visible:is_visible ~reconfigurable ~is_set in add_parameter !Parameter_customize.group_ref stage p; add_option X.option_name; @@ -513,8 +517,10 @@ struct add_update_hook = parameter_add_update_hook }, fun () -> []) in + let reconfigurable = is_parameter_reconfigurable stage in let p = - Typed_parameter.create ~name ~help:X.help ~accessor ~is_set + Typed_parameter.create ~name ~help:X.help ~accessor + ~visible:is_visible ~reconfigurable ~is_set in add_parameter !Parameter_customize.group_ref stage p; add_option X.option_name; diff --git a/src/kernel_services/cmdline_parameters/parameter_customize.ml b/src/kernel_services/cmdline_parameters/parameter_customize.ml index 2a6a18e92cd0c0f1a41585c7caae9707f74b2fb5..456dae219a15c6f38969ed908b003ba67619ccc8 100644 --- a/src/kernel_services/cmdline_parameters/parameter_customize.ml +++ b/src/kernel_services/cmdline_parameters/parameter_customize.ml @@ -81,14 +81,14 @@ let argument_must_be_existing_fun () = let group_ref = ref Cmdline.Group.default let set_group s = group_ref := s -let do_iterate_ref = ref None -let do_iterate () = do_iterate_ref := Some true -let do_not_iterate () = do_iterate_ref := Some false +let is_reconfigurable_ref = ref None +let is_reconfigurable () = is_reconfigurable_ref := Some true +let is_not_reconfigurable () = is_reconfigurable_ref := Some false let is_visible_ref = ref true let is_invisible () = is_visible_ref := false; - do_not_iterate () + is_not_reconfigurable () let use_category_ref = ref true let no_category () = use_category_ref := false @@ -124,7 +124,7 @@ let reset () = must_save_ref := true; module_name_ref := empty_string; group_ref := Cmdline.Group.default; - do_iterate_ref := None; + is_reconfigurable_ref := None; is_visible_ref := true; argument_is_function_name_ref := false; argument_may_be_fundecl_ref := false; diff --git a/src/kernel_services/cmdline_parameters/parameter_customize.mli b/src/kernel_services/cmdline_parameters/parameter_customize.mli index d26971988256225f5b5f98a82bfb2a7bba4286ee..49e2f1433d6c778fb4c6d10de01a67bb6eb23032 100644 --- a/src/kernel_services/cmdline_parameters/parameter_customize.mli +++ b/src/kernel_services/cmdline_parameters/parameter_customize.mli @@ -90,7 +90,8 @@ val set_group: Cmdline.Group.t -> unit @since Beryllium-20090901 *) val is_invisible: unit -> unit -(** Prevent the help to list the parameter. Also imply {!do_not_iterate}. +(** Prevent -help from listing the parameter. + Also imply {!is_not_reconfigurable}. @since Carbon-20101201 @modify Nitrogen-20111001 does not appear in the help *) @@ -123,17 +124,21 @@ val argument_must_be_existing_fun: unit -> unit unset, names of defined-only functions will raise an error as well. @since Sodium-20150201 *) -val do_iterate: unit -> unit -(** Ensure that {!iter_on_plugins} is applied to this parameter. By default +val is_reconfigurable: unit -> unit +(** Ensure that the GUI will show this parameter. By default only parameters corresponding to options registered at the - {!Cmdline.Configuring} stage are iterable. - @since Nitrogen-20111001 *) + {!Cmdline.Configuring} stage are reconfigurable. + @since Nitrogen-20111001 + @modify Frama-C+dev [do_iterate] renamed to [is_reconfigurable] +*) -val do_not_iterate: unit -> unit -(** Prevent {!iter_on_plugins} to be applied on the parameter. By default, only +val is_not_reconfigurable: unit -> unit +(** Prevent the GUI from showing this parameter. By default, only parameters corresponding to options registered at the - {!Cmdline.Configuring} stage are iterable. - @since Nitrogen-20111001 *) + {!Cmdline.Configuring} stage are reconfigurable. + @since Nitrogen-20111001 + @modify Frama-C+dev [do_iterate] renamed to [is_reconfigurable] + *) val no_category: unit -> unit (** Prevent a collection parameter to use categories and the extension '+', and @@ -206,7 +211,7 @@ val argument_may_be_fundecl_ref: bool ref val argument_must_be_fundecl_ref: bool ref val argument_must_be_existing_fun_ref: bool ref val group_ref: Cmdline.Group.t ref -val do_iterate_ref: bool option ref +val is_reconfigurable_ref: bool option ref val is_visible_ref: bool ref val module_name_ref: string ref val use_category_ref: bool ref diff --git a/src/kernel_services/cmdline_parameters/typed_parameter.ml b/src/kernel_services/cmdline_parameters/typed_parameter.ml index 92429eec2cb1a28388d784e9da503c02c408f12c..581fe62fbf8756b730889f4167bb9310c834851d 100644 --- a/src/kernel_services/cmdline_parameters/typed_parameter.ml +++ b/src/kernel_services/cmdline_parameters/typed_parameter.ml @@ -36,7 +36,9 @@ type typed_accessor = type parameter = { name: string; help: string; - accessor: typed_accessor; + accessor: typed_accessor; + visible: bool; + reconfigurable: bool; is_set: unit -> bool } include @@ -56,6 +58,8 @@ include add_set_hook = (fun _ -> ()); add_update_hook = (fun _ -> ()) }, None); + visible = false ; + reconfigurable = false ; is_set = fun () -> false } ] let equal = (==) @@ -71,8 +75,8 @@ include let parameters = Datatype.String.Hashtbl.create 97 -let create ~name ~help ~accessor ~is_set = - let p = { name = name; help = help; accessor = accessor; is_set = is_set } in +let create ~name ~help ~accessor ~visible ~reconfigurable ~is_set = + let p = { name; help; accessor; visible; reconfigurable; is_set } in (* parameter name unicity already checks in [Plugin]. *) assert (not (Datatype.String.Hashtbl.mem parameters name)); Datatype.String.Hashtbl.add parameters name p; diff --git a/src/kernel_services/cmdline_parameters/typed_parameter.mli b/src/kernel_services/cmdline_parameters/typed_parameter.mli index 35117db7c005009230504c8fe0144a386d60b469..28fafe6d94b701c16f25e1b9cf7d4f0daa9bcc3f 100644 --- a/src/kernel_services/cmdline_parameters/typed_parameter.mli +++ b/src/kernel_services/cmdline_parameters/typed_parameter.mli @@ -45,6 +45,8 @@ type parameter = private help: string; (** Help message *) accessor: typed_accessor; (** How to get and set the value of the parameter *) + visible: bool; (** Is visible to the user, e.g. in the command-line help *) + reconfigurable: bool; (** Can be reconfigured, e.g. in the GUI *) is_set: unit -> bool (** Is this option really set? *) } include Datatype.S_with_collections with type t = parameter @@ -61,6 +63,8 @@ val create: name:string -> help:string -> accessor:typed_accessor -> + visible:bool -> + reconfigurable:bool -> is_set: (unit -> bool) -> t (**/**) diff --git a/src/kernel_services/plugin_entry_points/kernel.ml b/src/kernel_services/plugin_entry_points/kernel.ml index d60942fa9c8e7be7beaa6ee422e3cb95e1c92f87..2556a163b6e7abaaa7565b3d108adb4b6e5975e2 100644 --- a/src/kernel_services/plugin_entry_points/kernel.ml +++ b/src/kernel_services/plugin_entry_points/kernel.ml @@ -424,11 +424,10 @@ module AutocompleteHelp = P.String_set (struct let option_name = "-autocomplete" - let arg_name = "[+]p1,p2,..." + let arg_name = "p1,p2,..." let help = "displays all Frama-C options, used for shell autocompletion. \ Prints options for the specified plugin names (or '@all' for \ - all plugins). If the first character is '+', \ - only prints visible options." + all plugins). Note: for the kernel, use an empty string." end) let _ = @@ -471,7 +470,7 @@ let () = Parameter_customize.set_group messages let () = Parameter_customize.do_not_projectify () let () = Parameter_customize.do_not_journalize () let () = Parameter_customize.set_cmdline_stage Cmdline.Early -let () = Parameter_customize.do_iterate () +let () = Parameter_customize.is_reconfigurable () module GeneralVerbose = Int (struct @@ -493,7 +492,7 @@ let () = Parameter_customize.set_group messages let () = Parameter_customize.do_not_projectify () let () = Parameter_customize.do_not_journalize () let () = Parameter_customize.set_cmdline_stage Cmdline.Early -let () = Parameter_customize.do_iterate () +let () = Parameter_customize.is_reconfigurable () module GeneralDebug = Zero (struct @@ -517,7 +516,7 @@ let () = let () = Parameter_customize.set_group messages let () = Parameter_customize.set_negative_option_name "" let () = Parameter_customize.set_cmdline_stage Cmdline.Early -let () = Parameter_customize.do_iterate () +let () = Parameter_customize.is_reconfigurable () let () = Parameter_customize.do_not_projectify () let () = Parameter_customize.do_not_journalize () module Quiet = diff --git a/src/kernel_services/plugin_entry_points/plugin.ml b/src/kernel_services/plugin_entry_points/plugin.ml index cb3f72b73511c3c05d29f827e0f63eb9de2a7933..a02122eaa141ba335726ccd72c76267f023e2bd4 100644 --- a/src/kernel_services/plugin_entry_points/plugin.ml +++ b/src/kernel_services/plugin_entry_points/plugin.ml @@ -311,7 +311,7 @@ struct let () = Parameter_customize.set_cmdline_stage Cmdline.Extended; - if is_visible then Parameter_customize.do_iterate () + if is_visible then Parameter_customize.is_reconfigurable () else Parameter_customize.is_invisible () module Dir_name = @@ -517,7 +517,7 @@ struct Parameter_customize.set_group messages; Parameter_customize.do_not_projectify (); Parameter_customize.do_not_journalize (); - Parameter_customize.do_iterate (); + Parameter_customize.is_reconfigurable (); if is_kernel () then begin Parameter_customize.set_cmdline_stage Cmdline.Early; Parameter_customize.set_module_name modname; diff --git a/src/kernel_services/plugin_entry_points/plugin.mli b/src/kernel_services/plugin_entry_points/plugin.mli index 49568f9c4f0eac68c17ce3bcae6eb9fbf04d96f5..39798e3efef3bb17f497d9ef1ff1a7da81101dd9 100644 --- a/src/kernel_services/plugin_entry_points/plugin.mli +++ b/src/kernel_services/plugin_entry_points/plugin.mli @@ -89,9 +89,10 @@ type plugin = private p_shortname: string; p_help: string; p_parameters: (string, Typed_parameter.t list) Hashtbl.t } -(** Only iterable parameters (see {!do_iterate} and {!do_not_iterate}) are - registered in the field [p_parameters]. - @since Beryllium-20090901 *) +(** @since Beryllium-20090901 + @modify Frama-C+dev previously only "iterable" parameters were included, + now all parameters are. +*) module type General_services = sig include S diff --git a/src/plugins/gui/launcher.ml b/src/plugins/gui/launcher.ml index 93505053884d755ef47f144217477f9e8cb76b33..447e7ae8e0a669303dfd0273ca5a7cdac9b44783 100644 --- a/src/plugins/gui/launcher.ml +++ b/src/plugins/gui/launcher.ml @@ -137,7 +137,10 @@ let add_group (box:GPack.box) label options = in let highlight = List.fold_right - (fun p b -> let is_set = add_parameter box p in b || is_set) + (fun p b -> + if p.Typed_parameter.reconfigurable then + let is_set = add_parameter box p in b || is_set + else b) options false in