Complete a first pass of updated contributing guidelines.
This commit is contained in:
parent
7b5ce1d165
commit
08aaaa6fe1
1 changed files with 59 additions and 1 deletions
|
|
@ -37,8 +37,66 @@ Ideally python code should be:
|
||||||
* Broken up into small clear testable functions.
|
* Broken up into small clear testable functions.
|
||||||
* Documented with docstrings (For conventions see below).
|
* Documented with docstrings (For conventions see below).
|
||||||
* Type hinted
|
* Type hinted
|
||||||
* Covered by unit tests
|
* Covered by unit tests (using [pytest](https://docs.pytest.org))
|
||||||
|
|
||||||
The server code is going through significant flux during the transition from v2 to v3, so currently our test coverage is being rebuilt and type checking does not yet pass.
|
The server code is going through significant flux during the transition from v2 to v3, so currently our test coverage is being rebuilt and type checking does not yet pass.
|
||||||
|
|
||||||
|
[Ruff](https://docs.astral.sh/ruff/) is used both for linting and formatting, the codebase. Our custom linter rules are in out `pyproject.toml`. As we improve the codebase more rules are being added to the linter, see `ruff-increased-checking.toml` for checks that we plan to get passing.
|
||||||
|
|
||||||
|
Run `ruff format` to format the code in a way that will pass on our CI.
|
||||||
|
|
||||||
|
Run `ruff check` to check for linter errors.
|
||||||
|
|
||||||
|
To check your code before each commit we recommend putting the following script in tour `.git/hooks` directory with the filename `pre-commit`.
|
||||||
|
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function angrymessage()
|
||||||
|
{
|
||||||
|
RED='\033[1;31m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
printf "\n${RED}Not committing as ruff failed${NC}\n\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap angrymessage ERR
|
||||||
|
|
||||||
|
ruff format --check
|
||||||
|
ruff check
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Docstrings conventions.
|
||||||
|
|
||||||
|
For docstrings we write docstrings in [reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html), and process them with [pydoctor](https://pydoctor.readthedocs.io/).
|
||||||
|
|
||||||
|
For function arguments, return values, and exceptions we use the following style recognised by reStructuredText:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def a_function(arg1: str, arg2: int) -> tuple[float, int]:
|
||||||
|
"""
|
||||||
|
A one sentence summary, in imperative mood, ending with punctuation.
|
||||||
|
|
||||||
|
More detail after a blank line. This could be a whole paragraph.
|
||||||
|
|
||||||
|
When referring to ``code`` in reStructuredText used double backticks
|
||||||
|
|
||||||
|
:param arg1: This is the first argument, we can say everything we need to about it.
|
||||||
|
If the text wrapas ont a new line this line is indented.
|
||||||
|
:param arg2: This is the second argument.
|
||||||
|
|
||||||
|
:returns: Say what it returns without anything within the colons. If returning
|
||||||
|
multiple values a bulleted list is a good idea just make sure:
|
||||||
|
|
||||||
|
* It is indented to 1 level in
|
||||||
|
* There is a blank line before the bullets
|
||||||
|
* The bullet points are ``*`` not ``-``
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
|
||||||
|
The linter rules we use for docstrings are defined by [pydocstyle](https://docs.astral.sh/ruff/rules/#pydocstyle-d). We do not use rules D203, D213, D400.
|
||||||
|
|
||||||
|
The documentation generated by pydoctor from docstrings can be viewed in any merge request (if the CI pipeline has passed) using the "View App" button.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue