Python docstringでfill-paragraphを作成し、三重引用符を別の行に残します


16

次のように、Python docstringをすべて1行で入力します。

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

"""

これには2つの問題があります。

  1. docstringは、と同じ行で始まります"""-トリプルクォートを独自の行に残すことを希望します。
  2. (はるかに低い優先順位。)docstringは空白行で終わります。

上記の例は不自然ですが、特に既存のdocstringを編集するときに頻繁にこれにM-q遭遇します。単純にパラグラフ全体をリフローしたい場合です。

回答:


15

python-fill-docstring-styleEmacs 24.4の組み込みPythonモードを使用していることを前提に、それに応じてカスタマイズします。デフォルトはでpep-257、これはあなたが観察したスタイルにつながります。つまり、先頭に改行がなく、docstringの最後に2つの改行があります。

この変数をに変更するsymmetricdjango、Pythonモードが好みのスタイル、つまりdocstringの先頭の改行と末尾の前の改行に従うようにします。

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

または、ディレクトリ変数を使用して設定し、プロジェクトごとに個別にdocstringスタイルを設定します。

symmetricおよびdjangoは、単一行のdocstrings とは異なるものです。前者は、docstringが1行に収まる場合は同じ行に三重引用符を付けますが、後者はこの場合、別の行に三重引用符を付けます。

見てくださいのドキュメンテーション文字列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はカスタマイズ可能です。
lunaryorn 14年

うわー、docstringの最後にある余分な空行が、標準によって強制されるものであるとは思いもしませんでした。
ステファン

1
標準(PEP 257)は実際にこれを強制するのではなく、単なる(一般的な)解釈です。Emacsはとしても、末尾の改行なしのバリアントをサポートしていますpep-257-nnの中でpython-fill-docstring-style
lunaryorn

1
皮肉なことに、空白リンクの理由は次のとおりです。docstring全体が行に収まらない限り、閉じ引用符を単独で行に配置します。このようにして、Emacsのfill-paragraphコマンドを使用できます。
フェリペ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.