Как заставить связанные вызовы методов оставаться многострочными, используя Python и ерш?Python

Программы на Python
Ответить
Anonymous
 Как заставить связанные вызовы методов оставаться многострочными, используя Python и ерш?

Сообщение Anonymous »

Учитывая этот код в моем 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 ... n-and-ruff
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»