Skip to content

Commit d550ac0

Browse files
committed
docs: document --call-graph-provider and Jelly backend; fix analysis.json output shape
1 parent eed1509 commit d550ac0

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ It is the TypeScript backend behind [CLDK](https://github.com/codellm-devkit/pyt
99
mirroring its [Python](https://github.com/codellm-devkit/codeanalyzer-python) and
1010
[Java](https://github.com/codellm-devkit/codeanalyzer-java) siblings.
1111

12+
The call graph defaults to the TypeScript compiler's resolver, but the `cants` binary also
13+
embeds [Jelly](https://github.com/cs-au-dk/jelly) — a flow-based analyzer that resolves
14+
higher-order and callback edges the resolver misses — as an experimental backend. Select it
15+
with `--call-graph-provider jelly` (or `both` to run each and log how their edge sets differ);
16+
no extra install is needed, since Jelly ships inside the binary.
17+
1218
The analyzer resolves types and call targets with the TypeScript compiler, so the project
1319
being analyzed should be a normal Node/TypeScript project. By default, the analyzer
1420
materializes the project's dependencies (`node_modules`) so that imported library calls can
@@ -101,6 +107,8 @@ Options:
101107
(use a prepared node_modules)
102108
--no-phantoms disable phantom (external) nodes for imported/
103109
required library calls
110+
--call-graph-provider <name>
111+
call-graph backend: tsc (default) | jelly | both
104112
-c, --cache-dir <dir> cache/intermediate directory
105113
-v, --verbose increase verbosity (repeatable)
106114
-h, --help display help for command
@@ -166,14 +174,16 @@ The output document is a `TSApplication` with the following top-level shape:
166174
{
167175
"symbol_table": { /* file path → module (classes, interfaces, enums,
168176
type aliases, functions, namespaces, variables, …) */ },
169-
"call_graph": [ /* CALL_DEP edges: { source, target, weight,
177+
"call_graph": [ /* CALL_DEP edges: { source, target, type, weight,
170178
provenance, tags } keyed by callable signature */ ],
171179
"external_symbols": { /* phantom stubs for call targets outside the project
172-
(imported libraries / Node builtins) */ },
173-
"entrypoints": { /* framework-detected entrypoints (empty at level 1) */ }
180+
(imported libraries / Node builtins) */ }
174181
}
175182
```
176183

184+
Framework-detected entrypoints are embedded on the owning callables and classes
185+
(an `entrypoints` array on each), not collected in a top-level map.
186+
177187
Caller- and callee-side identifiers are produced by a single signature canonicalizer, so call
178188
graph `source`/`target` values byte-match the corresponding `symbol_table` (or
179189
`external_symbols`) keys.

0 commit comments

Comments
 (0)