\1 {Contributing} {contributing} Thank you for your interest in the Map Machine project. Since the primary goal of the project is to cover as many tags as possible, the project is crucially depend on contributions as OpenStreetMap itself. \2 {Suggest a tag to support} {} Please, create an issue with \m {icon} label. /* \2 {Add an icon} {} */ \2 {Report a bug} {} Please, create an issue with \m {bug} label. \2 {Fix a typo in documentation} {} This action is not that easy as it supposed to be. We use \ref {http://github.com/enzet/Moire} {Moire} markup and converter to automatically generate documentation for GitHub, website, and \ref {http://wiki.openstreetmap.org/} {OpenStreetMap wiki}. That's why editing Markdown files is not allowed. To fix a typo, open corresponding Moire file in \m {doc} directory (e.g. \m {doc/readme.moi} for \m {README.md}), modify it, and run \m {python map_machine/moire_manager.py}. \2 {Modify the code} {} \3 {First configure your workspace} Make sure you have Python 3.9 development tools. E.g., for Ubuntu, run \m {apt install python3.9-dev python3.9-venv}. Activate virtual environment. E.g. for fish shell, run \m {source venv/bin/activate.fish}. Install the project in editable mode: \code {pip install -e .} {shell} Install formatter, linter and test system\: \m {pip install black~=21.4b0 flake8 mypy pytest pytest-cov}. Be sure to enable Git hooks: \code {git config --local core.hooksPath data/githooks} {shell} If you are using PyCharm, you may want to set up user dictionary as well: \list {\m {cp data/dictionary.xml .idea/dictionaries/.xml}} {in \m {.idea/dictionaries/.xml} change \m {%USERNAME%} to your username,} {restart PyCharm if it is launched.} \3 {Code style} {code-style} We use \ref {http://github.com/psf/black} {Black} code formatter with maximum 80 characters line length for all Python files within the project. Reformat a file is as simple as \m {black -l 80 \formal {file name}}. Reformat everything with \m {black -l 80 map_machine tests}. If you create new Python file, make sure you add \m {__author__ = "\formal {first name} \formal {second name}"} and \m {__email__ = "\formal {author e-mail}"} string variables.