Зробіть заповнення абзацу в docstring python, залиште потрійні лапки в окремому рядку


16

Я набираю docstring python всі в одному рядку, як це:

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

і тоді я натискаю Mq ( fill-paragraph), і я отримую це:

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

"""

У мене з цим дві проблеми:

  1. Документальний рядок починається в тому ж рядку, що і """- Я вважаю за краще, щоб потрійна цитата залишилася на власній лінії.
  2. (Набагато нижчий пріоритет.) Докстринг закінчується порожнім рядком.

Наведений вище приклад надуманий, але я часто стикаюся з цим, особливо під час редагування існуючих доктринжів, де я хотів би просто M-qі весь порядок перезаписати.

Відповіді:


15

Налаштуйте python-fill-docstring-styleвідповідно, припускаючи, що ви використовуєте вбудований режим Python в Emacs 24.4. Типовим є те pep-257, що веде до спостережуваного вами стилю, тобто немає нового рядка на початку та двох нових рядків до кінця docstring.

Змініть цю змінну на symmetricабо, djangoщоб режим Python відповідав бажаному стилю, тобто новому рядку на початку docstring, і новому рядку до кінця:

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

Крім того, встановіть його за допомогою змінних каталогів , щоб налаштувати стиль docstring індивідуально для кожного проекту.

symmetricі djangoє різними wrt однорядними документами. Перший ставить потрійні лапки в той самий рядок, якщо докстринг підходить до одного рядка, тоді як останній ставить потрійні лапки в окремі рядки в цьому випадку.

Погляньте на docstring,python-fill-docstring-style щоб переглянути всі доступні варіанти.


-1

Напишіть порожній рядок наприкінці, він виглядає як звичайна помилка, будь ласка, повідомте про це M-x report-emacs-bug. Але щодо першого елемента я не впевнений, що це помилка чи функція, тому ви, можливо, захочете згадати це у своєму звіті про помилку, але, можливо, відповідь буде, що він просто слідує конвенції "PEP-NNN".

Це означає, що ви, можливо, зможете виправити першу проблему за допомогою наступного:

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

1
Це не помилка, і не потрібно змінювати paragraph-separate. Стиль docstring python.elналаштовується.
місячник

Нічого собі, я ніколи не здогадувався, що додатковий порожній рядок в кінці docstring може бути чимось примусовим стандартом.
Стефан

1
Стандарт (PEP 257) насправді цього не виконує, це лише (загальна) інтерпретація цього. Emacs також підтримує варіант без зворотного нового рядка, як pep-257-nnв python-fill-docstring-style.
місячник

1
За іронією долі, причина пустого посилання полягає в тому, що: якщо вся докстрина не вписується в лінію, розміщуйте кінцеві лапки на рядку самі. Таким чином, команда заповнення абзацу Emacs може бути використана в ньому.
Феліпе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.