Linters#

GeoIPS uses several linting tools to maintain code quality and consistency. This document describes the linters, how to install them, and how to run them.

Available Linters#

Black#

  • Purpose: Code formatting

  • Configuration: .config/black

  • Description: An uncompromising code formatter that ensures consistent Python code style.

Flake8#

  • Purpose: PEP8 compliance and style checking

  • Configuration: .flake8

  • Plugins: - flake8-docstrings: Enforces numpy docstring standard - flake8-rst-docstrings: Ensures docstrings are valid reStructuredText - flake8-rst: Checks code snippets in RST files

  • Description: A tool that checks Python code against style guide violations and programming errors.

Bandit#

  • Purpose: Security linting

  • Configuration: Default settings

  • Description: A security linter that identifies common security issues in Python code.

Doc8#

  • Purpose: RST linting

  • Configuration: Default settings

  • Description: A linter for reStructuredText files that checks for syntax and style issues in documentation.

Prettier#

  • Purpose: Formatting for YAML, JSON, and other files

  • Configuration: Default settings

  • Description: An opinionated code formatter that supports multiple languages and file formats.

Other Linters Available#

Some other tools are included in the lint extras but are not required:

  • pylint: Static code analysis

  • pinkrst: RST auto-formatting (helpful for passing Doc8)

Installation#

Install all linters using pip or Poetry with the lint extras:

pip install geoips[lint]
poetry install --extras lint

Running the Linters#

You can run linters directly using their command-line interfaces:

# Format Python code
black --config .config/black /path/to/code

# Check Python style and errors
flake8 /path/to/code

# Security linting
bandit -ll -r /path/to/code

# Lint RST documentation
doc8 /path/to/docs

# Format configuration files
prettier --write /path/to/files

Configuration#

  • Black: Configured in .config/black with project-specific settings

  • Flake8: Configured in .flake8 with: - max-line-length=88 (compatible with Black) - numpy docstring convention - Specific error ignores (E203, W503, E712) - File exclusions

  • Doc8: Uses default settings - max-line-length=120

  • Prettier: Uses default settings

Continuous Integration#

Linters are automatically run in CI workflows. All linters must pass before pull requests can be merged.