LoginSignup
7
8

More than 1 year has passed since last update.

DoxygenでPythonコードをドキュメント化

Last updated at Posted at 2020-09-02

DoxygenでPythonコードをドキュメント化するとき、嵌ったのでmemoを残しておきます。

pythonでdocstring形式のコメントは、関数にカーソル置くとVScodeの編集支援機能でコメントが表示されます。

■docstring形式コメント例


def leftCosets(self, H: FiniteGroup) -> Set[Set[GroupElement]]:
    """
    @brief Calculates left cosets of H in self.

    @details foo

    :param H: subGroup of self
    :return:

    @note bar
    """

    cosets = {frozenset(copy.deepcopy(H.elements)),}
    remain = self.elements - H.elements

    while len(remain) > 0:
        #〜中略〜

    return cosets

関数にカーソルをあわせるだけで、関数定義位置に移動しなくてもコメントで確認できるので便利です。

ただしdocstring形式は、「doxygenの特殊コマンドはどれもサポートされていない」ため、Doxygenでドキュメント化するときれいに表示されません。
- DoxygenでPythonプロジェクトをドキュメント化しましたが、パラメータがうまくリスト表示されません。

そこで、docstring形式をdoxygen形式に変換するフィルターを使います。

■docstring形式をDoxygen形式に変換するフィルター
doxyfilter_python(GitHub)

このフィルタを使うとdocstring形式がdoxygen形式に変換されてDoxygenに渡されます。

■doxygen形式コメント例

    ##
    #@brief Calculates left cosets of H in self.
    #@details foo
    #
    #@param H (FiniteGroup) subGroup of self
    #@return (Set[Set[GroupElement]])
    #
    #@note bar
    def leftCosets(self, H: FiniteGroup) -> Set[Set[GroupElement]]:
    cosets = {frozenset(copy.deepcopy(H.elements)),}
    remain = self.elements - H.elements

    while len(remain) > 0:
        #〜中略〜

    return cosets

※注意※Windows環境でこれをそのまま使うと、cp932で動作して日本語が文字化けしてしまいます。
Windows環境で使う場合、doxyfilter_python.pyを編集してエンコーディング”utf-8”を指定します。

python:doxyfilter_python.py
import io

#〜中略〜perform_fh関数のはじめに以下の行を追加
        sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')


#〜中略〜main関数のファイルオープンの箇所にエンコーディングを指定。
        with open(file, 'r',encoding='utf-8') as fh:

■Doxygenの設定などの注意事項

Python は、C や C++ より、見た目が Java に似ているので、設定ファイルでは OPTMIZE_OUTPUT_JAVA から YES に設定してください。

Comment blocks in Python』より

  • @briefや@detailsの間は必ず1行分空けること。そうしないと VS Code のツールチップで項目が改行されずに1行になって表示されてしまう。
  • 必ずファイルコメントを入れること。そうしないとグローバルメソッドがドキュメント化されない。

VS Code の編集支援を生かしつつ Python3 で Doxygen を使う』より

  • Expert タブ -> Topics -> Input -> INPUT_FILTERにdoxyfilter_python.pyをフルパスで指定してください。

参考にしたサイト(『VS Code の編集支援を生かしつつ Python3 で Doxygen を使う』)には

必ず doxyfilter_python.py をフルパスで指定し、python3 で実行するように明示すること(そうしないと失敗した)。

と書かれていていますがが、python3.x系しか入っていない環境ではpython3を明示する必要はなさそうです。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8