From bf46c97325202d455397bc770eb84d2531b501e6 Mon Sep 17 00:00:00 2001 From: swapnil <78632212+swapnilpaliwal-sd@users.noreply.github.com> Date: Sun, 13 Sep 2026 23:21:51 -0700 Subject: [PATCH] README: build and engine-publish status badges instead of a languages badge; language support with logos, parser/engine columns and maturity --- README.md | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 92f6e051e..97d6b9770 100644 --- a/README.md +++ b/README.md @@ -5,14 +5,15 @@

+ Build + Engines License: FSL-1.1-Apache-2.0 Node ≥ 22.5 - Languages

What it does · - Languages · + Language support · Quick start · What you get · How it works · @@ -35,15 +36,31 @@ Point it at a repository and it builds a **call graph**: a map of which function - **Validated against the compiler.** Results are scored against ground truth from the language's own toolchain — the JDK's class-file parser over compiled bytecode, the TypeScript compiler, CPython's bytecode and tracing — never against another third-party analyzer. On hand-crafted constructs: precision 1.000, recall 1.000. - **Honest about what it doesn't know.** Every edge carries a confidence tier, and a call the engine cannot resolve is kept as a row that says so — never silently dropped. A test asserts the number of silently missing call sites is zero. -## Supported languages +## Language support -| language | maturity | what "maturity" means here | -|---|---|---| -| **Java** | stable | first front end; validated on hand-crafted constructs (P/R 1.000) and on five real commits of a large open-source project against bytecode ground truth; Spring/DI configuration wiring resolved | -| **TypeScript** | stable | 53 regression cases plus real projects scored against the TypeScript compiler's own resolution; structural typing, overload sets, module graph, `.d.ts` libraries | -| **Python** | stable | MRO, decorators, protocols, dynamic-attribute detection; scored against CPython bytecode and `sys.settrace` on a 600-site torture suite | -| **JavaScript** | in progress | parser complete; engine under review | -| **C#** | planned | — | +

+ Java +     + TypeScript +     + Python +     + JavaScript +     + C# +

+ +Two stages, two columns: the **parser** turns source into the relational IR; the **engine** turns the IR into the graph. A language is usable end to end when both are there. + +| language | parser | engine | maturity | validated against | +|---|---|---|---|---| +| **Java** | stable | stable | **stable** — first front end; hand-crafted constructs (P/R 1.000) and five real commits of a large open-source project scored against bytecode; Spring/DI configuration wiring resolved | the JDK's own class-file parser over compiled artifacts; runtime tracing | +| **TypeScript** | stable | stable | **stable** — 53 regression cases and real projects; structural typing, overload sets, module graph, `.d.ts` libraries | the TypeScript compiler's own resolution | +| **Python** | stable | stable | **stable** — MRO, decorators, protocols, dynamic-attribute detection; 600-site torture suite | CPython bytecode and `sys.settrace` | +| **JavaScript** | stable | in progress | **in progress** — the parser (binder, JSDoc as the type channel, CommonJS + ESM) is complete; the engine is under review | — | +| **C#** | planned | planned | **planned** | — | + +The parser also extracts build and configuration files the Java engine reads for wiring — Gradle, XML (Spring beans, `web.xml`, `pom.xml`), YAML, `.properties`, `META-INF/services`. See [`parser/README.md`](parser/README.md) for the full list and what each relation holds. A repository with several languages is one command: the parser emits every language it finds, and each is solved into its own `graph.sqlite`. Graphs are per language — a Java→TypeScript call is not an edge in either.