Стиль кода Python: есть ли способ настроить линтеры для разделения параметров на несколько строк?
В настоящее время я работаю над проектом Python 3.8 с Django 3.1.4, где я хотел бы, чтобы стиль кода применялся следующим образом:
Разделяйте итерируемые объекты на несколько строк, сохраняя квадратные скобки в отдельных строках от их содержимого. Например:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("DATABASE_NAME", "my_db"),
...
"PORT": os.getenv("DATABASE_PORT", "5432"),
}
}
...
CHOICES = (
(LOCATION, "Location"),
(INTEREST, "Interest"),
(CULTURE, "Culture"),
)
Разделите параметры сигнатуры функции на несколько строк, где они не помещаются в одну, с одним параметром на строку для удобства чтения. Пример:
def test_user_can_filter_all_communities(
self,
filter_field: str,
filter_value: JSONSerializable,
include_results: list,
):
# my code here
...
Самым важным для меня на данный момент является последнее.
Я пытался использовать
autopep8
, и, но, несмотря на то, что я пробовал разные конфигурации для каждого, в настоящее время я не могу добиться этого с помощью автоматического форматирования кода.
Когда я использую, параметры выглядят так:
def test_user_can_filter_all_communities(
self, filter_field: str, filter_value: JSONSerializable, include_results: list
):
что сводит меня с ума, потому что я люблю «перечислять», сколько параметров принимает моя функция / метод сразу. 🙈
И когда я использую
yapf
вот что происходит:
def test_user_can_filter_all_communities(self,
filter_field: str,
filter_value: JSONSerializable,
include_results: list):
К сожалению, это все еще не идеально, потому что я многословен с именами переменных, поэтому продолжение отступа от параметра выше во многих случаях невозможно, при этом также обеспечивается ограничение длины строки.
Я привык писать код таким образом, и этот стиль делает меня продуктивным, помимо того, что помогает мне обнаруживать запахи кода и потенциальные ошибки. Но в настоящий момент я работаю над кодовой базой среднего размера самостоятельно, и у меня уходит слишком много времени, чтобы обеспечить соблюдение этого стиля путем его ручного форматирования.
Есть ли какой-нибудь автоматический форматировщик кода, который может помочь мне в этом? Или кто-нибудь знает, как этого можно достичь с помощью одного из упомянутых?
(Я помню, как работал над проектом 3 года назад, где мы применяли этот стиль кода с помощью
pylint
или же
black
, так что это должно быть возможно, но я не могу понять, как.)
Заранее спасибо.
1 ответ
Добавьте запятую после последнего параметра, тогда черный будет делать то, что вы хотите.
def test_user_can_filter_all_communities(
self, filter_field: str, filter_value: JSONSerializable, include_results: list,
):