# Contributing

## Managing dependencies

To install the dependencies needed for development and local testing, run the `make install`
command.

## Coding style

### Pre-commit

Project uses the [pre-commit](https://pre-commit.com/#install) tool to check and automatically
fix any formatting issue before creating a git commit.

For more information on how it works, see the `.pre-commit-config.yaml` configuration file.

### Commit naming

Project using [gitmoji](https://github.com/carloscuesta/gitmoji) for commit naming


### Typing

Project has a strict typing policy enforced by the [mypy](https://github.com/python/mypy). All
functions with static typing must be described with the `typing` module. For example:

```python
from typing import List


def collect_integers(a: int, b: int) -> List[int]:
    return [a, b]
```

### Linters

- [ruff](https://github.com/charliermarsh/ruff) used to replace Flake8 (plus dozens of plugins),
  black, isort, pydocstyle, yesqa, eradicate, pyupgrade, and autoflake.

- [mypy](https://github.com/python/mypy) to check that your types correctly assigned and used.

## EditorConfig

[EditorConfig](http://editorconfig.org/) is a standard configuration file that aims to ensure
consistent style across multiple programming environments.

Project’s repository contains [an `.editorconfig` file](.editorconfig) describing our formatting
requirements.

Most editors and IDEs support this file either directly or via plugins. See
the [list of supported editors and IDEs](http://editorconfig.org/#download) for detailed
instructions.

If you make sure that your programming environment respects the contents of this file, you will
automatically get correct indentation, encoding, and line endings.

## Changelog

The changelog is automatically generated by GitHub based on the name of the pull request.
