以前にドキュメント化された関数パラメーターをPython docstringの別の場所で参照します。次の(確かに完全に人工的な)例を検討してください。
def foo(bar):
"""Perform foo action
:param bar: The bar parameter
"""
def nested():
"""Some nested function that depends on enclosing scope's bar parameter.
I'd like to reference function foo's bar parameter here
with a link, is that possible?"""
return bar * bar
# ...
return nested()
Sphinxマークアップを使用してパラメーター参照を埋め込む簡単な方法はありますか、またはこれは自動的に行われますか?
(私は完全なSphinx初心者です。私はSphinxのドキュメントをスキャンしてきましたが、この質問に対する回答、または適切なマークアップを示す例が見つかりませんでした。)
このタスクを実行するための拡張機能を作成しました。これまでのところ、スタンドアロンのHTMLビルドと、さらにreadthedocs(いくつかの微調整後)で動作しているようです。
拡張機能は https://pypi.python.org/pypi/sphinx-paramlinks/ で入手できます。
現在、AlembicおよびSQLAlchemyプロジェクト用に展開しています。 ( サンプル )。
Paramsへのリンクはドキュメントが長すぎることを意味するという提案に同意しません。 Python標準ライブラリはここでは良い例ではありません。stdlib関数は必然的に詳細でシンプルです。1つの関数が複雑な問題の上に乗っている、より粗いタスクを実行するソフトウェア多くの場合、より多くの説明を必要とするパラメータが含まれます。この説明は、他の場所の特定の問題の解決策として非常に貴重なことが多いため、それにリンクできることが非常に重要です。
sphinx
を使用して関数のパラメーターへの直接参照を取得する簡単な方法はなく、この問題の拡張機能もわかりません。
python domain のドキュメント)では、相互参照できるオブジェクトについて説明しています。
ユーザーに関数bar
のパラメーターfoo
への参照を与えるための可能な方法は、
See parameter ``bar`` in :func:`foo`.
おそらく拡張機能を書くことで直接参照が可能になるでしょう。
sphinx-paramlinks
とsphinx.ext.napoleon
を併用したい場合は、ここにパッチがあります。 sphinx-paramlinks
ソースコード(sphinx_paramlinks\sphinx_paramlinks.py、50行目付近)から適切なフラグメントを見つけて、次のコードで置き換えます。
def cvt(m):
directive, modifier, objname, paramname = (
m.group(1), m.group(2) or '', name, m.group(3))
if directive == 'param':
refname = _refname_from_paramname(paramname, strip_markup=True)
item = ('single', '%s (%s parameter)' % (refname, objname),
'%s.params.%s' % (objname, refname), '')
if LooseVersion(__version__) >= LooseVersion('1.4.0'):
item += (None,)
doc_idx.append(item)
return ":%s %s_sphinx_paramlinks_%s.%s:" % (
directive, modifier, objname, paramname)
return re.sub(r'^:(param|type) ([^:]+? )?([^:]+?):', cvt, line)
注:正しいインデントについて覚えておいてください。
私はSphinxのスペシャリストではありませんが、これで仕事が完了したようです。
bar
のfoo
の定義に直接リンクする方法を探している場合、ドキュメントが長すぎるか、1つのツリーまたはいくつかの組み合わせのフォレストを無視するよう読者に依頼しています二。
defaultdict Examples から例をとります:
Setting the :attr:`default_factory` to :class:`int` makes the
:class:`defaultdict` useful for counting (like a bag or multiset in other
languages):
もし私が5つの文を collections.defaultdict に読み込むのに煩わされないなら、default_factory
の意味を見つけるために、そこに導かれるに値しないでしょう。
属性参照構文は上記のセクションと同じであることに注意してください。
The first argument provides the initial value for the :attr:`default_factory`
attribute; it defaults to ``None``.
しかし、Sphinxは現在のセクションスコープの外に到達しないため、アンカーとしてではなく、スタイル付きテキストとして後の参照をレンダリングしているようです。これが意図的なものであったとしても、私は驚きません。