From 9551cb59d3439acb4d40e936fbff4f127f9da4b9 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Wed, 24 Jul 2019 16:00:35 +0000 Subject: [PATCH] CODINSTYLE: adjust to current defacto standards - rename to CODINGSTYLE.md - use "recommendations" instead of "rules" - remove reference to unpackaged shellcheck - try shorten text - mention eval --- CODESTYLE.md => CODINGSTYLE.md | 79 +++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 29 deletions(-) rename CODESTYLE.md => CODINGSTYLE.md (52%) diff --git a/CODESTYLE.md b/CODINGSTYLE.md similarity index 52% rename from CODESTYLE.md rename to CODINGSTYLE.md index e6a4e651141a..3d44642e106c 100644 --- a/CODESTYLE.md +++ b/CODINGSTYLE.md @@ -2,35 +2,61 @@ Thank you for taking interest in contributing to our aports repository. As consistency and readability are so important for the quality of our APKBUILD -and thus the quality of Alpine Linux, we kindly ask to follow these rules. +and thus the quality of Alpine Linux, we kindly ask to follow these +recommendations. ## Language -Alpine Linux APKBUILD files are inherently just shell scripts. As such, they -should pass the shellcheck linter. +Alpine Linux APKBUILD files are inherently just POSIX shell scripts. Try avoid +extensions, even if they work or are accepted by busybox ash. (using keyword +`local` is an exception) ## Naming convention -APKBUILD files uses snake_case. For example functions, variable names etc. are -all lower-cased with using an underscore as a separator/space. Local 'private' -variables and functions are pre-fixed with a single underscore. Double -underscores are reserved and should not be used. +Use snake_case. Functions, variables etc. should be lower-cased with +underscores to separate words. + +Local 'private' variables and functions n global scope should be pre-fixed +with a single underscore to avoid nameclash with internal variables in +`abuild`. + +Double underscores are reserved and should not be used. ```sh _my_variable="data" ``` ### Bracing -Curly braces for functions are on the next line, to indicate a function. +Curly braces for functions are on the same line. + +```sh +prepare() { + ... +} +``` Markers to indicate a compound statement, are on the same line. + +#### if ...; then ```sh -prepare() -{ if [ true ]; then echo "It is so" fi } ``` +#### while ...; do +```sh + while ...; do + ... + done +``` + +#### for ...; do +```sh + for ...; do + ... + done +``` + ### Spacing All keywords and operators are separated by a space. @@ -49,42 +75,37 @@ prepare() This ensures code is always neatly aligned and properly indented. +Space before tab should be avoided. + ## Line length A line should not be longer then 80 lines. While this is not a hard limit, it is strongly recommended to avoid having longer lines, as long lines reduce readability and invite deep nesting. ## Variables + ### Quoting -Always quote strings. As in shell there is no concept of data types (other then -strings). There is no such thing as characters, integers or booleans. All data -should thus be quoted. -```sh -pkgver="0" -``` +Quote strings containing variables, command substitutions, spaces or shell meta +characters, unless careful unquoted expansion is required. + +Don't quote _literal_ integers. ### Bracing -Always use curly braces around variables. While shells do not require this, -being consistent in variable usage helps. Also there is no need to try to -determine what the actual variable is and if it may not end up being empty. +Only use curly braces around variables when needed. -```sh -foo_bar="foobar" -foo="bar" -``` -In the above, it could be argued it is immediately visible that ***$foo_bar*** -is the string 'foobar'. However if the variable is defined var away from the -invocation, this is not clear any longer. To avoid these amigo ties, always -use curly braces. ```sh foo="${foo}_bar" -foo_bar="${foo}" +foo_bar="$foo" ``` ## Subshell usage -Always use `$()` syntax, not backticks, as backticks are hard to spot. +Use `$()` syntax, not backticks, as backticks are hard to spot. ## Sorting Some items tend to benefit from being sorted. A list of sources, dependencies etc. Always try to find a reasonable sort order, where alphabetically tends to be the most useful one. + +## Eval +`eval` is evil and should be avoided. + -- GitLab