Command-line tool and flake8 plugin to enforce the same settings across multiple language-independent projects.
Useful if you maintain multiple projects and are tired of copying/pasting the same INI/TOML/YAML/JSON keys and values over and over, in all of them.
The CLI now has a nitpick fix
command that modifies configuration files directly (pretty much like black and isort do with Python files).
See the CLI docs for more info.
Many more features are planned for the future, check the roadmap.
A "nitpick code style" is a TOML file with the settings that should be present in config files from other tools.
Example of a style:
["pyproject.toml".tool.black]
line-length = 120
["pyproject.toml".tool.poetry.dev-dependencies]
pylint = "*"
["setup.cfg".flake8]
ignore = "D107,D202,D203,D401"
max-line-length = 120
inline-quotes = "double"
["setup.cfg".isort]
line_length = 120
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
combine_as_imports = true
This style will assert that:
- ... black, isort and flake8 have a line length of 120;
- ... flake8 and isort are configured as above in
setup.cfg
; - ... Pylint is present as a Poetry dev dependency in
pyproject.toml
).
These are the file types currently handled by Nitpick.
- Some files are only being checked and have to be modified manually;
- Some files can already be fixed automatically (with the
nitpick fix
command); - Others are still under construction; the ticket numbers are shown in the table (upvote the ticket with 👍🏻 if you would like to prioritise development).
File type | nitpick check |
nitpick fix |
---|---|---|
Any .ini file |
✅ | ✅ |
Any .json file |
✅ | 🚧 #358 |
Any .toml file |
✅ | ✅ |
Any text file | ✅ | ❌ |
.editorconfig |
✅ | ✅ |
.pre-commit-config.yaml |
✅ | 🚧 #282 |
.pylintrc |
✅ | ✅ |
package.json |
✅ | 🚧 #358 |
pyproject.toml |
✅ | ✅ |
requirements.txt |
✅ | ❌ |
setup.cfg |
✅ | ✅ |
File type | nitpick check |
nitpick fix |
---|---|---|
Any .md (Markdown) file |
🚧 #280 | ❓ |
Any .tf (Terraform) file |
🚧 #318 | ❓ |
.dockerignore |
🚧 #8 | 🚧 #8 |
.gitignore |
🚧 #8 | 🚧 #8 |
.travis.yml |
🚧 #15 | 🚧 #15 |
Dockerfile |
🚧 #272 | 🚧 #272 |
Jenkinsfile |
🚧 #278 | ❓ |
Makefile |
🚧 #277 | ❓ |
Install in an isolated environment with pipx:
# Latest PyPI release
pipx install nitpick
# Development branch from GitHub
pipx install git+https://github.com/andreoliwa/nitpick
On macOS/Linux, install the latest release with Homebrew:
brew install andreoliwa/formulae/nitpick
# Development branch from GitHub
brew install andreoliwa/formulae/nitpick --HEAD
On Arch Linux, install with yay:
yay -Syu nitpick
Add to your project with Poetry:
poetry add --dev nitpick
Or install it with pip:
pip install -U nitpick
To fix and modify your files directly:
nitpick fix
To check for errors only:
nitpick check
Nitpick is also a flake8
plugin, so you can run this on a project with at least one Python (.py
) file:
flake8 .
Nitpick will download and use the opinionated default style file.
You can use it as a template to configure your own style.
If you use pre-commit on your project, add this to the .pre-commit-config.yaml
in your repository:
repos:
- repo: https://github.com/andreoliwa/nitpick
rev: v0.26.0
hooks:
- id: nitpick
To install the pre-commit
and commit-msg
Git hooks:
pre-commit install --install-hooks
pre-commit install -t commit-msg
To start checking all your code against the default rules:
pre-commit run --all-files
Nitpick is being used by projects such as:
- wemake-services/wemake-python-styleguide
- dry-python/returns
- sobolevn/django-split-settings
- catalyst-team/catalyst
- alan-turing-institute/AutSPACEs
- pytest-dev/pytest-mimesis
For more details on styles and which configuration files are currently supported, see the full documentation.