Argus.Extractors.Purity (Panoptes v0.13.0)

Copy Markdown View Source

Purity contracts and call classification.

Emits three relations:

  • pure_contract(func, mod, name, arity) — the functions a module declared pure with @pure true (see Argus.Purity). Read out of the beam's attribute chunk, so the contract is taken from the artifact rather than the source.
  • impure_call(id, caller, api, category) — a call to something with a known observable effect.
  • unknown_call(id, caller, api) — a call the effect model has no opinion about.

The classification lives in Elixir (Argus.Purity.Effects) rather than in Datalog for two reasons. It is a large table that wants unit tests and doctests, and expressing it as rules would mean either hundreds of facts or string surgery — and string surgery in these rules is what produced the partial-functor unsoundness fixed in schema v9.