Developer tools#

This guide explains the different types of tools that can help you develop and test your code.

This guide covers:#

General tools#

All of these are optional. Many are very helpful, but they do take a little time to learn. The more time you spend coding, the greater the return-on-investment for using them. It’s a personal decision on whether the time saved by using these outweighs the time required to understand the tools.

Linting tools#

These check your code.

  • flake8 - checks various code style conventions, unused variables, line spacings, etc…

  • mypy

    • Static type checker: enforces proper usage of types.

    • Super useful once you get the hang of it, but definitely an intermediate-advanced tool.

    • Along with high test coverage, probably the best time-saver and project robustness tool.

Formatting tools#

These auto-modify your code.

  • black Forces code to follow specific style, indentations, etc…

  • autoflake Auto-fixes some flake8 failures.

  • isort Auto-sorts and formats your imports.

  • setup-cfg-fmt Sorts and enforces conventions in setup.cfg.

Pre-commit tools#

  • pre-commit, runs all your checks each time you run git commit, preventing bad code from ever getting checked in.

     $ pip install pre-commit
     # install the pre-commit "hook"
     $ pre-commit install
     # then configure in .pre-commit-config.yaml
     # (optionally) Run hooks on demand
     $ pre-commit run --all-files
  • pre-commit-ci

    • Runs all your pre-commit hooks on CI (Continuous Integration).

    • Useful even if contributors don’t install and run your pre-commit hooks locally before they open a PR.

Napari plugin-specific tools#

  • Static plugin checks

    • This is a pre-commit hook. It is intended to be added to your .pre-commit-config.yaml file.

    • It statically (without importing) checks various best practices about your plugin:

    rev: v0.2.0
    hooks: id: napari-plugin-checks
  • Plugin check GitHub action (work in progress)

    • It is intended to be added to your GitHub workflow.

    • It (currently) checks that your plugin is installable, and performs a few sanity checks about Qt backends and dock widgets.

     uses: tlambert03/napari-plugin-action@main
     with: package_name:  <your-package-name>

The next topic in this series is the Survey/Q&A.

Other topics in this series:#