repo-codegraph 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +405 -2
- package/dist/analyzer/analyzeProject.d.ts +17 -0
- package/dist/analyzer/analyzeProject.d.ts.map +1 -0
- package/dist/analyzer/analyzeProject.js +338 -0
- package/dist/analyzer/analyzeProject.js.map +1 -0
- package/dist/analyzer/buildDefinitionGraph.d.ts +47 -0
- package/dist/analyzer/buildDefinitionGraph.d.ts.map +1 -0
- package/dist/analyzer/buildDefinitionGraph.js +60 -0
- package/dist/analyzer/buildDefinitionGraph.js.map +1 -0
- package/dist/analyzer/incrementalIndex.d.ts +21 -0
- package/dist/analyzer/incrementalIndex.d.ts.map +1 -0
- package/dist/analyzer/incrementalIndex.js +115 -0
- package/dist/analyzer/incrementalIndex.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +221 -0
- package/dist/cli.js.map +1 -0
- package/dist/files/discoverSourceFiles.d.ts +8 -0
- package/dist/files/discoverSourceFiles.d.ts.map +1 -0
- package/dist/files/discoverSourceFiles.js +46 -0
- package/dist/files/discoverSourceFiles.js.map +1 -0
- package/dist/git/diffImpact.d.ts +22 -0
- package/dist/git/diffImpact.d.ts.map +1 -0
- package/dist/git/diffImpact.js +113 -0
- package/dist/git/diffImpact.js.map +1 -0
- package/dist/graph/DirectedGraph.d.ts +44 -0
- package/dist/graph/DirectedGraph.d.ts.map +1 -0
- package/dist/graph/DirectedGraph.js +258 -0
- package/dist/graph/DirectedGraph.js.map +1 -0
- package/dist/graph/types.d.ts +13 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +2 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/projectSession.d.ts +18 -0
- package/dist/mcp/projectSession.d.ts.map +1 -0
- package/dist/mcp/projectSession.js +86 -0
- package/dist/mcp/projectSession.js.map +1 -0
- package/dist/mcp/server.d.ts +23 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +512 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +3 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +35 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/parser/extractDeclarations.d.ts +30 -0
- package/dist/parser/extractDeclarations.d.ts.map +1 -0
- package/dist/parser/extractDeclarations.js +83 -0
- package/dist/parser/extractDeclarations.js.map +1 -0
- package/dist/parser/parseSourceFile.d.ts +4 -0
- package/dist/parser/parseSourceFile.d.ts.map +1 -0
- package/dist/parser/parseSourceFile.js +9 -0
- package/dist/parser/parseSourceFile.js.map +1 -0
- package/dist/persistence/jsonPersistence.d.ts +7 -0
- package/dist/persistence/jsonPersistence.d.ts.map +1 -0
- package/dist/persistence/jsonPersistence.js +98 -0
- package/dist/persistence/jsonPersistence.js.map +1 -0
- package/dist/queries/analyzeImpact.d.ts +14 -0
- package/dist/queries/analyzeImpact.d.ts.map +1 -0
- package/dist/queries/analyzeImpact.js +56 -0
- package/dist/queries/analyzeImpact.js.map +1 -0
- package/dist/queries/codeGraphQueries.d.ts +7 -0
- package/dist/queries/codeGraphQueries.d.ts.map +1 -0
- package/dist/queries/codeGraphQueries.js +86 -0
- package/dist/queries/codeGraphQueries.js.map +1 -0
- package/package.json +44 -3
package/dist/cli.js
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { analyzeDiffImpact, analyzeImpact, analyzeProject, defaultIndexPath, findCodePath, findSymbols, getCodeDependencies, getCodeDependents, loadProjectAnalysis, readGitDiff, saveProjectAnalysis, updateProjectIndex, } from "./index.js";
|
|
5
|
+
export async function runCli(arguments_) {
|
|
6
|
+
const options = parseOptions(arguments_);
|
|
7
|
+
const [command, ...operands] = options.operands;
|
|
8
|
+
if (command === undefined || command === "help" || command === "--help") {
|
|
9
|
+
printUsage();
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
const effectiveRoot = command === "index" && operands[0] !== undefined
|
|
13
|
+
? operands[0]
|
|
14
|
+
: options.rootDirectory;
|
|
15
|
+
if (command === "update") {
|
|
16
|
+
const updateRoot = operands[0] ?? options.rootDirectory;
|
|
17
|
+
const indexPath = options.graphFile ?? defaultIndexPath(updateRoot);
|
|
18
|
+
const result = await updateProjectIndex(indexPath, updateRoot);
|
|
19
|
+
console.log(`Added files: ${result.files.added.length}`);
|
|
20
|
+
console.log(`Changed files: ${result.files.changed.length}`);
|
|
21
|
+
console.log(`Deleted files: ${result.files.deleted.length}`);
|
|
22
|
+
console.log(`Affected files: ${result.files.affected.length}`);
|
|
23
|
+
console.log(`Reused files: ${result.files.reused.length}`);
|
|
24
|
+
console.log(`Saved: ${path.resolve(indexPath)}`);
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
const analysis = command !== "index" && options.graphFile !== undefined
|
|
28
|
+
? await loadProjectAnalysis(options.graphFile)
|
|
29
|
+
: await analyzeProject(effectiveRoot);
|
|
30
|
+
const graph = analysis.graph;
|
|
31
|
+
switch (command) {
|
|
32
|
+
case "index": {
|
|
33
|
+
const outputPath = options.outputFile ?? defaultIndexPath(analysis.rootDirectory);
|
|
34
|
+
await saveProjectAnalysis(analysis, outputPath);
|
|
35
|
+
const edgeCounts = new Map();
|
|
36
|
+
for (const edge of graph.getEdges()) {
|
|
37
|
+
edgeCounts.set(edge.type, (edgeCounts.get(edge.type) ?? 0) + 1);
|
|
38
|
+
}
|
|
39
|
+
console.log(`Files: ${graph.getNodes().filter((node) => node.data.nodeType === "file").length}`);
|
|
40
|
+
console.log(`Symbols: ${graph.getNodes().filter((node) => node.data.nodeType === "symbol").length}`);
|
|
41
|
+
console.log(`Edges: ${graph.edgeCount}`);
|
|
42
|
+
for (const [type, count] of edgeCounts) {
|
|
43
|
+
console.log(` ${type}: ${count}`);
|
|
44
|
+
}
|
|
45
|
+
console.log(`Diagnostics: ${analysis.diagnostics.length}`);
|
|
46
|
+
const diagnosticCounts = new Map();
|
|
47
|
+
for (const diagnostic of analysis.diagnostics) {
|
|
48
|
+
diagnosticCounts.set(diagnostic.kind, (diagnosticCounts.get(diagnostic.kind) ?? 0) + 1);
|
|
49
|
+
}
|
|
50
|
+
for (const [kind, count] of diagnosticCounts) {
|
|
51
|
+
console.log(` ${kind}: ${count}`);
|
|
52
|
+
}
|
|
53
|
+
console.log(`Saved: ${path.resolve(outputPath)}`);
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
case "find": {
|
|
57
|
+
const query = requiredOperand(operands[0], "find requires a symbol query");
|
|
58
|
+
for (const node of findSymbols(graph, query)) {
|
|
59
|
+
console.log(formatNode(node));
|
|
60
|
+
}
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
case "deps": {
|
|
64
|
+
const node = resolveOne(graph, requiredOperand(operands[0], "deps requires a symbol"));
|
|
65
|
+
const relationships = node.data.nodeType === "file" ? ["IMPORTS"] : ["CALLS"];
|
|
66
|
+
for (const dependency of getCodeDependencies(graph, node.id, relationships)) {
|
|
67
|
+
console.log(formatNode(dependency));
|
|
68
|
+
}
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
case "dependents": {
|
|
72
|
+
const node = resolveOne(graph, requiredOperand(operands[0], "dependents requires a symbol"));
|
|
73
|
+
const relationships = node.data.nodeType === "file" ? ["IMPORTS"] : ["CALLS"];
|
|
74
|
+
for (const dependent of getCodeDependents(graph, node.id, relationships)) {
|
|
75
|
+
console.log(formatNode(dependent));
|
|
76
|
+
}
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
case "path": {
|
|
80
|
+
const source = resolveOne(graph, requiredOperand(operands[0], "path requires a source"));
|
|
81
|
+
const target = resolveOne(graph, requiredOperand(operands[1], "path requires a target"));
|
|
82
|
+
const result = findCodePath(graph, source.id, target.id);
|
|
83
|
+
if (result === null) {
|
|
84
|
+
console.log("No dependency path found.");
|
|
85
|
+
return 1;
|
|
86
|
+
}
|
|
87
|
+
for (const id of result) {
|
|
88
|
+
const node = graph.getNode(id);
|
|
89
|
+
if (node !== undefined) {
|
|
90
|
+
console.log(formatNode(node));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
case "impact": {
|
|
96
|
+
const node = resolveOne(graph, requiredOperand(operands[0], "impact requires a symbol"));
|
|
97
|
+
printImpact(analyzeImpact(graph, node.id));
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
case "diff": {
|
|
101
|
+
const diff = await readGitDiff(analysis.rootDirectory);
|
|
102
|
+
const result = analyzeDiffImpact(graph, diff);
|
|
103
|
+
if (result.changedSymbols.length === 0) {
|
|
104
|
+
console.log("No changed symbols found in tracked TypeScript changes.");
|
|
105
|
+
}
|
|
106
|
+
for (const [index, changed] of result.changedSymbols.entries()) {
|
|
107
|
+
console.log(index === 0 ? "Changed symbols:" : "");
|
|
108
|
+
console.log(`- ${formatNode(changed)}`);
|
|
109
|
+
}
|
|
110
|
+
for (const impact of result.impacts) {
|
|
111
|
+
printImpact(impact);
|
|
112
|
+
}
|
|
113
|
+
if (result.unmappedLines.length > 0) {
|
|
114
|
+
console.log("Unmapped changed lines:");
|
|
115
|
+
for (const line of result.unmappedLines) {
|
|
116
|
+
console.log(`- ${line.filePath}:${line.line}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
default:
|
|
122
|
+
throw new Error(`Unknown command: ${command}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function parseOptions(arguments_) {
|
|
126
|
+
const result = [...arguments_];
|
|
127
|
+
const rootDirectory = takeOption(result, "--root") ?? process.cwd();
|
|
128
|
+
const graphFile = takeOption(result, "--graph");
|
|
129
|
+
const outputFile = takeOption(result, "--output");
|
|
130
|
+
return { operands: result, rootDirectory, graphFile, outputFile };
|
|
131
|
+
}
|
|
132
|
+
function takeOption(arguments_, option) {
|
|
133
|
+
const index = arguments_.indexOf(option);
|
|
134
|
+
if (index === -1) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
const value = arguments_[index + 1];
|
|
138
|
+
if (value === undefined) {
|
|
139
|
+
throw new Error(`${option} requires a value`);
|
|
140
|
+
}
|
|
141
|
+
arguments_.splice(index, 2);
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
function resolveOne(graph, query) {
|
|
145
|
+
const byId = graph.getNode(query);
|
|
146
|
+
if (byId !== undefined) {
|
|
147
|
+
return byId;
|
|
148
|
+
}
|
|
149
|
+
const fileMatch = graph
|
|
150
|
+
.getNodes()
|
|
151
|
+
.find((node) => node.data.nodeType === "file" && node.data.filePath === query);
|
|
152
|
+
if (fileMatch !== undefined) {
|
|
153
|
+
return fileMatch;
|
|
154
|
+
}
|
|
155
|
+
const matches = findSymbols(graph, query);
|
|
156
|
+
const exact = matches.filter((node) => node.data.qualifiedName === query || node.data.name === query);
|
|
157
|
+
const candidates = exact.length > 0 ? exact : matches;
|
|
158
|
+
if (candidates.length === 0) {
|
|
159
|
+
throw new Error(`No symbol matches: ${query}`);
|
|
160
|
+
}
|
|
161
|
+
if (candidates.length > 1) {
|
|
162
|
+
throw new Error(`Symbol is ambiguous: ${query}\n${candidates.map((node) => `- ${formatNode(node)}`).join("\n")}`);
|
|
163
|
+
}
|
|
164
|
+
const match = candidates[0];
|
|
165
|
+
if (match === undefined) {
|
|
166
|
+
throw new Error(`No symbol matches: ${query}`);
|
|
167
|
+
}
|
|
168
|
+
return match;
|
|
169
|
+
}
|
|
170
|
+
function requiredOperand(value, message) {
|
|
171
|
+
if (value === undefined) {
|
|
172
|
+
throw new Error(message);
|
|
173
|
+
}
|
|
174
|
+
return value;
|
|
175
|
+
}
|
|
176
|
+
function formatNode(node) {
|
|
177
|
+
if (node.data.nodeType === "file") {
|
|
178
|
+
return node.data.filePath;
|
|
179
|
+
}
|
|
180
|
+
return `${node.data.qualifiedName} (${node.data.location.file}:${node.data.location.line}:${node.data.location.column})`;
|
|
181
|
+
}
|
|
182
|
+
function printImpact(result) {
|
|
183
|
+
console.log(`Changed: ${formatNode(result.changed)}`);
|
|
184
|
+
console.log("Direct dependents:");
|
|
185
|
+
for (const node of result.directDependents) {
|
|
186
|
+
console.log(`- ${formatNode(node)}`);
|
|
187
|
+
}
|
|
188
|
+
console.log("Indirect dependents:");
|
|
189
|
+
for (const node of result.indirectDependents) {
|
|
190
|
+
console.log(`- ${formatNode(node)}`);
|
|
191
|
+
}
|
|
192
|
+
console.log("Potentially affected files:");
|
|
193
|
+
for (const file of result.affectedFiles) {
|
|
194
|
+
console.log(`- ${file}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function printUsage() {
|
|
198
|
+
console.log([
|
|
199
|
+
"Usage:",
|
|
200
|
+
" codegraph index [root] [--output <file>]",
|
|
201
|
+
" codegraph update [root] [--graph <file>]",
|
|
202
|
+
" codegraph find <query> [--root <directory> | --graph <file>]",
|
|
203
|
+
" codegraph deps <symbol> [--root <directory> | --graph <file>]",
|
|
204
|
+
" codegraph dependents <symbol> [--root <directory> | --graph <file>]",
|
|
205
|
+
" codegraph path <source> <target> [--root <directory> | --graph <file>]",
|
|
206
|
+
" codegraph impact <symbol> [--root <directory> | --graph <file>]",
|
|
207
|
+
" codegraph diff [--root <directory> | --graph <file>]",
|
|
208
|
+
].join("\n"));
|
|
209
|
+
}
|
|
210
|
+
const invokedPath = process.argv[1];
|
|
211
|
+
if (invokedPath !== undefined && import.meta.url === pathToFileURL(invokedPath).href) {
|
|
212
|
+
runCli(process.argv.slice(2))
|
|
213
|
+
.then((exitCode) => {
|
|
214
|
+
process.exitCode = exitCode;
|
|
215
|
+
})
|
|
216
|
+
.catch((error) => {
|
|
217
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
218
|
+
process.exitCode = 1;
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds TypeScript source files below `rootDirectory`.
|
|
3
|
+
*
|
|
4
|
+
* Results are sorted, root-relative, and use forward slashes so they are
|
|
5
|
+
* stable across operating systems. Symbolic links are deliberately ignored.
|
|
6
|
+
*/
|
|
7
|
+
export declare function discoverSourceFiles(rootDirectory: string): Promise<readonly string[]>;
|
|
8
|
+
//# sourceMappingURL=discoverSourceFiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoverSourceFiles.d.ts","sourceRoot":"","sources":["../../src/files/discoverSourceFiles.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAO5B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const IGNORED_DIRECTORY_NAMES = new Set([
|
|
4
|
+
".git",
|
|
5
|
+
"build",
|
|
6
|
+
"coverage",
|
|
7
|
+
"dist",
|
|
8
|
+
"node_modules",
|
|
9
|
+
]);
|
|
10
|
+
/**
|
|
11
|
+
* Finds TypeScript source files below `rootDirectory`.
|
|
12
|
+
*
|
|
13
|
+
* Results are sorted, root-relative, and use forward slashes so they are
|
|
14
|
+
* stable across operating systems. Symbolic links are deliberately ignored.
|
|
15
|
+
*/
|
|
16
|
+
export async function discoverSourceFiles(rootDirectory) {
|
|
17
|
+
const absoluteRoot = path.resolve(rootDirectory);
|
|
18
|
+
const sourceFiles = [];
|
|
19
|
+
await visitDirectory(absoluteRoot, absoluteRoot, sourceFiles);
|
|
20
|
+
return sourceFiles.sort((left, right) => left.localeCompare(right));
|
|
21
|
+
}
|
|
22
|
+
async function visitDirectory(absoluteRoot, currentDirectory, sourceFiles) {
|
|
23
|
+
const entries = await readdir(currentDirectory, { withFileTypes: true });
|
|
24
|
+
for (const entry of entries) {
|
|
25
|
+
const absolutePath = path.join(currentDirectory, entry.name);
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
if (!IGNORED_DIRECTORY_NAMES.has(entry.name)) {
|
|
28
|
+
await visitDirectory(absoluteRoot, absolutePath, sourceFiles);
|
|
29
|
+
}
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (entry.isFile() && isTypeScriptSourceFile(entry.name)) {
|
|
33
|
+
sourceFiles.push(toPortableRelativePath(absoluteRoot, absolutePath));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function isTypeScriptSourceFile(fileName) {
|
|
38
|
+
if (fileName.endsWith(".d.ts")) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return fileName.endsWith(".ts") || fileName.endsWith(".tsx");
|
|
42
|
+
}
|
|
43
|
+
function toPortableRelativePath(absoluteRoot, absolutePath) {
|
|
44
|
+
return path.relative(absoluteRoot, absolutePath).split(path.sep).join("/");
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=discoverSourceFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoverSourceFiles.js","sourceRoot":"","sources":["../../src/files/discoverSourceFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,MAAM;IACN,OAAO;IACP,UAAU;IACV,MAAM;IACN,cAAc;CACf,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,aAAqB;IAErB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAE9D,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,YAAoB,EACpB,gBAAwB,EACxB,WAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,MAAM,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YAChE,CAAC;YAED,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,sBAAsB,CAC7B,YAAoB,EACpB,YAAoB;IAEpB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CodeGraph, SymbolNodeData } from "../analyzer/buildDefinitionGraph.js";
|
|
2
|
+
import type { GraphNode } from "../graph/types.js";
|
|
3
|
+
import { type ImpactOptions, type ImpactResult } from "../queries/analyzeImpact.js";
|
|
4
|
+
export interface ChangedFileLines {
|
|
5
|
+
readonly filePath: string;
|
|
6
|
+
readonly lines: readonly number[];
|
|
7
|
+
}
|
|
8
|
+
export interface UnmappedChangedLine {
|
|
9
|
+
readonly filePath: string;
|
|
10
|
+
readonly line: number;
|
|
11
|
+
}
|
|
12
|
+
export interface DiffImpactResult {
|
|
13
|
+
readonly changes: readonly ChangedFileLines[];
|
|
14
|
+
readonly changedSymbols: readonly GraphNode<SymbolNodeData>[];
|
|
15
|
+
readonly impacts: readonly ImpactResult[];
|
|
16
|
+
readonly unmappedLines: readonly UnmappedChangedLine[];
|
|
17
|
+
}
|
|
18
|
+
/** Reads staged and unstaged tracked changes relative to HEAD. */
|
|
19
|
+
export declare function readGitDiff(rootDirectory: string): Promise<string>;
|
|
20
|
+
export declare function parseGitDiff(diffText: string): readonly ChangedFileLines[];
|
|
21
|
+
export declare function analyzeDiffImpact(graph: CodeGraph, diffText: string, impactOptions?: ImpactOptions): DiffImpactResult;
|
|
22
|
+
//# sourceMappingURL=diffImpact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffImpact.d.ts","sourceRoot":"","sources":["../../src/git/diffImpact.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEnG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACxD;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAelE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE,CA4C1E;AAOD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAkB,GAChC,gBAAgB,CAoClB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { analyzeImpact } from "../queries/analyzeImpact.js";
|
|
3
|
+
/** Reads staged and unstaged tracked changes relative to HEAD. */
|
|
4
|
+
export function readGitDiff(rootDirectory) {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
execFile("git", ["diff", "--unified=0", "--no-color", "HEAD", "--"], { cwd: rootDirectory, encoding: "utf8", maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
7
|
+
if (error !== null) {
|
|
8
|
+
reject(new Error(stderr.trim() || error.message));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
resolve(stdout);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export function parseGitDiff(diffText) {
|
|
16
|
+
const changedLinesByFile = new Map();
|
|
17
|
+
let currentFile = null;
|
|
18
|
+
for (const line of diffText.split("\n")) {
|
|
19
|
+
if (line.startsWith("+++ ")) {
|
|
20
|
+
const pathText = line.slice(4);
|
|
21
|
+
currentFile = pathText === "/dev/null"
|
|
22
|
+
? null
|
|
23
|
+
: pathText.startsWith("b/")
|
|
24
|
+
? pathText.slice(2)
|
|
25
|
+
: pathText;
|
|
26
|
+
if (currentFile !== null && !isTypeScriptSourcePath(currentFile)) {
|
|
27
|
+
currentFile = null;
|
|
28
|
+
}
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (currentFile === null || !line.startsWith("@@")) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const match = /^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(line);
|
|
35
|
+
if (match === null) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const start = Number(match[1]);
|
|
39
|
+
const count = match[2] === undefined ? 1 : Number(match[2]);
|
|
40
|
+
let fileLines = changedLinesByFile.get(currentFile);
|
|
41
|
+
if (fileLines === undefined) {
|
|
42
|
+
fileLines = new Set();
|
|
43
|
+
changedLinesByFile.set(currentFile, fileLines);
|
|
44
|
+
}
|
|
45
|
+
for (let offset = 0; offset < count; offset += 1) {
|
|
46
|
+
fileLines.add(start + offset);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return [...changedLinesByFile]
|
|
50
|
+
.map(([filePath, lines]) => ({
|
|
51
|
+
filePath,
|
|
52
|
+
lines: [...lines].sort((left, right) => left - right),
|
|
53
|
+
}))
|
|
54
|
+
.sort((left, right) => left.filePath.localeCompare(right.filePath));
|
|
55
|
+
}
|
|
56
|
+
function isTypeScriptSourcePath(filePath) {
|
|
57
|
+
return !filePath.endsWith(".d.ts") &&
|
|
58
|
+
(filePath.endsWith(".ts") || filePath.endsWith(".tsx"));
|
|
59
|
+
}
|
|
60
|
+
export function analyzeDiffImpact(graph, diffText, impactOptions = {}) {
|
|
61
|
+
const changes = parseGitDiff(diffText);
|
|
62
|
+
const symbolsByFile = indexSymbolsByFile(graph);
|
|
63
|
+
const changedSymbolIds = new Set();
|
|
64
|
+
const unmappedLines = [];
|
|
65
|
+
for (const change of changes) {
|
|
66
|
+
const candidates = symbolsByFile.get(change.filePath) ?? [];
|
|
67
|
+
for (const line of change.lines) {
|
|
68
|
+
const containing = candidates
|
|
69
|
+
.filter((node) => node.data.range.startLine <= line && node.data.range.endLine >= line)
|
|
70
|
+
.sort(compareInnermostFirst);
|
|
71
|
+
const symbol = containing[0];
|
|
72
|
+
if (symbol === undefined) {
|
|
73
|
+
unmappedLines.push({ filePath: change.filePath, line });
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
changedSymbolIds.add(symbol.id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const changedSymbols = [...changedSymbolIds].map((id) => {
|
|
81
|
+
const node = graph.getNode(id);
|
|
82
|
+
if (node === undefined || node.data.nodeType !== "symbol") {
|
|
83
|
+
throw new Error(`Internal diff mapping invariant failed for symbol: ${id}`);
|
|
84
|
+
}
|
|
85
|
+
return node;
|
|
86
|
+
});
|
|
87
|
+
const impacts = changedSymbols.map((node) => analyzeImpact(graph, node.id, impactOptions));
|
|
88
|
+
return { changes, changedSymbols, impacts, unmappedLines };
|
|
89
|
+
}
|
|
90
|
+
function indexSymbolsByFile(graph) {
|
|
91
|
+
const result = new Map();
|
|
92
|
+
for (const node of graph.getNodes()) {
|
|
93
|
+
if (node.data.nodeType !== "symbol") {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
let symbols = result.get(node.data.range.file);
|
|
97
|
+
if (symbols === undefined) {
|
|
98
|
+
symbols = [];
|
|
99
|
+
result.set(node.data.range.file, symbols);
|
|
100
|
+
}
|
|
101
|
+
symbols.push(node);
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
function compareInnermostFirst(left, right) {
|
|
106
|
+
const leftSpan = left.data.range.endLine - left.data.range.startLine;
|
|
107
|
+
const rightSpan = right.data.range.endLine - right.data.range.startLine;
|
|
108
|
+
if (leftSpan !== rightSpan) {
|
|
109
|
+
return leftSpan - rightSpan;
|
|
110
|
+
}
|
|
111
|
+
return right.data.qualifiedName.length - left.data.qualifiedName.length;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=diffImpact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffImpact.js","sourceRoot":"","sources":["../../src/git/diffImpact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { GraphEdge, GraphNode } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* A generic directed graph with deterministic insertion-order traversal.
|
|
4
|
+
*
|
|
5
|
+
* A -> B means A depends on B. Outgoing adjacency therefore answers
|
|
6
|
+
* dependency queries, while incoming adjacency answers dependent queries.
|
|
7
|
+
*/
|
|
8
|
+
export declare class DirectedGraph<NodeData = unknown, EdgeType extends string = string, EdgeData = unknown> {
|
|
9
|
+
private readonly nodes;
|
|
10
|
+
private readonly outgoing;
|
|
11
|
+
private readonly incoming;
|
|
12
|
+
get nodeCount(): number;
|
|
13
|
+
get edgeCount(): number;
|
|
14
|
+
addNode(node: GraphNode<NodeData>): void;
|
|
15
|
+
addEdge(edge: GraphEdge<EdgeType, EdgeData>): void;
|
|
16
|
+
removeNode(id: string): boolean;
|
|
17
|
+
removeEdge(from: string, to: string, type: EdgeType): boolean;
|
|
18
|
+
getNode(id: string): GraphNode<NodeData> | undefined;
|
|
19
|
+
getNodes(): readonly GraphNode<NodeData>[];
|
|
20
|
+
getEdges(): readonly GraphEdge<EdgeType, EdgeData>[];
|
|
21
|
+
getOutgoingEdges(id: string): readonly GraphEdge<EdgeType, EdgeData>[];
|
|
22
|
+
getIncomingEdges(id: string): readonly GraphEdge<EdgeType, EdgeData>[];
|
|
23
|
+
hasEdge(from: string, to: string, type: EdgeType): boolean;
|
|
24
|
+
/** Returns nodes at the destination of this node's outgoing edges. */
|
|
25
|
+
getNeighbors(id: string): readonly GraphNode<NodeData>[];
|
|
26
|
+
/** Returns the direct nodes that `id` depends on. */
|
|
27
|
+
getDependencies(id: string): readonly GraphNode<NodeData>[];
|
|
28
|
+
/** Returns the direct nodes that depend on `id`. */
|
|
29
|
+
getDependents(id: string): readonly GraphNode<NodeData>[];
|
|
30
|
+
/** Breadth-first traversal over outgoing edges. */
|
|
31
|
+
bfs(startId: string): readonly string[];
|
|
32
|
+
/** Iterative depth-first traversal over outgoing edges. */
|
|
33
|
+
dfs(startId: string): readonly string[];
|
|
34
|
+
/** Finds a shortest path by edge count, following outgoing edges. */
|
|
35
|
+
findPath(sourceId: string, targetId: string): readonly string[] | null;
|
|
36
|
+
private assertNodeExists;
|
|
37
|
+
private getAdjacencyBucket;
|
|
38
|
+
private getOrCreateNeighborBucket;
|
|
39
|
+
private getNeighborIds;
|
|
40
|
+
private nodesForIds;
|
|
41
|
+
private edgesFromBucket;
|
|
42
|
+
private reconstructPath;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=DirectedGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectedGraph.d.ts","sourceRoot":"","sources":["../../src/graph/DirectedGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAYvD;;;;;GAKG;AACH,qBAAa,aAAa,CACxB,QAAQ,GAAG,OAAO,EAClB,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChC,QAAQ,GAAG,OAAO;IAElB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IACJ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IAEJ,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,IAAI,MAAM,CAUtB;IAED,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI;IAUxC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,IAAI;IA6BlD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAqB/B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO;IAqB7D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS;IAIpD,QAAQ,IAAI,SAAS,SAAS,CAAC,QAAQ,CAAC,EAAE;IAI1C,QAAQ,IAAI,SAAS,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IAYpD,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IAKtE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IAKtE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO;IAM1D,sEAAsE;IACtE,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,SAAS,CAAC,QAAQ,CAAC,EAAE;IAIxD,qDAAqD;IACrD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,SAAS,CAAC,QAAQ,CAAC,EAAE;IAK3D,oDAAoD;IACpD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,SAAS,CAAC,QAAQ,CAAC,EAAE;IAKzD,mDAAmD;IACnD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IA8BvC,2DAA2D;IAC3D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAgCvC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI;IAwCtE,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,eAAe;CAqBxB"}
|