如何自定义 sphinx.application.Sphinx.connect 的事件?

How can I customize the event of sphinx.application.Sphinx.connect?

我是Sphinx初学者,想了解一下运行机制。 以下内容来自本link.

from sphinx.application import Sphinx

def html_page_context(app, pagename, templatename, context, doctree):
    ...

def setup(app: Sphinx):
    # event:
    # from sphinx.events import core_events
    # https://www.sphinx-doc.org/en/master/extdev/appapi.html#event-html-page-context
    # https://www.sphinx-doc.org/en/1.0/ext/appapi.html#event-html-page-context
    app.connect(event='html-page-context', callback=html_page_context)

我的问题是他怎么知道这个函数怎么写的(def html_page_context() ...)?

我看了文档(ref1 and ref2),里面解释了它的函数的参数应该是,可是我怎么知道detail怎么写在这个功能?

当然可以参考一下,调试一下就知道是怎么回事了。 (但如果没有其他参考,只有本机代码存在怎么办。)

授人以鱼,供人一日;教他钓鱼,你养他一辈子请教我钓鱼

希望回答者能告诉我:

是否存在默认函数的事件?

是:

  1. 脚本的位置来自哪里?
  2. 你怎么知道的? (有没有什么技巧,比如hook 找一找,或者开发者你是其中之一吗?)

否:

我知道有一些主观性的问题,但我很乐意接受任何'pearls of wisdom'他们愿意传授的,认为!

我明白了,答案是

  • 来自sphinx.builders.html.__init__.py setup()
  • 使用搜索来搜索 sphinx 项目。

一种简单的方法是使用 IDE 提供的搜索。

打开路径X://.../PythonXX/Lib/site-packages/sphinx作为项目,

然后开始搜索您喜欢的任何关键字,例如 html-page-context

最后会找到app.connect('html-page-context', setup_js_tag_helper),在sphinx.builders.html.__init__.py setup())的哪个位置,所以setup_js_tag_helper的函数是默认行为,可以设置断点发现更多有趣的事情。


快速搜索

可以直接用PyCharm搜索。

在路径中查找 → 范围 → 所有位置