Стиль кода 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,
):

См .: https://github.com/psf/black/issues/1288

Другие вопросы по тегам