Wie kann man mit Python und Ruff erzwingen, dass verkettete Methodenaufrufe mehrzeilig bleiben?Python

Python-Programme
Anonymous
 Wie kann man mit Python und Ruff erzwingen, dass verkettete Methodenaufrufe mehrzeilig bleiben?

Post by Anonymous »

Diesen Code in meiner main.py gegeben:

Code: Select all

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()
Ich möchte die verketteten Aufrufe beibehalten, aber Ruff formatiert sie als einzelne Zeile.

Code: Select all

uv run ruff format
formatiert meine Begrüßungszeile wie folgt:

Code: Select all

(greeter.greet("Anton").greet("Anabelle").greet("Aaron"))
Ich bin über dieses GitHub-Problem und die entsprechende Pull-Anfrage gestolpert, also ging ich davon aus, dass die Funktion es bereits in die Vorschau geschafft hat, also dachte ich, ich könnte dies über mein pyproject.toml anwenden.

Code: Select all

[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"]
Wie erlaube ich mehrzeilige verkettete Aufrufe mit Ruff in Python?
Durch den Versuch, ein vereinfachtes Beispiel zu erstellen, bleibt dies mehrzeilig, wie es sollte:

Code: Select all

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()
noch anderer Code wird immer noch seltsamerweise einzeilig sein:

Code: Select all

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")
)
wird nicht unverändert beibehalten, sondern wie folgt formatiert:

Code: Select all

    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")
)
oder je nach Länge der Argumente sehe ich auch Folgendes:

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post