如何在 Mediawiki 扩展中追踪自定义挂钩事件的源定义?

How do I track down the source definition of a custom hook event in a Mediawiki extension?

这是一个例子:

https://phabricator.wikimedia.org/diffusion/EPFM/browse/master/?grep=BeforeFreeTextSubst

一个 Mediawiki 扩展,其中 Hooks::run( 'PageForms::BeforeFreeTextSubst', ...) 被调用,但没有其他记录或跟踪它的定义位置。如果有一些 strings/names 到函数的映射,它将在其他地方注册,如果它是一个函数名称,它应该出现在其他地方。

我在其他一些函数挂钩事件中看到了这一点。

除了钩子 运行 的来源外,没有任何 "source definition"。那就是定义钩子的地方;它实际上可能会也可能不会在任何地方挂钩 。所有挂钩定义都是一个名称和一组传递给挂钩回调的参数。

为了帮助找出挂钩的实际使用位置,您可以使用(新的)代码搜索工具:

https://codesearch.wmflabs.org/extensions/?q=BeforeFreeTextSubst

(看起来维基媒体源代码控制中的任何扩展都没有使用这个。)

您是否正在尝试查找挂钩 运行 时调用的函数?那里的情况有点混乱。有两种定义钩子的机制:

  • $wgHooks全局(这是注册钩子的正常方式);
  • Hooks::register方法(有时用于动态注册挂钩)。

$wgHooks 通常通过 extension.json 文件设置,但也可以动态设置。

找出注册了哪些挂钩的最快方法是 运行 maintenance/shell.php 并输入 $wgHooks。这将错过通过其他方法注册的挂钩,以及有条件注册的挂钩(例如,仅针对 API 调用),但它在 99% 的时间仍然有效。否则,您将不得不像 Sam 所说的那样使用 grep。