2021-07-02 20:53:00 +08:00
## Contributing to OpenMMLab
2019-07-31 20:40:59 +08:00
All kinds of contributions are welcome, including but not limited to the following.
2021-09-24 17:26:15 +08:00
- Fix typo or bugs
- Add documentation or translate the documentation into other languages
- Add new features and components
2019-07-31 20:40:59 +08:00
2021-07-02 20:53:00 +08:00
### Workflow
2019-07-31 20:40:59 +08:00
2021-02-01 15:38:03 +08:00
1. fork and pull the latest OpenMMLab repository
2019-07-31 20:40:59 +08:00
2. checkout a new branch (do not use master branch for PRs)
3. commit your changes
4. create a PR
2021-08-22 09:44:51 +08:00
```{note}
If you plan to add some new features that involve large changes, it is encouraged to open an issue for discussion first.
```
2022-05-16 20:47:56 +08:00
2021-07-02 20:53:00 +08:00
### Code style
2019-07-31 20:40:59 +08:00
2021-07-02 20:53:00 +08:00
#### Python
2020-09-29 10:44:44 +08:00
2019-07-31 20:40:59 +08:00
We adopt [PEP8 ](https://www.python.org/dev/peps/pep-0008/ ) as the preferred code style.
We use the following tools for linting and formatting:
2020-09-29 10:44:44 +08:00
2022-05-16 20:47:56 +08:00
- [flake8 ](https://github.com/PyCQA/flake8 ): A wrapper around some linter tools.
2021-02-01 15:38:03 +08:00
- [isort ](https://github.com/timothycrosley/isort ): A Python utility to sort imports.
2022-05-16 20:47:56 +08:00
- [yapf ](https://github.com/google/yapf ): A formatter for Python files.
- [codespell ](https://github.com/codespell-project/codespell ): A Python utility to fix common misspellings in text files.
- [mdformat ](https://github.com/executablebooks/mdformat ): Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files.
2021-02-01 15:38:03 +08:00
- [docformatter ](https://github.com/myint/docformatter ): A formatter to format docstring.
2019-07-31 20:40:59 +08:00
2020-03-01 15:51:40 +08:00
Style configurations of yapf and isort can be found in [setup.cfg ](./setup.cfg ).
2021-02-01 15:38:03 +08:00
We use [pre-commit hook ](https://pre-commit.com/ ) 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.
2020-03-01 15:51:40 +08:00
The config for a pre-commit hook is stored in [.pre-commit-config ](./.pre-commit-config.yaml ).
After you clone the repository, you will need to install initialize pre-commit hook.
2020-09-29 10:44:44 +08:00
```shell
2020-03-01 15:51:40 +08:00
pip install -U pre-commit
```
From the repository folder
2020-09-29 10:44:44 +08:00
```shell
2020-03-01 15:51:40 +08:00
pre-commit install
```
After this on every commit check code linters and formatter will be enforced.
2022-05-16 20:47:56 +08:00
> Before you create a PR, make sure that your code lints and is formatted by yapf.
2019-07-31 20:40:59 +08:00
2021-07-02 20:53:00 +08:00
#### C++ and CUDA
2020-09-29 10:44:44 +08:00
2019-07-31 20:40:59 +08:00
We follow the [Google C++ Style Guide ](https://google.github.io/styleguide/cppguide.html ).