Skip to content

Commit 2393544

Browse files
author
Artem Innokentiev
committed
Added basic codestyle
0 parents  commit 2393544

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

README.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# Evrone Python Codestyle
2+
3+
4+
## Пакетный менеджер
5+
6+
[poetry](https://python-poetry.org) - менеджер зависимостей и сборщик пакетов
7+
8+
9+
## Форматирование кода
10+
11+
[black](https://black.readthedocs.io/en/stable/) - автоформаттер кода по PEP8
12+
13+
Рекомендуемый конфиг в `pyproject.toml`:
14+
```toml
15+
16+
[tool.black]
17+
line-length = 100
18+
target-version = ['py38']
19+
exclude = '''
20+
(
21+
\.eggs
22+
|\.git
23+
|\.hg
24+
|\.mypy_cache
25+
|\.nox
26+
|\.tox
27+
|\.venv
28+
|_build
29+
|buck-out
30+
|build
31+
|dist
32+
)
33+
'''
34+
35+
```
36+
37+
38+
[isort](https://pycqa.github.io/isort/) - автоформаттер блока импортов
39+
40+
Рекомендуемый конфиг в `pyproject.toml`:
41+
```toml
42+
43+
[tool.isort]
44+
line_length = 100
45+
sections = ["FUTURE", "STDLIB", "DJANGO", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"]
46+
multi_line_output = 3
47+
known_django = "django"
48+
profile = "django"
49+
src_paths = "app"
50+
51+
```
52+
53+
54+
## Типизация
55+
56+
[mypy](http://mypy.readthedocs.io) - чекер для статической типизации
57+
58+
59+
Рекомендуемый конфиг `mypy.ini`:
60+
61+
```ini
62+
[mypy]
63+
ignore_missing_imports = True
64+
allow_untyped_globals = True
65+
66+
[mypy-*.migrations.*]
67+
ignore_errors = True
68+
69+
```
70+
71+
72+
## Импорты
73+
74+
Плохо ❌:
75+
```python
76+
# spam.py
77+
from . import foo, bar
78+
```
79+
80+
Хорошо ✅:
81+
```python
82+
83+
# spam.py
84+
from some.absolute.path import foo, bar
85+
```
86+
87+
**Почему?** Потому что абсолютный импорт явно определяет локацию (путь) модуля, который импортируется. При релативном
88+
импорте всегда нужно помнить путь и вычислять в уме локацию модулей `foo.py`, `bar.py` относительно `spam.py`
89+
90+
91+
## Размеры методов, функций и модулей
92+
93+
Предельный размер метода или функции - **50** строк.
94+
Достижение предельного размера говорит о том, что функция (метод) делает слишком много - декомпозируйте действия внутри функции (метода).
95+
96+
97+
Предельный размер модуля - **300** строк.
98+
Достижение предельного размера говорит о том, что модуль получил слишком много логики - декомпозируйте модуль на несколько.
99+
100+
Длина строки - 100 символов.
101+
102+
103+
## Файлы `__init__.py`
104+
105+
В `__init__.py` файлах пишем только импорты.
106+
107+
**Почему?** Потому что `__init__.py` - последнее место, в которое посмотрит программист, который будет читать код в будущем.
108+
109+
110+
## Докстринги
111+
Рекомендуем добавлять докстринги в функции, методы и классы.
112+
113+
**Почему?** Потому что программист, который впервые увидит ваш код, сможет быстрее понять, что в нем происходит.
114+
Код читается намного больше, чем пишется.
115+
116+
117+
## Pull Request
118+
Дифф PR не должен превышать +/- 1000 строк.
119+
120+
**Почему?** Потому что чем больше PR - тем более он становится неконтролируемым и мерж производится "закрыв глаза и заткнув уши".
121+
Также, большинству ревьюверов будет сложно воспринять такой объем изменений за один раз.

0 commit comments

Comments
 (0)