Haga que el párrafo de relleno en la cadena de documentación de Python deje las comillas triples en una línea separada


16

Escribo una cadena de documentos de Python en una línea como esta:

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

y luego presiono Mq ( fill-paragraph), y obtengo esto:

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

"""

Tengo dos problemas con esto:

  1. La cadena de documentación comienza en la misma línea que """: prefiero tener la triple cita en su propia línea.
  2. (Prioridad mucho más baja). La cadena de documentación termina con una línea en blanco.

El ejemplo anterior está inventado, pero me encuentro con esto con frecuencia, especialmente cuando edito cadenas de documentos existentes donde me gustaría simplemente M-qy tener todo el para reflujo.

Respuestas:


15

Personalice en python-fill-docstring-styleconsecuencia, suponiendo que está utilizando el modo Python incorporado en Emacs 24.4. El valor predeterminado es pep-257, lo que conduce al estilo que observó, es decir, no hay una nueva línea al principio y dos nuevas líneas antes del final de una cadena de documentos.

Cambie esta variable a symmetrico djangopara que el modo Python obedezca su estilo preferido, es decir, una nueva línea al comienzo de la cadena de documentación y una nueva línea antes del final:

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

Alternativamente, configúrelo a través de Variables de directorio , para configurar el estilo de docstring individualmente por proyecto.

symmetricy djangoson diferentes cadenas de documentos wrt de una sola línea. El primero coloca las comillas triples en la misma línea si una cadena de documentos encaja en una línea, mientras que el segundo coloca las comillas triples en líneas separadas en este caso.

Eche un vistazo a la cadena de documentación depython-fill-docstring-style para ver todas las opciones disponibles.


-1

Escriba la línea vacía al final, parece un error simple, por favor repórtelo M-x report-emacs-bug. Pero para el primer elemento, no estoy seguro de si es un error o una característica, por lo que es posible que desee mencionarlo en su informe de error, pero tal vez la respuesta sea que solo está siguiendo la convención "PEP-NNN".

Dicho esto, es posible que pueda solucionar el primer problema con lo siguiente:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))

1
No es un error ni debería cambiarlo paragraph-separate. El estilo de docstring python.eles personalizable.
lunaryorn

Wow, nunca habría adivinado que una línea vacía adicional al final de la cadena de documentación podría ser algo impuesto por un estándar.
Stefan

1
El estándar (PEP 257) en realidad no aplica esto, es solo una interpretación (común) del mismo. Emacs también admite la variante sin una nueva línea final, como pep-257-nnen python-fill-docstring-style.
lunaryorn

1
Irónicamente, la razón del enlace en blanco es: a menos que toda la cadena de documentación se ajuste a una línea, coloque las comillas de cierre en una línea por sí mismas. De esta manera, se puede usar el comando de relleno de párrafo de Emacs.
Felipe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.