commit 64c20d95f28cc7ce0bfdc0a21a34988fe18b24b7
parent 9539d0cc4bac3d4c6a7352202b2df788c6b905c8
Author: hellekin <hellekin@cepheide.org>
Date: Wed, 22 Oct 2014 18:13:14 -0300
[cleanup] Improve style guide
Diffstat:
M | doc/HACKING.txt | | | 80 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------ |
1 file changed, 68 insertions(+), 12 deletions(-)
diff --git a/doc/HACKING.txt b/doc/HACKING.txt
@@ -3,6 +3,7 @@ Style guidelines
Indentation
-----------
+
Code must be indented using four spaces.
In vim, this can be accomplished using
@@ -12,13 +13,64 @@ In vim, this can be accomplished using
Naming
------
-global variables should be `$UPPERCASE`.
+Short version: $GLOBAL, $local, func_name()
+
+Variables must be declared and scoped.
+
+GLOBAL_VARIABLES # are uppercase unless there's a good reason not to.
+ # (e.g., path as a special meaning in Zsh)
+
+local samplevar # are lowercase and scoped to the function # name
+ # should be readable. Do not make unnecessary
+ # shortcuts that would impede others to read fluidly
+
+# Please comment your functions before coding them: it helps
+# clear the mind on the objective. If it does too much, you
+# probably want to split it. Any reusable code should be
+# isolated.
+any_function() {}
+
+_internals() {} # Prepend an _ if the function is clearly internal,
+ # that is, if it's only called within the scope of
+ # another function.
+
+
+Sample code:
+
+# Sample public command.
+#
+# It shows developers how to write readable code.
+# Returns 0 on success, or fails
+public_command() {
+ local tombpath="$1" # First argument is the path to the tomb
+ local orientation="${2:-South}" # Second optional argument
+ local something is happening
+
+ [[ -z $tombpath ]] && {
+ _failure "Usage public_command tombpath [orientation=South]" }
+
+ case $orientation in
+ (South|North|East|West) break;;
+ (*)
+ _failure "orientation must be one of South, North, East, or West."
+ ;;
+ esac
-local variables should be `$lowercase`, best if it can be written without underscores.
-If you feel the need to name a variable `$longdescriptionofwhatthisisusefulfor`,
-then you're allowed to use underscores. But do you really need?
+ _check_swap # Ensure the available memory is safe
+ _plot $tombpath # Set TOMB{PATH,DIR,FILE,NAME}
-functions should be lowercase+underscores: `do_this()`
+ for is in $TOMBLOOPDEVS; do
+ [[ -k $is ]] && {
+ happening+="$is "
+ } || {
+ something+="$is "
+ }
+ done
+
+ _message "You gotta sort your bones."
+
+ return 0
+}
Reporting to the user
@@ -37,20 +89,22 @@ Here is the deal:
Name (Shortcut) Return When to use
=================================================================================
-_failure (die) exit 1 You want to exit the program with a fatal error.
- You may pass a different exit code as second argument.
-
-_warning (no) You want to inform the user about an error condition.
+_verbose (xxx) You need to check the current state of the program.
_message (say) You want to tell the user about what's going on.
You can pass -n (shortcut: act) for inline messages.
-_verbose (xxx) You need to check the current state of the program.
+_warning (no) You want to inform the user about an error condition.
_success (yes) You want to tell the user about a successful result.
+_failure (die) exit 1 You want to exit the program with a fatal error.
+ You may pass a different exit code as exitval.
+
All messaging function take a single "message" argument.
-_failure takes an exit code as an optional second argument.
+_failure takes an exit code as an optional exitval environment variable.
+
+Additionally you can use _print to pass translatable string without decoration.
Examples:
@@ -61,9 +115,10 @@ Examples:
echo "are useful"
_success "All is fine"
_warning "Something's wrong"
+ _print "Did I really say that?"
_failure "Fatal error: exiting with default exit code 1"
_message "This is not reached, nor the next 'die' command"
- die "I am Jack's dead corpse." 127
+ exitval=127 die "I am Jack's dead corpse."
Will display something like:
@@ -73,4 +128,5 @@ Will display something like:
tomb > Inline messages are useful
tomb (*) All is fine
tomb [W] Something's wrong
+ Did I really say that?
tomb [E] Fatal error: exiting with default exit code 1