Ich suche ein elisp-Paket, das automatisch Python docstring für eine Methode einfügt. Ich habe ein Paket gefunden, das meinem Zweck sehr nahe kommt. Aber es ist in restrukturiertem Text, nicht im Google-Stil.
sphinx-doc.el https://github.com/naiquevin/sphinx-doc.el
Beschreiben von Argumenten in Docstrings (Google Python Style Guide) https://www.chromium.org/chromium-os/python-style-guidelines#TOC-Describing-arguments-in-docstrings
Meine Erwartung ist, wenn ich M-x sphinx-doc-google
innerhalb der folgenden Funktion aufrufe:
def some_function(a, b, c):
Ich brauche so ein Ergebnis.
def some_function(a, b, c):
"""
Args:
a:
b:
c:
Returns:
"""
Ich weiß, dass es nicht schwierig ist, mich selbst umzusetzen. Ich möchte diese Frage nur stellen, um die Neuerfindung zu vermeiden.
python
doc-strings
sy2
quelle
quelle
Antworten:
Ich benutze das Paket namens yasnippet für etwas Ähnliches. Nach einigen geringfügigen Änderungen habe ich es angepasst, um stattdessen den Google Docstring-Stil zu verwenden:
Beachten Sie jedoch, dass einige Einstellungen erforderlich sind:
Das Snippet selbst muss einen Dienstprogramm-Elisp-Code ausführen, um den Text zu generieren. Dies wird normalerweise gelöst, indem eine Datei
.yas-setup.el
mit dem Code impython-mode
Snippet-Verzeichnis erstellt wird. Es ist jedoch auch möglich, den Code.emacs
stattdessen irgendwo in Ihrem zu platzieren.Der Code für das Snippet lautet:
Der Code für
.yas-setup.el
lautet:Beachten Sie, dass
python-split-args
dies durch die Standard- Snippets bereitgestellt wird . Dh: https://github.com/AndreaCrotti/yasnippet-snippets/tree/master Diese erhalten Sie jedoch standardmäßig, wenn Sie das Paket über installierenpackage.el
.Wenn alles richtig eingerichtet ist, sollten Sie in der Lage sein, "defg" zu schreiben und anschließend Tabdas Snippet zu erweitern (ein Beispiel finden Sie im Bild).
Es gibt immer noch ein Problem bei der Verwendung dieser in verschachtelten Einrückungen, z. B. innerhalb von Klassen oder als verschachtelte Funktionen. In diesen Fällen wird die Dokumentzeichenfolge aus irgendeinem Grund fälschlicherweise um eine zusätzliche Zeit eingerückt. Ich werde diesen Beitrag aktualisieren, wenn ich das behebe.Das Snippet sollte jetzt in anderen Bereichen funktionieren, indem verhindert wird, dass
yasnippet
die zweite Erweiterung automatisch eingerückt wird.quelle
defg
und es gibt mir eine neue Funktionname
ohne Argumente, und ich sehe keine Möglichkeit, die Aktualisierung der Dokumentzeichenfolge zu automatisieren, wenn ich diese Funktion ändere. Wenn ich mir meinen Nachrichtenpuffer ansehe, sehe ichyas--update-mirrors: Wrong type argument: stringp, (python-args-to-google-docstring)
.yasnippet
. Ich muss ein minimales Beispiel erstellen, um es richtig zu melden. Es kann auch sein, dass das Verketten von Snippets auf diese Weise nicht mehr unterstützt wird, aber ich hoffe, das ist es nicht..yas-setup.el
sollte im selben Verzeichnis wie das Snippet-Verzeichnis für den derzeit aktiven Modus landen. Welches ist~/.emacs.d/snippets/python-mode/.yas-setup.el
für den Python-Modus, wie Sie betont haben.Wie Lunaryorn erwähnte, ist Stil nicht beliebt und es gibt keine Pakete.
Es gibt jedoch ein Paket namens sphinx-doc, das eine Dokumentzeichenfolge im Sphinx-Format ( Demo ) generiert .
Sie können dieses Paket ändern, um Zeichenfolgen gemäß Ihren Anforderungen zu generieren.
quelle
Sie können diesen Code verwenden.
Bewegen Sie den Cursor auf Ihren Funktionsnamen und dann auf F9.
quelle