Style and formatting
Code style
Ibis uses several code linters, like ruff, shellcheck, statix, nixpkgs-fmt and others, that are enforced by CI. Developers should run them locally before submitting a PR.
- Install
pre-commit
pip install pre-commit- Run
pre-commit run --all-filesSome of the packages needed to run the pre-commit linting can not be installed automatically (e.g. prettier, actionlint, shellcheck), and they need to be installed through a system package manager.
Optionally, you may want to setup the pre-commit hooks to run automatically when making a git commit. To do this, run the following from the root of the Ibis repository:
pre-commit installThis will run the code linters automatically when you make a git commit. If you want to skip these checks, do git commit --no-verify
If you use nix-shell, all of these are already setup for you and ready to use, and you don’t need to do anything to install these tools.
Docstrings
We use numpydoc as our standard format for docstrings.
Documentation, blog, and other prose style
Always capitalize Ibis in prose.
General points on style and word usage
Avoid the passive voice. Either Ibis does something or the user does something or a particular backend does something.
Try to avoid using words like “simply”, “simple”, “obviously”, “just”, when describing things that Ibis makes easier. Either the simplicity is self-evident, or it isn’t and you are inadvertently insulting the reader.
Prose should be authored by you™. We discourage LLM-written docs and posts, but you are free to use these tools to aid in your writing.
Use American English spelling and grammar. For example, use “color” not “colour”, “realize” not “realise”, and “behavior” not “behaviour”.
Text formatting
Wrap long prose strings to fewer than 90 characters per line. It is very helpful to reviewers when looking at diffs of prose.
- In Vim you can use
gqand then a movement to wrap.gqGto wrap an entire document. - In Neovim you can use
gwand then a movement to wrap.gwGto wrap and entire document. - In Emacs you can use
fill-paragraph. - VSCode has a plugin called Rewrap (and probably several others).
Wrapping bulleted sentences requires a bit of extra attention. Ensure that the wrapped line begins in-line with the start of the bulleted text, not the bullet.
* This is a long sentence that is a bulleted sentence and perhaps it shouldn't
have been a bullet but it got away from me and, well, here we are.
Do not commit Jupyter notebooks. You are more than welcome to author docs in Jupyter but the ipynb file should be converted to qmd. (We use notebooks for tutorials and interactive work, but for prose review, JSON is suboptimal).
Use # Sentence case for section headers, not # Title Case for Headers
Quarto
Any computations that can’t or shouldn’t be done again should use freeze: auto in the YAML front matter. This is the default behavior for documents in the docs/posts directory.
NEVER use freeze: true as this results in silently stale pages.
Format code blocks with black or ruff where possible.
Prefer language over {.language} for non-executable code blocks:
Prefer this:
```python
code here
```
Over this:
```{.python}
code here
```