sphinxのliteralincludeが絶対パスを表示するのが嫌だった
sphinxのliteralincludeが絶対パスを表示するのが嫌だった。 以下の様なmonkey patchをあてるextensionを作ってあげると無理矢理変更できる(わるい)
def setup(app): # monkey patch import os.path from difflib import unified_diff from sphinx.directives.code import LiteralIncludeReader def show_diff(self, location=None): new_lines = self.read_file(self.filename) old_filename = self.options.get('diff') old_lines = self.read_file(old_filename) diff = unified_diff(old_lines, new_lines, os.path.basename(old_filename), os.path.basename(self.filename)) return list(diff) LiteralIncludeReader.show_diff = show_diff return {"version": "0.0"}
使いたかった場所
本当はdictknifeのドキュメントで使いたかったのだけれど。readthedocsが使っているsphinxのversionが古かったようでLiteralIncludeReaderが存在しなかったっぽい。古いsphinx用にコードを書き換えるのが面倒なので今は使っていない。
使うなら readthedocsの 高度なオプション
の Install Project
をonにしてあげて、conf.pyに以下のような変更をすれば有効になる。
# Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. # extensions = ['sphinx.ext.viewcode'] extensions = ['sphinx.ext.viewcode', 'dictknife._sphinx']
dictknifeというrepositoryを使っているので dictknife._sphinx
だけれど。そのあたりはお好みで。