Python代码风格:有没有办法将linter配置为将参数拆分为多行?

2024-05-29 06:14:11 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在使用Django 3.1.4开发一个Python 3.8项目,我希望以以下方式实施代码样式:

Split iterables into multiple lines, keeping brackets in separate lines from their contents. For example:

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"),
)

Split function signature parameters into multiple lines where they don't fit the same one, with one parameter per line, for readability. Example:

def test_user_can_filter_all_communities(
    self,
    filter_field: str,
    filter_value: JSONSerializable,
    include_results: list,
):
    # my code here
    ...

目前对我来说最重要的是后者

我曾尝试使用autopep8pylintyapfblack,但尽管尝试了不同的配置,我目前无法使用自动代码格式化程序实现这一点

当我使用black时,参数如下所示:

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):

不幸的是,它仍然不理想,因为我对变量名的描述过于冗长,所以从上面的参数继续缩进在很多时候是不可能的,同时还要强制执行一个行长度限制

我习惯用这种方式编写代码,这种风格让我更有效率,还能帮助我发现代码的气味和潜在的bug。但目前我自己正在开发一个中等大小的代码库,通过手动格式化来实现这种风格占用了我太多的时间

是否有任何自动代码格式化程序可以帮助我实现这一点?或者有人知道如何通过上述其中一种方法实现这一点吗

(我确实记得3年前在一个项目中工作过,我们用pylintblack强制执行这种代码样式,所以它应该在某种程度上是可行的,但我不知道怎么做。)

先谢谢你


Tags: 代码testselffieldincludevaluedefall
1条回答
网友
1楼 · 发布于 2024-05-29 06:14:11

在最后一个参数后添加逗号,black将执行您想要的操作

def test_user_can_filter_all_communities(
    self, filter_field: str, filter_value: JSONSerializable, include_results: list,
):

见:https://github.com/psf/black/issues/1288

相关问题 更多 >

    热门问题