Welcome to part 3 on coding standards and code quality; these are part 1, and part 2.
This time we will discuss pre-commit.ci and pydocstyle, the latest additions to my toolbox.
First, pre-commit.ci. pre-commit.ci is “a continuous integration service for the pre-commit framework” created by Anthony Sottile (GitHub, Twitter), which is described as follows:
Developers spend a fair chunk of time during their development flow on fixing relatively trivial problems in their code. pre-commit.ci both enforces that these issues are discovered (which is opt-in for each developer’s workflow via pre-commit) but also fixes the issues automatically, letting developers focus their time on more valuable problems.
I have enabled pre-commit.ci on two of my repos (Ignition and incendium) and so far three PRs have been created and successfully merged.
In order to install pre-commit.ci, I signed in using my GitHub account and granted access to both repos, and that was it! I had already created the .pre-commit-config.yaml file for pre-commit, and although it is not required I did add a ci section to that file and customize the autoupdate_commit_msg value to match the Conventional Commits style I adopted back in February. Learn more about pre-commit.ci configuration here.
This is how my .pre-commit-config.yaml file looks:
ci:
autoupdate_commit_msg: 'build(pre-commit.ci): pre-commit autoupdate'
repos:
- repo: https://github.com/psf/black
rev: 21.6b0
hooks:
- id: black
- repo: https://github.com/PyCQA/isort
rev: 5.9.1
hooks:
- id: isort
- repo: https://github.com/PyCQA/flake8
rev: 3.9.2
hooks:
- id: flake8
- repo: https://github.com/PyCQA/pydocstyle
rev: 6.1.1
hooks:
- id: pydocstyle
additional_dependencies:
- toml
Next, pydocstyle. pydocstyle “is a static analysis tool for checking compliance with Python docstring conventions.” It can be installed via python -m pip install pydocstyle or alternatively you could use pydocstyle.py source file directly as it is self-contained.
Right after pip-installing it, I did run into a few issues, mainly because of the print statement from Python 2.7 which were resolved by importing print_function from __future__.
Also, I was lucky to run into pydocstyle right after they enabled full toml configuration and pyproject.toml, since I was already using pyproject.toml for black and isort. In my case I had to add the following section to my pyproject.toml file on the Ignition project:
[tool.pydocstyle]
convention = "google"
add_ignore = ["D205", "D415"]
And since I am copying the docstrings provided by Inductive Automation and they don’t subject themselves to PEP 257, I did have to ignore the following error codes:
D205: 1 blank line required between summary line and descriptionD415: First line should end with a period, question mark, or exclamation point
Both apply to the summary line expanding over more than one line.
Also notice that on the hooks for pydocstyle on my .pre-commit-config.yaml I had to add toml as an additional_dependency, otherwise you might run into issues when running pre-commit hooks.
So now I use black, isort, flake8, and pydocstyle, in that order as recommended by Anthony Sottile himself here, all enforced using pre-commit.
Lastly, if you can, please consider supporting Anthony Sottile via GitHub Sponsors to show your appreciation.
Thanks for reading!