Parses Elixir source into Firebreak.ModuleInfo structs.
This is pure, best-effort static extraction: we read the AST and recognise
the common OTP shapes (use GenServer, Supervisor.init/2, child lists,
GenServer.call/2, registered names, …). We never execute the code, so a
child spec or call target assembled at runtime won't be resolved — those are
reported as unresolved rather than guessed.
Summary
Functions
Parse all source files of a project rooted at root.
Functions
@spec parse_file(Path.t()) :: [Firebreak.ModuleInfo.t()]
@spec parse_files([Path.t()]) :: [Firebreak.ModuleInfo.t()]
@spec parse_project( Path.t(), keyword() ) :: [Firebreak.ModuleInfo.t()]
Parse all source files of a project rooted at root.
@spec parse_string(String.t(), String.t() | nil) :: [Firebreak.ModuleInfo.t()]