From 25c3ce3290dc5a442479797fe935f75c2c23e95f Mon Sep 17 00:00:00 2001 From: Lightning Pixel Date: Sun, 9 Aug 2026 18:27:39 +0200 Subject: [PATCH] Drop the Languages section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was doing two jobs at once. The list answered "is my language here?", a question a reader scans for. The table answered "how good is who-calls in it?", which is a caveat — and it sat two screens from the top, formatted like a selling point, describing other people's repositories. The list survives as one line under Install, where it is next to the other thing a reader checks before installing. The table's point survives as one bullet among the call graph's other limits, where the reader who wants that depth is already looking: a call through a receiver on a typed object cannot be attributed, so the graph is thinner in Java, C# and C++ than in C, Go or TypeScript. The per-project percentages are gone; the CHANGELOG still records them. Also fixed the header nav, which still linked to the anchor this removed. All five internal links now resolve. Co-Authored-By: Claude Opus 5 --- README.md | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index aa36398..ac27b58 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Index a codebase once, address every symbol by a short code, and read only the function you actually need. -[Install](#install) · [Commands](#commands) · [Languages](#languages) · [Claude Code](#claude-code) · [Numbers](#numbers) +[Install](#install) · [Commands](#commands) · [Claude Code](#claude-code) · [Numbers](#numbers) · [Limits](#what-the-call-graph-does-not-know) @@ -45,6 +45,8 @@ orvix init Node 20 or later. Pure JavaScript and WebAssembly — nothing to compile. +Indexes TypeScript, TSX, JavaScript, Python, Go, Rust, Java, C#, C++ and C. + ## Commands | Command | What it does | @@ -100,28 +102,6 @@ Both compressions are on by default. To turn one off without touching your agent decided to make, so `orvix who-calls` before a signature change still depends on the instruction block. Compression is mechanical; navigation is a recommendation. -## Languages - -TypeScript · TSX · JavaScript · Python · Go · Rust · Java · C# · C++ · C - -`map`, `show` and `find` behave the same in all of them. **The call graph does not**, and it is -worth knowing before you lean on it. Each row is a real project, indexed end to end: - -| Project | Language | Files | Calls resolved | Refused as ambiguous | -|---|---|---|---|---| -| curl/curl | C | 1 068 | **42%** | **2%** | -| JamesNK/Newtonsoft.Json | C# | 945 | 27% | 59% | -| fmtlib/fmt | C++ | 77 | 27% | 30% | -| google/gson | Java | 264 | 25% | 33% | - -The rest of each row is calls into the standard library, which resolve to nothing by design. - -The split is not about the language being hard — it is about where calls go. C has free functions -with project-unique names, exactly what a syntactic resolver can follow, and it gives the densest -graph here. C#, C++ and Java send most calls through a receiver on a typed object, and `x.Get(…)` -cannot be attributed without knowing the type of `x`. Refusing to guess is the rule working: a -wrong edge is worse than a missing one. - ## Numbers Every figure comes from a command in this repository, measured on Orvix's own source — 75 files, @@ -197,6 +177,9 @@ unique exported name — never across a language family. own side of it. - **Type references are not call edges**, so an interface reports no callers. Ranking compensates by biasing toward exported symbols. +- **A call through a receiver on a typed object cannot be attributed** — `x.Get(…)` needs the type + of `x`. This makes the graph thinner in Java, C# and C++, where most calls take that form, than + in C, Go or TypeScript. `map`, `show` and `find` are unaffected. - Import following is implemented for ECMAScript module paths; the other languages rely on same-file scope and project-unique names.