Post-compile reflection over the project's own modules.
The tracer captures structure: who calls what, where things are defined. This pass captures meaning: documentation, typespecs, behaviours, and the facts that frameworks expose about themselves.
The framework reflection is where a program database stops being a nicer
grep and starts answering questions nothing else can. Ecto schemas know
their table and their associations; a Phoenix router knows every route and
the action behind it. With both in the same database as the call graph,
"which HTTP endpoints eventually write to the applications table?" is a
single query.
Every framework probe is guarded by function_exported?/3, so a plain
OTP application produces the general facts and simply no framework ones.
Summary
Functions
Lists the modules this project compiled, read from its build artefacts.
Runs every introspection pass over modules and buffers the resulting facts.
Functions
Lists the modules this project compiled, read from its build artefacts.
Reading the BEAM directory rather than Application.spec/2 keeps this
working before the app is started, and keeps dependencies out of the results.
Runs every introspection pass over modules and buffers the resulting facts.