CONTRIBUTING.md 2.51 KB
Newer Older
Zaida Zhou's avatar
Zaida Zhou committed
1
## Contributing to OpenMMLab
Kai Chen's avatar
Kai Chen committed
2

limm's avatar
limm committed
3
All kinds of contributions are welcome, including but not limited to the following.
Kai Chen's avatar
Kai Chen committed
4

limm's avatar
limm committed
5
6
7
- Fix typo or bugs
- Add documentation or translate the documentation into other languages
- Add new features and components
Kai Chen's avatar
Kai Chen committed
8

limm's avatar
limm committed
9
### Workflow
Kai Chen's avatar
Kai Chen committed
10

limm's avatar
limm committed
11
12
13
14
1. fork and pull the latest OpenMMLab repository
2. checkout a new branch (do not use master branch for PRs)
3. commit your changes
4. create a PR
Kai Chen's avatar
Kai Chen committed
15

limm's avatar
limm committed
16
17
```{note}
If you plan to add some new features that involve large changes, it is encouraged to open an issue for discussion first.
18
```
limm's avatar
limm committed
19
### Code style
20

limm's avatar
limm committed
21
#### Python
22

limm's avatar
limm committed
23
We adopt [PEP8](https://www.python.org/dev/peps/pep-0008/) as the preferred code style.
24

limm's avatar
limm committed
25
We use the following tools for linting and formatting:
26

limm's avatar
limm committed
27
28
29
30
31
- [flake8](http://flake8.pycqa.org/en/latest/): A wrapper around some linter tools.
- [yapf](https://github.com/google/yapf): A formatter for Python files.
- [isort](https://github.com/timothycrosley/isort): A Python utility to sort imports.
- [markdownlint](https://github.com/markdownlint/markdownlint): A linter to check markdown files and flag style issues.
- [docformatter](https://github.com/myint/docformatter): A formatter to format docstring.
32

limm's avatar
limm committed
33
Style configurations of yapf and isort can be found in [setup.cfg](./setup.cfg).
34

limm's avatar
limm committed
35
36
37
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.
The config for a pre-commit hook is stored in [.pre-commit-config](./.pre-commit-config.yaml).
38

limm's avatar
limm committed
39
After you clone the repository, you will need to install initialize pre-commit hook.
40
41
42
43
44

```shell
pip install -U pre-commit
```

limm's avatar
limm committed
45
From the repository folder
46
47

```shell
limm's avatar
limm committed
48
pre-commit install
49
50
```

limm's avatar
limm committed
51
Try the following steps to install ruby when you encounter an issue on installing markdownlint
52
53

```shell
limm's avatar
limm committed
54
55
56
57
# install rvm
curl -L https://get.rvm.io | bash -s -- --autolibs=read-fail
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm autolibs disable
58

limm's avatar
limm committed
59
60
# install ruby
rvm install 2.7.1
Zaida Zhou's avatar
Zaida Zhou committed
61
```
62

limm's avatar
limm committed
63
Or refer to [this repo](https://github.com/innerlee/setup) and take [`zzruby.sh`](https://github.com/innerlee/setup/blob/master/zzruby.sh) according its instruction.
Kai Chen's avatar
Kai Chen committed
64

limm's avatar
limm committed
65
After this on every commit check code linters and formatter will be enforced.
Kai Chen's avatar
Kai Chen committed
66

limm's avatar
limm committed
67
>Before you create a PR, make sure that your code lints and is formatted by yapf.
68

69
#### C++ and CUDA
70

71
We follow the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).