After the symbol table and base call graph are built, codeanalyzer runs a pipeline of analysis passes — whole-application steps that contribute framework-dispatched entrypoints and synthetic call edges the static graph can’t observe. Out-of-tree packages register their own through the codeanalyzer.analysis_passes entry-point group, so you can teach codeanalyzer a new framework or a new dispatch mechanism without forking it.
This is the youngest part of codeanalyzer-python: the mechanism exists, but no concrete framework finder ships yet. BUILTIN_PASS_FACTORIES is empty, so until a finder is written, PyApplication.entrypoints comes back empty. The frameworks named on this page (Flask, FastAPI, Celery, Click, gRPC, …) are the roadmap — the shapes finders will target — not detection that runs today. Writing the first finder for a framework is itself the contribution.
Entrypoint detectionSurface framework-dispatched roots — Flask, FastAPI, Celery, Click, gRPC — as PyEntrypoint records, JackEE-style. Write an AbstractEntrypointFinder to cover a new framework.
Analysis passesThe AnalysisPass contract: emit entrypoints and synthetic call edges, registered via entry points. The general extension mechanism behind entrypoint finding.