在映射理解中禁用 dict 表达式的黑色格式
Disable Black formatting of dict expression within mapping comprehensions
我目前正在研究 Black 作为我们的默认格式化程序,但是,我遇到了一些格式化不佳的边缘情况,我想知道是否有办法获得我想要的结果.
Black 的文档 部分探讨了我的问题 ,我有一个水平分布的字典表达式,我想保持这种方式,因为我期待行待补充,例如:
# Black would keep this as-is because of the trailing comma
TRANSLATIONS = {
"en_us": "English (US)",
"pl_pl": "polski",
}
但在我的例子中,字典在列表推导中:
res = [
{
'id': item.id,
'name': item.name,
}
for item in items.select()
]
无论尾随逗号如何,黑方都会崩溃,如下所示:
res = [
{"id": item.id, "name": item.name,}
for item in items.select()
]
有没有办法告诉黑方在这些情况下保持水平结构?
您可以使用 # fmt: off
/ # fmt: on
功能。
如下图所示:
# fmt: off
之前的列表解析已经被Black格式化
- 在
# fmt: off
/ # fmt: on
之间,Black 尚未格式化列表理解
# fmt: on
后的列表推导已经被Black格式化
代码(被Black格式化后):
res1 = [{"id": item[0], "name": item[1],} for item in [[5, "foo"], [6, "bar"]]]
# fmt: off
res2 = [
{
'id': item[0],
'name': item[1],
}
for item in [[7, "fooo"], [8, "barr"]]
]
# fmt: on
res3 = [{"id": item[0], "name": item[1],} for item in [[9, "fooo0"], [10, "barrr"]]]
print(res1)
print(res2)
print(res3)
Python 的输出:
/home/milanbalazs/.local/bin/black --fast -l 100 -v /home/milanbalazs/test.py
reformatted /home/milanbalazs/test.py
All done! ✨ ✨
1 file reformatted.
代码输出:
>>> python3 test.py
[{'id': 5, 'name': 'foo'}, {'id': 6, 'name': 'bar'}]
[{'id': 7, 'name': 'fooo'}, {'id': 8, 'name': 'barr'}]
[{'id': 9, 'name': 'fooo0'}, {'id': 10, 'name': 'barrr'}]
Black 文档的相关部分:https://github.com/psf/black#the-black-code-style
似乎 black 解决了这个问题。
在撰写此答案时,使用 black 版本 20.8b1
,格式已按我希望的方式完成。
只要在字典表达式的最后一项上有一个magic trailing comma,黑色就会在列表理解内格式化代码。
res = [
{
"id": item.id, "name": item.name,
}
for item in items.select()
]
将格式化为:
res = [
{
"id": item.id,
"name": item.name,
}
for item in items.select()
]
我目前正在研究 Black 作为我们的默认格式化程序,但是,我遇到了一些格式化不佳的边缘情况,我想知道是否有办法获得我想要的结果.
Black 的文档 部分探讨了我的问题 ,我有一个水平分布的字典表达式,我想保持这种方式,因为我期待行待补充,例如:
# Black would keep this as-is because of the trailing comma
TRANSLATIONS = {
"en_us": "English (US)",
"pl_pl": "polski",
}
但在我的例子中,字典在列表推导中:
res = [
{
'id': item.id,
'name': item.name,
}
for item in items.select()
]
无论尾随逗号如何,黑方都会崩溃,如下所示:
res = [
{"id": item.id, "name": item.name,}
for item in items.select()
]
有没有办法告诉黑方在这些情况下保持水平结构?
您可以使用 # fmt: off
/ # fmt: on
功能。
如下图所示:
# fmt: off
之前的列表解析已经被Black格式化- 在
# fmt: off
/# fmt: on
之间,Black 尚未格式化列表理解 # fmt: on
后的列表推导已经被Black格式化
代码(被Black格式化后):
res1 = [{"id": item[0], "name": item[1],} for item in [[5, "foo"], [6, "bar"]]]
# fmt: off
res2 = [
{
'id': item[0],
'name': item[1],
}
for item in [[7, "fooo"], [8, "barr"]]
]
# fmt: on
res3 = [{"id": item[0], "name": item[1],} for item in [[9, "fooo0"], [10, "barrr"]]]
print(res1)
print(res2)
print(res3)
Python 的输出:
/home/milanbalazs/.local/bin/black --fast -l 100 -v /home/milanbalazs/test.py
reformatted /home/milanbalazs/test.py
All done! ✨ ✨
1 file reformatted.
代码输出:
>>> python3 test.py
[{'id': 5, 'name': 'foo'}, {'id': 6, 'name': 'bar'}]
[{'id': 7, 'name': 'fooo'}, {'id': 8, 'name': 'barr'}]
[{'id': 9, 'name': 'fooo0'}, {'id': 10, 'name': 'barrr'}]
Black 文档的相关部分:https://github.com/psf/black#the-black-code-style
似乎 black 解决了这个问题。
在撰写此答案时,使用 black 版本 20.8b1
,格式已按我希望的方式完成。
只要在字典表达式的最后一项上有一个magic trailing comma,黑色就会在列表理解内格式化代码。
res = [
{
"id": item.id, "name": item.name,
}
for item in items.select()
]
将格式化为:
res = [
{
"id": item.id,
"name": item.name,
}
for item in items.select()
]