Hook names complete from the wiki, typos are flagged with a quick fix, callback parameters take their type from the signature, and ENT/SWEP/PANEL stubs write themselves.
Hook name completion
Inside a hook.Add(" string, completion offers the 551 hooks in the bundled wiki dataset — plus any custom hook your workspace fires with hook.Run.
Typo detection
A hook name that is neither documented nor fired anywhere in the workspace is flagged, with the closest known name offered as a quick fix.
Typed callback parameters
Callback parameters take their type from the hook’s wiki signature. No annotation required.
Hooks of your own
A hook you invented is documented nowhere, so its hook.Run call sites are the only description of it that exists. Those are read as its signature, and the callbacks you register for it are typed from them.
Where call sites disagree about a position, it stays any rather than picking one. A site passing nil is ignored for the same reason — it says nothing about what the parameter is for.
Declaring more parameters than anything passes is reported, since those extras are always nil:
ENT / SWEP / PANEL stubs
The full hook table of a scripted entity, weapon or panel can be generated in one completion.
Scripted entity stub
Typing function ENT: opens a completion for the entity hook table. Accept it and the server inserts a stub of the common hooks:
The same works for SWEP and PANEL.
gameevent.Listen
gameevent.Listen counts as a hook source. Events registered this way appear in completion and are checked by the typo rule.
Ctrl+. on an unknown hook name pulls up the closest documented match. PlayerDeath vs PlayerDeathThink is the usual example.