mmclassification/CONTRIBUTING.md

2.8 KiB

Contributing to MMClassification

Thanks for your interest in contributing to MMClassification! All kinds of contributions are welcome, including but not limited to the following.

  • Fix typo or bugs
  • Add documentation or translate the documentation into other languages
  • Add new features and components

Workflow

We recommend the potential contributors follow this workflow for contribution.

  1. Fork and pull the latest MMClassification repository, follow get_started to setup the environment.
  2. Checkout a new branch (do not use the master or dev branch for PRs)
git checkout -b xxxx # xxxx is the name of new branch
  1. Edit the related files follow the code style mentioned below
  2. Use pre-commit hook to check and format your changes.
  3. Commit your changes
  4. Create a PR with related information

Code style

Python

We adopt PEP8 as the preferred code style.

We use the following tools for linting and formatting:

  • flake8: A wrapper around some linter tools.
  • isort: A Python utility to sort imports.
  • yapf: A formatter for Python files.
  • codespell: A Python utility to fix common misspellings in text files.
  • mdformat: Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files.
  • docformatter: A formatter to format docstring.

Style configurations of yapf and isort can be found in setup.cfg.

C++ and CUDA

We follow the Google C++ Style Guide.

Pre-commit Hook

We use pre-commit hook that checks and formats for flake8, yapf, isort, trailing whitespaces, markdown files, fixes end-of-files, double-quoted-strings, python-encoding-pragma, mixed-line-ending, sorts requirments.txt automatically on every commit. The config for a pre-commit hook is stored in .pre-commit-config.

After you clone the repository, you will need to install initialize pre-commit hook.

pip install -U pre-commit

From the repository folder

pre-commit install

After this on every commit check code linters and formatter will be enforced.

Before you create a PR, make sure that your code lints and is formatted by yapf.