Учитывая этот код в моем файле main.py:
def main():
greeter = type(
"Anon", (), {"greet": lambda self, name: print(f"Hello {name}") or self}
)()
(greeter
.greet("Anton")
.greet("Anabelle")
.greet("Aaron"))
if __name__ == "__main__":
main()
Я хочу сохранить цепочки вызовов, но ruff форматирует их как одну строку.
uv run ruff format
отформатирует мою строку приветствия как:
(greeter.greet("Anton").greet("Anabelle").greet("Aaron"))
Я наткнулся на эту проблему GitHub и соответствующий запрос на включение, поэтому предположил, что эта функция уже включена в предварительную версию, поэтому я подумал, что могу применить ее через свой файл pyproject.toml:
[tool.ruff]
preview = true
line-length = 88
[tool.ruff.lint]
# I = isort (imports), E/W = spacing, F = errors, UP = modern syntax
select = ["E", "W", "F", "I", "UP"]
Как я могу разрешить многострочные вызовы с помощью ruff в Python?
Попытавшись создать упрощенный пример, он останется многострочным, как и должно быть:
def main():
greeter = type(
"Anon", (), {"greet": lambda self, name: print(f"Hello {name}") or self}
)()
(
greeter
# Please keep it multiline please keep it multiline please keep it multiline
.greet("Anton")
.greet("Anabelle")
.greet("Aaron")
)
if __name__ == "__main__":
main()
Однако другой код по-прежнему будет однострочным:
def _some_method_dealing_with_a_page(page: Page):
main_menu = MainMenu(page=page)
(
main_menu
# Please keep it multiline please keep it multiline please keep it multiline
.click_on_main_menu("some entry")
.click_on_main_menu_item("some-other-entry")
)
не будет сохранен как есть, но будет отформатирован в:
main_menu = MainMenu(page=page)
(
main_menu
# Please keep it multiline please keep it multiline please keep it multiline
.click_on_main_menu("some entry").click_on_main_menu_item("some-other-entry")
)
Или, в зависимости от длины аргументов, я также вижу это:
main_menu = MainMenu(page=page)
(
main_menu
# Please keep it multiline please keep it multiline please keep it multiline
.click_on_main_menu("ffffffffffffff").click_on_main_menu_item(
"ffffffffffffffffffffffff"
)
)
Подробнее здесь: https://stackoverflow.com/questions/798 ... uff-format