Coding conventions¶
Format¶
- We should format our code with Black, The uncompromising Python code formatter.
- We should write docstrings for every public method, function and class. It does not have to be elaborate. Just explain what it simply does!
$ black PyFunceble && black tests
Linting¶
Our code should pass a pylint
check without any issue (exit 0).
$ pylint PyFunceble && pylint tests
Coverage¶
Our code should have at least 60% of coverage.
Note
Coverage unrelevant code/files can be muted.
$ coverage run setup.py test && coverage report -m
Distribution¶
Our code should be shipped (after each commit) with a new version and a new version.yaml
file.
That file should ALWAYS be generated with the following.
Note
An exception is granted for detached branch (not dev
nor master
)
and no code changes.
$ # Prepare our files, :code:`version.yaml` and code for production/dev usage.
$ PyFunceble --production
Commit¶
All your commits should be - when possible - be signed with PGP. (More information can be found on GitHub documentation)
Please note the usage of -S
into the commit command which means that we sign the commit.
The commit message may be formatted like follow:
Note
An exception is granted for no code changes.
- ::
Short explanation (max 79 char).
Paragraphs with some details/context (if needed).
Git Hook¶
If one may want to automate the process.
Here is a git hook (as proposition) to be set into .git/hooks/pre-commit
.
#!/usr/bin/env bash
# We print what's going on.
set -x
# We stop on error.
set -e
# We get top level path.
rootDirectory="$(git rev-parse --show-toplevel)"
# We construct our list of directories.
ourDirectories="${rootDirectory}/PyFunceble ${rootDirectory}/tests"
if [[ ! -z "$(git status --porcelain | awk '{ if ($NF > 0 && substr($1,1,1) != "?" && $2 ~ '/\.py/' ) print $2}')" ]]
then
hash find
hash isort
hash black
hash pylint
hash coverage
for directory in $(echo ${ourDirectories})
do
# We sort the imports.
find "${directory}" -name "*.py" -exec isort {} \;
# We format the code.
black "${directory}"
# We lint the code.
pylint "${directory}"
done
cd "${rootDirectory}"
coverage run setup.py test
fi
set +e
set +x
exit 0