Skip to content

The codeanalyzer backends

Standalone language backends parse the source, resolve the symbols, and build the call graph. There is one backend for each language, and one more for infrastructure-as-code. Together they are the codeanalyzer-* tools. Each backend writes typed JSON. The SDK reads that JSON and builds models that you can query.

flowchart LR
    SDK["CLDK Python SDK<br/>(analysis API)"] -->|invokes| CAJ["codeanalyzer-java<br/>(JVM · WALA)"]
    SDK -->|invokes| CAP["codeanalyzer-python<br/>(Jedi · defuse linker)"]
    SDK -->|invokes| CAT["codeanalyzer-ts<br/>(TS compiler)"]
    CAJ -->|canonical JSON| SDK
    CAP -->|canonical JSON| SDK
    CAT -->|canonical JSON| SDK

This split lets one analysis API cover many languages. The SDK does not parse code itself. It runs the correct backend. Then it maps the backend JSON onto typed models (JApplication, PyModule, and others).

A new backend that writes the canonical JSON makes its language available to the SDK. The SDK then needs only the Python bindings for that language. See Add a language backend.

This is the backend layer. For the SDKs that consume it, see the SDKs overview.

Mature production-ready  ·  Beta stable core, some features missing  ·  Medium usable through another backend

The codeanalyzer-* tools parse a language. Then they write the canonical symbol-table and call-graph schema that every frontend reads.

LanguageBackendMaturity
Javacodeanalyzer-javaMature
Pythoncodeanalyzer-pythonMature
TypeScriptcodeanalyzer-tsMature
JavaScriptvia codeanalyzer-tsMedium
IaC (Helm)codeanalyzer-iacBeta