Machen Sie ausfüllende Absätze in Python-Docstring und lassen Sie die dreifachen Anführungszeichen in einer separaten Zeile

16

Ich schreibe einen Python-Docstring in einer Zeile:

"""
This is a long docstring. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis.
"""

und dann drücke ich Mq ( fill-paragraph) und bekomme folgendes:

"""This is a long docstring. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec a diam lectus. Sed sit amet ipsum
mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed,
adipiscing id dolor. Pellentesque auctor nisi id magna consequat
sagittis.

"""

Ich habe zwei Probleme damit:

  1. Der Docstring beginnt in derselben Zeile wie der """- ich würde es vorziehen, wenn das dreifache Anführungszeichen in einer eigenen Zeile bleibt.
  2. (Viel niedrigere Priorität.) Die Dokumentzeichenfolge endet mit einer Leerzeile.

Das obige Beispiel ist erfunden, aber ich stoße häufig darauf, besonders wenn ich vorhandene Dokumentstrings bearbeite, bei denen ich einfach M-qden gesamten Para neu fließen lassen möchte.

bstpierre
quelle

Antworten:

15

python-fill-docstring-stylePassen Sie die Einstellungen entsprechend an, vorausgesetzt, Sie verwenden den in Emacs 24.4 integrierten Python-Modus. Die Standardeinstellung ist pep-257, was zu dem von Ihnen beobachteten Stil führt, dh keine Zeilenumbrüche am Anfang und zwei Zeilenumbrüche vor dem Ende eines Dokuments.

Ändern Sie diese Variable in symmetricoder django, damit der Python-Modus Ihrem bevorzugten Stil entspricht, dh eine neue Zeile am Anfang der Dokumentzeichenfolge und eine neue Zeile vor dem Ende:

(setq python-fill-docstring-style 'django)

Alternativ können Sie es über Directory Variables festlegen, um den Dokumentstring-Stil individuell für jedes Projekt zu konfigurieren.

symmetricund djangosind verschiedene einzeilige Docstrings. Ersteres setzt die dreifachen Anführungszeichen in dieselbe Zeile, wenn ein Dokumentstring in eine Zeile passt, während letzteres in diesem Fall die dreifachen Anführungszeichen in separate Zeilen setzt.

Schauen Sie sich die Dokumentation vonpython-fill-docstring-style an, um alle verfügbaren Optionen anzuzeigen .

Mondhorn
quelle
-1

Schreiben Sie die leere Zeile am Ende, es sieht aus wie ein einfacher Fehler, bitte melden Sie ihn mit M-x report-emacs-bug. Aber für das erste Element bin ich mir nicht sicher, ob es ein Fehler oder eine Funktion ist. Vielleicht möchten Sie es in Ihrem Fehlerbericht erwähnen, aber vielleicht lautet die Antwort, dass es nur der Konvention "PEP-NNN" folgt.

In diesem Fall können Sie das erste Problem möglicherweise mit den folgenden Schritten beheben:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))
Stefan
quelle
1
Es ist weder ein Fehler, noch sollten Sie sich ändern müssen paragraph-separate. Der Docstring-Stil von python.elist anpassbar.
Lunaryorn
Wow, ich hätte nie gedacht, dass eine zusätzliche leere Zeile am Ende von docstring durch einen Standard erzwungen werden könnte.
Stefan
1
Der Standard (PEP 257) erzwingt dies nicht wirklich, es ist nur eine (übliche) Interpretation davon. Emacs unterstützt auch die Variante ohne abschließenden Zeilenumbruch wie pep-257-nnin python-fill-docstring-style.
Lunaryorn
1
Ironischerweise lautet der Grund für den leeren Link: Platzieren Sie die schließenden Anführungszeichen in einer eigenen Zeile, es sei denn, die gesamte Dokumentzeichenfolge passt in eine Zeile. Auf diese Weise kann der Emacs-Befehl zum Ausfüllen von Absätzen verwendet werden.
Felipe