Estoy buscando un paquete elisp que inserte automáticamente la cadena de documentación de Python para un método. Encontré un paquete, que está muy cerca de mi propósito. Pero está en texto reestructurado, no en el estilo de Google.
sphinx-doc.el https://github.com/naiquevin/sphinx-doc.el
Describiendo argumentos en docstrings (guía de estilo de Google Python) https://www.chromium.org/chromium-os/python-style-guidelines#TOC-Describing-arguments-in-docstrings
Mi expectativa es cuando llamo M-x sphinx-doc-google
dentro de la siguiente función,
def some_function(a, b, c):
Necesito un resultado como este.
def some_function(a, b, c):
"""
Args:
a:
b:
c:
Returns:
"""
Sé que no es difícil de implementar por mí mismo. Solo quiero hacer esta pregunta para evitar la reinvención.
python
doc-strings
sy2
fuente
fuente
Respuestas:
Yo uso el paquete llamado yasnippet para algo similar a esto. Después de algunos cambios menores, lo adapté para usar el estilo de Google Docstring:
Sin embargo, tenga en cuenta que requiere cierta configuración:
El fragmento en sí necesita ejecutar algún código de utilidad elisp para generar el texto. Esto generalmente se resuelve creando un archivo llamado
.yas-setup.el
con el código dentro delpython-mode
directorio de fragmentos. Sin embargo, también es posible colocar el código en algún lugar dentro de su.emacs
lugar.El código para el fragmento es:
El código para el
.yas-setup.el
es:Tenga en cuenta que
python-split-args
lo proporcionan los fragmentos estándar . Es decir: https://github.com/AndreaCrotti/yasnippet-snippets/tree/master Sin embargo, los obtiene de forma predeterminada cuando instala el paquetepackage.el
.Con todo configurado correctamente, debería poder escribir "defg" seguido de Tabexpandir el fragmento (vea la imagen para ver un ejemplo).
Todavía hay un problema con el uso de esta sangría anidada, por ejemplo, dentro de clases o como funciones anidadas. En esos casos, la cadena de documentos se sangra erróneamente un tiempo extra por alguna razón. Actualizaré esta publicación si logro arreglar eso.El fragmento ahora debería funcionar dentro de otros ámbitos al prohibir
yasnippet
la sangría automática de la segunda expansión.fuente
defg
y me da una nueva función nombradaname
sin argumentos, y no veo ninguna forma de automatizarlo actualizando la cadena de documentación a medida que cambio esa función. Cuando miro mi búfer de mensajes, veoyas--update-mirrors: Wrong type argument: stringp, (python-args-to-google-docstring)
.yasnippet
. Sin embargo, tendré que crear un ejemplo mínimo para informarlo correctamente. También puede ser que el encadenamiento de fragmentos de esta manera ya no sea compatible, pero espero que no sea así..yas-setup.el
debe terminar en el mismo directorio que el directorio de fragmentos para el modo actualmente activo. Lo cual es~/.emacs.d/snippets/python-mode/.yas-setup.el
para el modo python como usted señaló.Como lunaryorn mencionó que el estilo no es popular y no hay paquetes.
Sin embargo, hay un paquete llamado sphinx-doc que generará una cadena de documentos en formato sphinx ( demo ).
Puede modificar ese paquete para generar cadenas según sus requisitos.
fuente
Puedes usar este código.
Mueva el cursor sobre el nombre de su función y luego F9.
fuente