Grafo: collega documenti e codice, esclude .claude/
scripts/graphify-link-docs.ts aggiunge gli archi references dai percorsi e dai simboli citati nei .md ai file e ai simboli del codice. .graphifyignore toglie le skill dal grafo. Documentato in docs/GRAFO.md. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cd4761418e
commit
f9c6263662
4 files changed
+198
No files matched your search
@@ -0,0 +1,71 @@
|
||||
/** Check del collegamento documenti ↔ codice nel grafo: `bun test/unit/graphify-link-docs.test.ts`. */
|
||||
import assert from "node:assert/strict";
|
||||
import {
|
||||
archiDocumento,
|
||||
estraiPercorsi,
|
||||
estraiSimboli,
|
||||
idDocumento,
|
||||
} from "../../scripts/graphify-link-docs";
|
||||
|
||||
// --- percorsi: solo file del repo, con la prima riga in cui compaiono ---------
|
||||
const testo =
|
||||
"Intro\nVedi `src/lib/rosa.ts` e src/routes/partita.$id.tsx.\nDi nuovo src/lib/rosa.ts, www.x.it/a.ts";
|
||||
const p = estraiPercorsi(testo);
|
||||
assert.deepEqual([...p.keys()], ["src/lib/rosa.ts", "src/routes/partita.$id.tsx"]);
|
||||
assert.equal(p.get("src/lib/rosa.ts"), 2, "tiene la prima riga");
|
||||
|
||||
// --- simboli: solo tra backtick, senza parentesi ------------------------------
|
||||
assert.deepEqual(
|
||||
[...estraiSimboli("`useIo` e `inRosa()` ma non useRosa né `a b`")],
|
||||
["useIo", "inRosa"],
|
||||
);
|
||||
|
||||
// --- id del documento come lo costruisce graphify -----------------------------
|
||||
assert.equal(idDocumento("docs/modules/allenatore.md"), "docs_modules_allenatore");
|
||||
assert.equal(idDocumento("docs/decisions/DD-034.md"), "docs_decisions_dd_034");
|
||||
|
||||
// --- archi: file citato + simboli citati che ci stanno dentro -----------------
|
||||
const grafo = {
|
||||
nodes: [
|
||||
{ id: "docs_modules_allenatore", label: "Modulo" },
|
||||
{ id: "src_lib_rosa", label: "rosa.ts", source_file: "src/lib/rosa.ts", source_location: "L1" },
|
||||
{
|
||||
id: "src_lib_rosa_useio",
|
||||
label: "useIo()",
|
||||
source_file: "src/lib/rosa.ts",
|
||||
source_location: "L160",
|
||||
},
|
||||
{
|
||||
id: "src_lib_rosa_altro",
|
||||
label: "altro()",
|
||||
source_file: "src/lib/rosa.ts",
|
||||
source_location: "L9",
|
||||
},
|
||||
{ id: "src_lib_x", label: "x.ts", source_file: "src/lib/x.ts", source_location: "L1" },
|
||||
],
|
||||
links: [],
|
||||
};
|
||||
const archi = archiDocumento(
|
||||
grafo,
|
||||
"docs/modules/allenatore.md",
|
||||
"File: `src/lib/rosa.ts` (`useIo`)",
|
||||
);
|
||||
assert.deepEqual(
|
||||
archi.map((a) => a.target),
|
||||
["src_lib_rosa", "src_lib_rosa_useio"],
|
||||
"il file e solo il simbolo citato; non altro() né file non citati",
|
||||
);
|
||||
assert.equal(archi[0]?.source, "docs_modules_allenatore");
|
||||
assert.equal(archi[0]?.["confidence"], "EXTRACTED");
|
||||
assert.deepEqual(
|
||||
archiDocumento(grafo, "docs/non-nel-grafo.md", "src/lib/rosa.ts"),
|
||||
[],
|
||||
"documento ignoto: nessun arco",
|
||||
);
|
||||
assert.deepEqual(
|
||||
archiDocumento(grafo, "docs/modules/allenatore.md", "src/lib/inesistente.ts"),
|
||||
[],
|
||||
"file non nel grafo",
|
||||
);
|
||||
|
||||
console.log("graphify-link-docs: ok");
|
||||
Reference in new issue
Block a user