Skip to content

code_index: graphe d'appels (tree-sitter) + code_impact (Phase 4)#4

Merged
citarf merged 1 commit into
mainfrom
feat/code-graph-impact
Jun 19, 2026
Merged

code_index: graphe d'appels (tree-sitter) + code_impact (Phase 4)#4
citarf merged 1 commit into
mainfrom
feat/code-graph-impact

Conversation

@citarf

@citarf citarf commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

Phase 4 — Graphe de code + code_impact

Pendant code du lineage data curé : « qu'est-ce qui casse si je change X ? ».

Ajouts

  • graph.py : extraction d'un graphe d'appels statique via tree-sitter (PHP/Python/TS/JS) — définitions (fonctions/classes/méthodes) reliées par leurs sites d'appel. code_impact(symbol, direction, depth) : BFS borné callers (rayon d'impact) / callees (dépendances). CLI build + impact. Pur AST, aucun appel API → artefact (JSON/JSON.gz, ~1,5 Mo gz, ~37k nœuds) reconstructible partout.
  • tsutil.py : accesseurs tree-sitter agnostiques au binding, factorisés depuis chunk_ast.py (partagés).

Qualité de résolution

Résolution par nom (multi-langage, pragmatique) avec garde-fous data-driven contre les collisions avec des primitives :

  • --max-fanout : un nom trop défini (ambigu) n'est pas relié ;
  • seuil de fréquence d'appel : un nom appelé partout (.push() ~2900×) ≈ primitive → non relié ;
  • exclusion des fichiers minifiés/bundlés.

Résultat sur le périmètre complet : 50587→37030 nœuds, top in-degree redevenu sain. Ambiguïté résiduelle signalée (ambiguous).

Tests

12 tests graph (extraction py/php, construction, garde-fous, BFS callers/callees, round-trip gz) ; suite code_index verte (66).

graph.py extrait un graphe d'appels statique (défs ↔ sites d'appel) pour PHP/
Python/TS/JS et expose code_impact : rayon d'impact (callers) et dépendances
(callees) d'un symbole. Pendant « code » du lineage data curé ; pur AST, aucun
appel API → artefact (JSON/JSON.gz, ~1,5 Mo gz, ~37k nœuds) reconstructible
partout.

Résolution par nom (multi-langage) avec deux garde-fous data-driven contre les
collisions avec des primitives (fanout de définition + fréquence d'appel) et
exclusion des fichiers minifiés/bundlés. Un nœud classe tire ses méthodes comme
graines. URLs source via le sidecar méta.

Accesseurs tree-sitter agnostiques au binding factorisés dans tsutil.py (partagés
par chunk_ast et graph). 12 tests graph + suite code_index verte (66).
@citarf citarf merged commit 5de84eb into main Jun 19, 2026
3 checks passed
@citarf citarf deleted the feat/code-graph-impact branch June 19, 2026 11:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant