Rendi il paragrafo di riempimento in Python docstring lascia le virgolette triple su una riga separata


16

Digito un docstring di Python tutto su una riga in questo modo:

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

e poi premo Mq ( fill-paragraph) e ottengo questo:

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

"""

Ho due problemi con questo:

  1. Il docstring inizia sulla stessa riga del """- Preferirei che la tripla citazione rimanga sulla sua stessa riga.
  2. (Priorità molto più bassa.) La docstring termina con una riga vuota.

L'esempio sopra è inventato, ma mi M-qimbatto spesso in questo, specialmente quando modifico dotstring esistenti in cui mi piacerebbe semplicemente rifare l'intero para.

Risposte:


15

Personalizza di python-fill-docstring-styleconseguenza, presumendo che tu stia utilizzando la modalità Python integrata in Emacs 24.4. Il valore predefinito è pep-257, che porta allo stile che hai osservato, ovvero nessuna nuova riga all'inizio e due nuove righe prima della fine di una docstring.

Cambia questa variabile in symmetrico djangoaffinché Python Mode obbedisca al tuo stile preferito, ovvero una nuova riga all'inizio della docstring e una nuova riga prima della fine:

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

In alternativa, impostarlo tramite Variabili di directory per configurare lo stile di docstring singolarmente per progetto.

symmetrice djangosono diversi wrstr a riga singola. Il primo inserisce le virgolette triple sulla stessa riga se un docstring si adatta su una riga, mentre il secondo mette le virgolette triple su righe separate in questo caso.

Dai un'occhiata alla documentazione dipython-fill-docstring-style per vedere tutte le opzioni disponibili.


-1

Ha scritto la riga vuota alla fine, sembra un semplice bug, per favore segnalalo con M-x report-emacs-bug. Ma per il primo elemento, non sono sicuro che si tratti di un bug o di una funzione, quindi potresti voler menzionarlo nella tua segnalazione di bug, ma forse la risposta sarà che sta solo seguendo la convenzione "PEP-NNN".

Detto questo, potresti essere in grado di risolvere il primo problema con quanto segue:

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

1
Non è né un bug, né dovresti cambiare paragraph-separate. Lo stile docstring di python.elè personalizzabile.
lunaryorn,

Wow, non avrei mai immaginato che una riga vuota in più alla fine di Docstring potesse essere imposta da uno standard.
Stefan,

1
Lo standard (PEP 257) non lo impone effettivamente, è solo una sua interpretazione (comune). Emacs supporta anche la variante senza una nuova riga finale, come pep-257-nnin python-fill-docstring-style.
lunaryorn,

1
Ironia della sorte, il motivo del collegamento vuoto è: a meno che l'intera documentazione non si adatti a una riga, posizionare le virgolette di chiusura su una riga da sole. In questo modo, il comando di riempimento del paragrafo di Emacs può essere utilizzato su di esso.
Felipe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.