[[ https://github.com/wikimedia/mediawiki/blob/master/docs/hooks.txt | hooks.txt ]] contains all MediaWiki core hooks in an almost-but-not-quite machine-readable format. Commits that change a hook but don't update hooks.txt are flagged in code review so this file tends to be up to date but not very user-friendly.
[[ https://www.mediawiki.org/wiki/Manual:Hooks | Manual:Hooks ]] is a human-readable directory of hooks. It has some navigation aids, translations and significantly more information than hooks.txt but is often outdated and some hooks are outright missing.
The best of both worlds would be to make hooks.txt properly machine-readable, and the data in it available to wiki templates so that they can automatically pull details and stay up-to-date, and a bot can create missing hook pages. [[ http://www.yaml.org/spec/1.2/spec.html | YAML ]] is a nice language for that as it is both machine- and human-readable (especially if we avoid its more complex features).
Write and publish a script to convert hooks.txt to hooks.yaml (language is up to you), then submit a patch to MediaWiki core that replaces the file.
The details are up to you but you could e.g. transform this:
```
'EditPageGetDiffText': DEPRECATED! Use EditPageGetDiffContent instead.
Allow modifying the wikitext that will be used in "Show changes". Note that it
is preferable to implement diff handling for different data types using the
ContentHandler facility.
$editPage: EditPage object
&$newtext: wikitext that will be used as "your version"
```
to this:
```lang=yaml
EditPageGetDiffText:
DEPRECATED: Use EditPageGetDiffContent instead.
description:
Allow modifying the wikitext that will be used in "Show changes". Note that it
is preferable to implement diff handling for different data types using the
ContentHandler facility.
arguments:
- "$editPage": EditPage object
- "&$newtext": wikitext that will be used as "your version"
```
(Before merging we'll have to update `maintenance/findHooks.php` but that's not part of this task.)