-
Notifications
You must be signed in to change notification settings - Fork 9
Style Guide
raphink edited this page Jan 4, 2013
·
1 revision
It is recommended to align columns where it makes sense, for example
let eol = Util.eol let indent = Util.indent
is recommended over
let eol = Util.eol let indent = Util.indent
"|" and "." should be aligned, too
let spec = [ label "spec" . indent? . alias_list "user" sto_to_com_user . sep_cont . spec_list . ( sep_col . spec_list )* . eol ]
It is recommended, when possible, to use common modules to write your Augeas lens. For example, you can declare
let eol = Util.eol let indent = Util.indent let comment = Util.comment let empty = Util.empty
Or, if you need a space separator that defaults to two tabs
let sep_twotabs = Util.del_ws "\t\t"
If you are writing an INI File, you can use the IniFile module
let entry = IniFile.entry setting let record = IniFile.record "target" entry let lns = IniFile.lns record
Augeas can't deal with recursive definitions. Thus, a definition like
Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List
will have to be written as
let cmnd_spec_list = cmnd_spec . ( sep_com . cmnd_spec )*
Naming patterns for generic variables:
- ignore/delete: del_*:
let del_ws = del /[ \t]+/ let del_ws_spc = del_ws " " let del_ws_tab = del_ws "\t"
- separators: sep_*, e.g. sep_spc, sep_tab, sep_eq
let sep_spc = del /[ \t]+/ " " let sep_cont = del /([ \t]+|[ \t]*\\\\\n[ \t]*)/ " " let sep_com = sep_cont? . Util.del_str "," . sep_cont?
- value to separator: value_to_* or sto_to_*. sto_to_* is preferred when the variable includes a store command:
let value_to_eq = /[^,=:#() \t\n\\\\]+/ let sto_to_eq = store /[^,=:#() \t\n\\\\]+/
In some cases, it might be useful to define local variables for a long definition, when this variable is not shared by other definitions and is not self-explanatory.
For example, writing
let comment = [ label "comment" . del /[ \t]*#[ \t]*/ "# " . store /([^ \t\n].*[^ \t\n]|[^ \t\n])/ . eol ]
might not be as explicit as
let comment = let sto_to_eol = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/ in [ label "comment" . del /[ \t]*#[ \t]*/ "# " . sto_to_eol . eol ]