Buat paragraf isian dengan python docstring, tinggalkan tiga tanda kutip pada baris terpisah

16

Saya mengetik python docstring semua pada satu baris seperti ini:

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

dan kemudian saya menekan Mq ( fill-paragraph), dan saya mendapatkan ini:

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

"""

Saya memiliki dua masalah dengan ini:

  1. Docstring dimulai pada baris yang sama dengan """- Saya lebih suka memiliki triple-quote tetap pada barisnya sendiri.
  2. (Prioritas jauh lebih rendah.) Docstring berakhir dengan garis kosong.

Contoh di atas sudah dibuat-buat, tapi saya sering mengalami hal ini terutama ketika mengedit dokumen yang ada di mana saya ingin sederhana M-qdan memiliki seluruh para tercermin.

bstpierre
sumber

Jawaban:

15

Sesuaikan python-fill-docstring-stylesesuai itu, dengan anggapan bahwa Anda menggunakan Mode Python bawaan di Emacs 24.4. Standarnya adalah pep-257, yang mengarah ke gaya yang Anda amati, yaitu tidak ada baris baru di awal dan dua baris baru sebelum akhir docstring.

Ubah variabel ini ke symmetricatau djangoagar Mode Python mematuhi gaya pilihan Anda, yaitu baris baru di awal dokumen, dan baris baru sebelum akhir:

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

Atau, atur melalui Direktori Variabel , untuk mengonfigurasi gaya dokumentasi secara individual per proyek.

symmetricdan djangoberbeda dengan dokumen single-line. Yang pertama menempatkan tanda kutip tiga pada baris yang sama jika docstring cocok pada satu baris, sedangkan yang terakhir menempatkan tanda kutip tiga pada baris yang terpisah dalam kasus ini.

Lihatlah dokumentasipython-fill-docstring-style untuk melihat semua opsi yang tersedia.

lunaryorn
sumber
-1

Jika baris kosong di bagian akhir, sepertinya bug biasa, tolong laporkan dengan M-x report-emacs-bug. Tetapi untuk elemen pertama, saya tidak yakin apakah itu bug atau fitur, jadi Anda mungkin ingin menyebutkannya dalam laporan bug Anda, tetapi mungkin jawabannya adalah hanya mengikuti konvensi "PEP-NNN".

Ini mengatakan, Anda mungkin dapat memperbaiki masalah pertama dengan yang berikut ini:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))
Stefan
sumber
1
Ini bukan bug, Anda juga tidak perlu mengubahnya paragraph-separate. Gaya docstring python.eldapat disesuaikan.
lunaryorn
Wow, saya tidak pernah menduga bahwa baris kosong tambahan di akhir dokumentasi bisa menjadi sesuatu yang ditegakkan oleh standar.
Stefan
1
Standar (PEP 257) tidak benar-benar menegakkan ini, itu hanya interpretasi (umum) itu. Emacs juga mendukung varian tanpa baris baru, seperti pep-257-nnpada python-fill-docstring-style.
lunaryorn
1
Ironisnya, alasan tautan kosong adalah: Kecuali jika seluruh dokumen cocok pada suatu garis, letakkan tanda kutip penutup pada garis sendiri. Dengan cara ini, perintah paragraf isi Emacs dapat digunakan di dalamnya.
Felipe