@bugsbunnycodes1998/cartographer-core 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.
Files changed (220) hide show
  1. package/dist/__tests__/pipeline.test.d.ts +2 -0
  2. package/dist/__tests__/pipeline.test.d.ts.map +1 -0
  3. package/dist/__tests__/pipeline.test.js +58 -0
  4. package/dist/__tests__/pipeline.test.js.map +1 -0
  5. package/dist/analysis/call-graph.d.ts +13 -0
  6. package/dist/analysis/call-graph.d.ts.map +1 -0
  7. package/dist/analysis/call-graph.js +133 -0
  8. package/dist/analysis/call-graph.js.map +1 -0
  9. package/dist/analysis/dependency-graph.d.ts +8 -0
  10. package/dist/analysis/dependency-graph.d.ts.map +1 -0
  11. package/dist/analysis/dependency-graph.js +101 -0
  12. package/dist/analysis/dependency-graph.js.map +1 -0
  13. package/dist/analysis/git/archaeology.d.ts +20 -0
  14. package/dist/analysis/git/archaeology.d.ts.map +1 -0
  15. package/dist/analysis/git/archaeology.js +61 -0
  16. package/dist/analysis/git/archaeology.js.map +1 -0
  17. package/dist/analysis/git/bus-factor.d.ts +17 -0
  18. package/dist/analysis/git/bus-factor.d.ts.map +1 -0
  19. package/dist/analysis/git/bus-factor.js +90 -0
  20. package/dist/analysis/git/bus-factor.js.map +1 -0
  21. package/dist/analysis/git/churn.d.ts +26 -0
  22. package/dist/analysis/git/churn.d.ts.map +1 -0
  23. package/dist/analysis/git/churn.js +127 -0
  24. package/dist/analysis/git/churn.js.map +1 -0
  25. package/dist/analysis/git/contributors.d.ts +14 -0
  26. package/dist/analysis/git/contributors.d.ts.map +1 -0
  27. package/dist/analysis/git/contributors.js +60 -0
  28. package/dist/analysis/git/contributors.js.map +1 -0
  29. package/dist/analysis/git/evolution.d.ts +10 -0
  30. package/dist/analysis/git/evolution.d.ts.map +1 -0
  31. package/dist/analysis/git/evolution.js +127 -0
  32. package/dist/analysis/git/evolution.js.map +1 -0
  33. package/dist/analysis/git/index.d.ts +6 -0
  34. package/dist/analysis/git/index.d.ts.map +1 -0
  35. package/dist/analysis/git/index.js +6 -0
  36. package/dist/analysis/git/index.js.map +1 -0
  37. package/dist/analysis/go-visitor.d.ts +4 -0
  38. package/dist/analysis/go-visitor.d.ts.map +1 -0
  39. package/dist/analysis/go-visitor.js +295 -0
  40. package/dist/analysis/go-visitor.js.map +1 -0
  41. package/dist/analysis/health/indicators.d.ts +25 -0
  42. package/dist/analysis/health/indicators.d.ts.map +1 -0
  43. package/dist/analysis/health/indicators.js +53 -0
  44. package/dist/analysis/health/indicators.js.map +1 -0
  45. package/dist/analysis/health/scorer.d.ts +26 -0
  46. package/dist/analysis/health/scorer.d.ts.map +1 -0
  47. package/dist/analysis/health/scorer.js +97 -0
  48. package/dist/analysis/health/scorer.js.map +1 -0
  49. package/dist/analysis/health/test-coverage.d.ts +19 -0
  50. package/dist/analysis/health/test-coverage.d.ts.map +1 -0
  51. package/dist/analysis/health/test-coverage.js +67 -0
  52. package/dist/analysis/health/test-coverage.js.map +1 -0
  53. package/dist/analysis/import-resolver.d.ts +10 -0
  54. package/dist/analysis/import-resolver.d.ts.map +1 -0
  55. package/dist/analysis/import-resolver.js +353 -0
  56. package/dist/analysis/import-resolver.js.map +1 -0
  57. package/dist/analysis/index.d.ts +22 -0
  58. package/dist/analysis/index.d.ts.map +1 -0
  59. package/dist/analysis/index.js +24 -0
  60. package/dist/analysis/index.js.map +1 -0
  61. package/dist/analysis/java-visitor.d.ts +4 -0
  62. package/dist/analysis/java-visitor.d.ts.map +1 -0
  63. package/dist/analysis/java-visitor.js +257 -0
  64. package/dist/analysis/java-visitor.js.map +1 -0
  65. package/dist/analysis/metrics.d.ts +19 -0
  66. package/dist/analysis/metrics.d.ts.map +1 -0
  67. package/dist/analysis/metrics.js +70 -0
  68. package/dist/analysis/metrics.js.map +1 -0
  69. package/dist/analysis/module-detector.d.ts +3 -0
  70. package/dist/analysis/module-detector.d.ts.map +1 -0
  71. package/dist/analysis/module-detector.js +257 -0
  72. package/dist/analysis/module-detector.js.map +1 -0
  73. package/dist/analysis/parser.d.ts +13 -0
  74. package/dist/analysis/parser.d.ts.map +1 -0
  75. package/dist/analysis/parser.js +92 -0
  76. package/dist/analysis/parser.js.map +1 -0
  77. package/dist/analysis/python-visitor.d.ts +4 -0
  78. package/dist/analysis/python-visitor.d.ts.map +1 -0
  79. package/dist/analysis/python-visitor.js +306 -0
  80. package/dist/analysis/python-visitor.js.map +1 -0
  81. package/dist/analysis/rust-visitor.d.ts +4 -0
  82. package/dist/analysis/rust-visitor.d.ts.map +1 -0
  83. package/dist/analysis/rust-visitor.js +318 -0
  84. package/dist/analysis/rust-visitor.js.map +1 -0
  85. package/dist/analysis/semantic/cache.d.ts +16 -0
  86. package/dist/analysis/semantic/cache.d.ts.map +1 -0
  87. package/dist/analysis/semantic/cache.js +26 -0
  88. package/dist/analysis/semantic/cache.js.map +1 -0
  89. package/dist/analysis/semantic/openai-client.d.ts +21 -0
  90. package/dist/analysis/semantic/openai-client.d.ts.map +1 -0
  91. package/dist/analysis/semantic/openai-client.js +73 -0
  92. package/dist/analysis/semantic/openai-client.js.map +1 -0
  93. package/dist/analysis/semantic/prompts.d.ts +32 -0
  94. package/dist/analysis/semantic/prompts.d.ts.map +1 -0
  95. package/dist/analysis/semantic/prompts.js +134 -0
  96. package/dist/analysis/semantic/prompts.js.map +1 -0
  97. package/dist/analysis/semantic/summarizer.d.ts +36 -0
  98. package/dist/analysis/semantic/summarizer.d.ts.map +1 -0
  99. package/dist/analysis/semantic/summarizer.js +229 -0
  100. package/dist/analysis/semantic/summarizer.js.map +1 -0
  101. package/dist/analysis/ts-js-visitor.d.ts +4 -0
  102. package/dist/analysis/ts-js-visitor.d.ts.map +1 -0
  103. package/dist/analysis/ts-js-visitor.js +390 -0
  104. package/dist/analysis/ts-js-visitor.js.map +1 -0
  105. package/dist/analysis/visitor-registry.d.ts +5 -0
  106. package/dist/analysis/visitor-registry.d.ts.map +1 -0
  107. package/dist/analysis/visitor-registry.js +17 -0
  108. package/dist/analysis/visitor-registry.js.map +1 -0
  109. package/dist/analysis/visitor-utils.d.ts +38 -0
  110. package/dist/analysis/visitor-utils.d.ts.map +1 -0
  111. package/dist/analysis/visitor-utils.js +110 -0
  112. package/dist/analysis/visitor-utils.js.map +1 -0
  113. package/dist/errors.d.ts +20 -0
  114. package/dist/errors.d.ts.map +1 -0
  115. package/dist/errors.js +39 -0
  116. package/dist/errors.js.map +1 -0
  117. package/dist/expeditions/custom.d.ts +11 -0
  118. package/dist/expeditions/custom.d.ts.map +1 -0
  119. package/dist/expeditions/custom.js +61 -0
  120. package/dist/expeditions/custom.js.map +1 -0
  121. package/dist/expeditions/danger-zones.d.ts +9 -0
  122. package/dist/expeditions/danger-zones.d.ts.map +1 -0
  123. package/dist/expeditions/danger-zones.js +42 -0
  124. package/dist/expeditions/danger-zones.js.map +1 -0
  125. package/dist/expeditions/generator.d.ts +21 -0
  126. package/dist/expeditions/generator.d.ts.map +1 -0
  127. package/dist/expeditions/generator.js +78 -0
  128. package/dist/expeditions/generator.js.map +1 -0
  129. package/dist/expeditions/grand-tour.d.ts +10 -0
  130. package/dist/expeditions/grand-tour.d.ts.map +1 -0
  131. package/dist/expeditions/grand-tour.js +96 -0
  132. package/dist/expeditions/grand-tour.js.map +1 -0
  133. package/dist/expeditions/request-flow.d.ts +11 -0
  134. package/dist/expeditions/request-flow.d.ts.map +1 -0
  135. package/dist/expeditions/request-flow.js +138 -0
  136. package/dist/expeditions/request-flow.js.map +1 -0
  137. package/dist/grammars/tree-sitter-go.wasm +0 -0
  138. package/dist/grammars/tree-sitter-java.wasm +0 -0
  139. package/dist/grammars/tree-sitter-javascript.wasm +0 -0
  140. package/dist/grammars/tree-sitter-python.wasm +0 -0
  141. package/dist/grammars/tree-sitter-rust.wasm +0 -0
  142. package/dist/grammars/tree-sitter-tsx.wasm +0 -0
  143. package/dist/grammars/tree-sitter-typescript.wasm +0 -0
  144. package/dist/graph/builder.d.ts +23 -0
  145. package/dist/graph/builder.d.ts.map +1 -0
  146. package/dist/graph/builder.js +131 -0
  147. package/dist/graph/builder.js.map +1 -0
  148. package/dist/graph/exporter.d.ts +5 -0
  149. package/dist/graph/exporter.d.ts.map +1 -0
  150. package/dist/graph/exporter.js +20 -0
  151. package/dist/graph/exporter.js.map +1 -0
  152. package/dist/graph/layout.d.ts +3 -0
  153. package/dist/graph/layout.d.ts.map +1 -0
  154. package/dist/graph/layout.js +257 -0
  155. package/dist/graph/layout.js.map +1 -0
  156. package/dist/graph/store.d.ts +13 -0
  157. package/dist/graph/store.d.ts.map +1 -0
  158. package/dist/graph/store.js +145 -0
  159. package/dist/graph/store.js.map +1 -0
  160. package/dist/index.d.ts +17 -0
  161. package/dist/index.d.ts.map +1 -0
  162. package/dist/index.js +12 -0
  163. package/dist/index.js.map +1 -0
  164. package/dist/ingestion/cloner.d.ts +18 -0
  165. package/dist/ingestion/cloner.d.ts.map +1 -0
  166. package/dist/ingestion/cloner.js +62 -0
  167. package/dist/ingestion/cloner.js.map +1 -0
  168. package/dist/ingestion/file-tree.d.ts +3 -0
  169. package/dist/ingestion/file-tree.d.ts.map +1 -0
  170. package/dist/ingestion/file-tree.js +85 -0
  171. package/dist/ingestion/file-tree.js.map +1 -0
  172. package/dist/ingestion/index.d.ts +5 -0
  173. package/dist/ingestion/index.d.ts.map +1 -0
  174. package/dist/ingestion/index.js +5 -0
  175. package/dist/ingestion/index.js.map +1 -0
  176. package/dist/ingestion/language-detector.d.ts +8 -0
  177. package/dist/ingestion/language-detector.d.ts.map +1 -0
  178. package/dist/ingestion/language-detector.js +37 -0
  179. package/dist/ingestion/language-detector.js.map +1 -0
  180. package/dist/ingestion/path-resolver.d.ts +7 -0
  181. package/dist/ingestion/path-resolver.d.ts.map +1 -0
  182. package/dist/ingestion/path-resolver.js +30 -0
  183. package/dist/ingestion/path-resolver.js.map +1 -0
  184. package/dist/logger.d.ts +3 -0
  185. package/dist/logger.d.ts.map +1 -0
  186. package/dist/logger.js +11 -0
  187. package/dist/logger.js.map +1 -0
  188. package/dist/pipeline.d.ts +3 -0
  189. package/dist/pipeline.d.ts.map +1 -0
  190. package/dist/pipeline.js +223 -0
  191. package/dist/pipeline.js.map +1 -0
  192. package/dist/types/analysis.d.ts +51 -0
  193. package/dist/types/analysis.d.ts.map +1 -0
  194. package/dist/types/analysis.js +2 -0
  195. package/dist/types/analysis.js.map +1 -0
  196. package/dist/types/config.d.ts +19 -0
  197. package/dist/types/config.d.ts.map +1 -0
  198. package/dist/types/config.js +2 -0
  199. package/dist/types/config.js.map +1 -0
  200. package/dist/types/edges.d.ts +8 -0
  201. package/dist/types/edges.d.ts.map +1 -0
  202. package/dist/types/edges.js +2 -0
  203. package/dist/types/edges.js.map +1 -0
  204. package/dist/types/expeditions.d.ts +19 -0
  205. package/dist/types/expeditions.d.ts.map +1 -0
  206. package/dist/types/expeditions.js +2 -0
  207. package/dist/types/expeditions.js.map +1 -0
  208. package/dist/types/graph.d.ts +29 -0
  209. package/dist/types/graph.d.ts.map +1 -0
  210. package/dist/types/graph.js +2 -0
  211. package/dist/types/graph.js.map +1 -0
  212. package/dist/types/index.d.ts +7 -0
  213. package/dist/types/index.d.ts.map +1 -0
  214. package/dist/types/index.js +2 -0
  215. package/dist/types/index.js.map +1 -0
  216. package/dist/types/nodes.d.ts +35 -0
  217. package/dist/types/nodes.d.ts.map +1 -0
  218. package/dist/types/nodes.js +2 -0
  219. package/dist/types/nodes.js.map +1 -0
  220. package/package.json +36 -0
@@ -0,0 +1,13 @@
1
+ import Parser from "web-tree-sitter";
2
+ import type { SupportedLanguage } from "../types/index.js";
3
+ export interface ParseResult {
4
+ tree: Parser.Tree;
5
+ parser: Parser;
6
+ }
7
+ export declare function initParser(): Promise<void>;
8
+ export declare function parseFile(content: string, language: SupportedLanguage, filePath: string): Promise<Parser.Tree>;
9
+ export declare function parseFileFromDisk(absolutePath: string, language: SupportedLanguage): Promise<{
10
+ tree: Parser.Tree;
11
+ content: string;
12
+ }>;
13
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/analysis/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAIrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAiF3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhD;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAmBtB;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAIjD"}
@@ -0,0 +1,92 @@
1
+ import Parser from "web-tree-sitter";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { AnalysisError } from "../errors.js";
6
+ import { logger } from "../logger.js";
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ // Find grammars dir: check dist/grammars first (compiled), then try relative to package root
9
+ function findGrammarsDir() {
10
+ // When running compiled from dist/analysis/parser.js -> dist/grammars/
11
+ const distGrammars = join(__dirname, "grammars");
12
+ if (existsSync(distGrammars))
13
+ return distGrammars;
14
+ // When running from src via vitest -> look in dist/grammars
15
+ const packageRoot = resolve(__dirname, "..", "..");
16
+ const rootDistGrammars = join(packageRoot, "dist", "grammars");
17
+ if (existsSync(rootDistGrammars))
18
+ return rootDistGrammars;
19
+ return distGrammars; // Return default, will error on load
20
+ }
21
+ let grammarsDir = null;
22
+ function getGrammarsDir() {
23
+ if (!grammarsDir) {
24
+ grammarsDir = findGrammarsDir();
25
+ }
26
+ return grammarsDir;
27
+ }
28
+ let initialized = false;
29
+ const languageCache = new Map();
30
+ async function ensureInit() {
31
+ if (initialized)
32
+ return;
33
+ await Parser.init();
34
+ initialized = true;
35
+ }
36
+ const GRAMMAR_MAP = {
37
+ typescript: "tree-sitter-typescript.wasm",
38
+ tsx: "tree-sitter-tsx.wasm",
39
+ javascript: "tree-sitter-javascript.wasm",
40
+ python: "tree-sitter-python.wasm",
41
+ rust: "tree-sitter-rust.wasm",
42
+ go: "tree-sitter-go.wasm",
43
+ java: "tree-sitter-java.wasm",
44
+ };
45
+ function getWasmPath(language, filePath) {
46
+ const dir = getGrammarsDir();
47
+ const ext = filePath.slice(filePath.lastIndexOf("."));
48
+ // TSX/JSX use the tsx grammar
49
+ if (language === "typescript" && (ext === ".tsx" || ext === ".jsx")) {
50
+ return join(dir, GRAMMAR_MAP["tsx"]);
51
+ }
52
+ const grammarFile = GRAMMAR_MAP[language];
53
+ if (!grammarFile) {
54
+ throw new AnalysisError(`No grammar available for language: ${language}`, "NO_GRAMMAR");
55
+ }
56
+ return join(dir, grammarFile);
57
+ }
58
+ async function getLanguage(wasmPath) {
59
+ const cached = languageCache.get(wasmPath);
60
+ if (cached)
61
+ return cached;
62
+ try {
63
+ const lang = await Parser.Language.load(wasmPath);
64
+ languageCache.set(wasmPath, lang);
65
+ return lang;
66
+ }
67
+ catch (err) {
68
+ throw new AnalysisError(`Failed to load grammar: ${wasmPath}`, "GRAMMAR_LOAD_FAILED", { cause: err });
69
+ }
70
+ }
71
+ export async function initParser() {
72
+ await ensureInit();
73
+ }
74
+ export async function parseFile(content, language, filePath) {
75
+ await ensureInit();
76
+ const wasmPath = getWasmPath(language, filePath);
77
+ const lang = await getLanguage(wasmPath);
78
+ const parser = new Parser();
79
+ parser.setLanguage(lang);
80
+ const tree = parser.parse(content);
81
+ if (!tree) {
82
+ throw new AnalysisError(`Failed to parse file: ${filePath}`, "PARSE_FAILED");
83
+ }
84
+ logger.debug(`Parsed ${filePath} (${tree.rootNode.childCount} top-level nodes)`);
85
+ return tree;
86
+ }
87
+ export async function parseFileFromDisk(absolutePath, language) {
88
+ const content = readFileSync(absolutePath, "utf-8");
89
+ const tree = await parseFile(content, language, absolutePath);
90
+ return { tree, content };
91
+ }
92
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/analysis/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type Parser from "web-tree-sitter";
2
+ import type { FileAnalysis } from "../types/index.js";
3
+ export declare function visitFile(content: string, tree: Parser.Tree, filePath: string): FileAnalysis;
4
+ //# sourceMappingURL=python-visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-visitor.d.ts","sourceRoot":"","sources":["../../src/analysis/python-visitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAA2E,MAAM,mBAAmB,CAAC;AA2T/H,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,MAAM,GACf,YAAY,CAgBd"}
@@ -0,0 +1,306 @@
1
+ import { countLOC, truncateBody, extractStringLiteral, findDescendantByType, extractCallSitesGeneric, computeComplexityGeneric } from "./visitor-utils.js";
2
+ // --- Complexity ---
3
+ const PYTHON_COMPLEXITY_TYPES = new Set([
4
+ "if_statement",
5
+ "for_statement",
6
+ "while_statement",
7
+ "except_clause",
8
+ "conditional_expression", // ternary: x if cond else y
9
+ ]);
10
+ function computeComplexity(node) {
11
+ return computeComplexityGeneric(node, PYTHON_COMPLEXITY_TYPES, (n) => {
12
+ // Count `and` / `or` boolean operators
13
+ if (n.type === "boolean_operator") {
14
+ return 1;
15
+ }
16
+ return 0;
17
+ });
18
+ }
19
+ // --- Call sites ---
20
+ function extractCallSites(node) {
21
+ return extractCallSitesGeneric(node, "call", (callNode) => {
22
+ const fnNode = callNode.childForFieldName("function") ?? callNode.children[0];
23
+ if (!fnNode)
24
+ return null;
25
+ if (fnNode.type === "identifier") {
26
+ return fnNode.text;
27
+ }
28
+ if (fnNode.type === "attribute") {
29
+ // obj.method() -> extract "method"
30
+ const attr = fnNode.childForFieldName("attribute");
31
+ if (attr)
32
+ return attr.text;
33
+ }
34
+ return null;
35
+ });
36
+ }
37
+ // --- Imports ---
38
+ function extractImports(root) {
39
+ const imports = [];
40
+ function walk(node) {
41
+ if (node.type === "import_statement") {
42
+ // import os, sys
43
+ const names = [];
44
+ for (const child of node.children) {
45
+ if (child.type === "dotted_name") {
46
+ names.push(child.text);
47
+ }
48
+ else if (child.type === "aliased_import") {
49
+ const nameNode = child.childForFieldName("name");
50
+ if (nameNode)
51
+ names.push(nameNode.text);
52
+ }
53
+ }
54
+ for (const name of names) {
55
+ imports.push({
56
+ source: name,
57
+ resolvedPath: null,
58
+ names: [name.split(".").pop() ?? name],
59
+ isTypeOnly: false,
60
+ });
61
+ }
62
+ }
63
+ else if (node.type === "import_from_statement") {
64
+ // from foo import bar, baz
65
+ // from . import something
66
+ // from ..pkg import thing
67
+ const moduleNode = node.childForFieldName("module_name");
68
+ let source = "";
69
+ // Count leading dots for relative imports
70
+ let dotCount = 0;
71
+ for (const child of node.children) {
72
+ if (child.type === "relative_import") {
73
+ // The relative_import node contains dots and optionally a dotted_name
74
+ const dotted = findDescendantByType(child, "dotted_name");
75
+ const relText = child.text;
76
+ // Count dots at start
77
+ for (const ch of relText) {
78
+ if (ch === ".")
79
+ dotCount++;
80
+ else
81
+ break;
82
+ }
83
+ source = dotted ? ".".repeat(dotCount) + dotted.text : ".".repeat(dotCount);
84
+ break;
85
+ }
86
+ }
87
+ if (!source && moduleNode) {
88
+ source = moduleNode.text;
89
+ }
90
+ // If still no source, try to gather from children manually
91
+ if (!source) {
92
+ // Look for dotted_name or import_prefix children
93
+ for (const child of node.children) {
94
+ if (child.type === "dotted_name") {
95
+ source = child.text;
96
+ break;
97
+ }
98
+ if (child.type === "import_prefix") {
99
+ dotCount = child.text.length;
100
+ source = ".".repeat(dotCount);
101
+ }
102
+ }
103
+ // Append module name after prefix if present
104
+ if (dotCount > 0) {
105
+ const dotted = node.children.find((c) => c.type === "dotted_name");
106
+ if (dotted) {
107
+ source = ".".repeat(dotCount) + dotted.text;
108
+ }
109
+ }
110
+ }
111
+ const names = [];
112
+ for (const child of node.children) {
113
+ if (child.type === "dotted_name" && child !== moduleNode) {
114
+ // Might be in the import list
115
+ names.push(child.text);
116
+ }
117
+ if (child.type === "aliased_import") {
118
+ const nameNode = child.childForFieldName("name");
119
+ if (nameNode)
120
+ names.push(nameNode.text);
121
+ }
122
+ }
123
+ // Check for wildcard import: from foo import *
124
+ const hasWildcard = node.children.some((c) => c.type === "wildcard_import");
125
+ if (hasWildcard) {
126
+ names.push("*");
127
+ }
128
+ if (names.length === 0) {
129
+ names.push("*");
130
+ }
131
+ if (source) {
132
+ imports.push({
133
+ source,
134
+ resolvedPath: null,
135
+ names,
136
+ isTypeOnly: false,
137
+ });
138
+ }
139
+ }
140
+ // Don't recurse into function/class bodies for top-level imports
141
+ // but do recurse into module-level if blocks etc.
142
+ if (node.type !== "function_definition" && node.type !== "class_definition") {
143
+ for (const child of node.children) {
144
+ walk(child);
145
+ }
146
+ }
147
+ }
148
+ walk(root);
149
+ return imports;
150
+ }
151
+ // --- Exports ---
152
+ // Python has no explicit export syntax. We treat top-level functions/classes
153
+ // whose names don't start with "_" as exported.
154
+ function extractExports(root) {
155
+ const exports = [];
156
+ for (const child of root.children) {
157
+ if (child.type === "function_definition") {
158
+ const nameNode = child.childForFieldName("name");
159
+ if (nameNode && !nameNode.text.startsWith("_")) {
160
+ exports.push({
161
+ name: nameNode.text,
162
+ kind: "function",
163
+ isTypeOnly: false,
164
+ });
165
+ }
166
+ }
167
+ else if (child.type === "class_definition") {
168
+ const nameNode = child.childForFieldName("name");
169
+ if (nameNode && !nameNode.text.startsWith("_")) {
170
+ exports.push({
171
+ name: nameNode.text,
172
+ kind: "class",
173
+ isTypeOnly: false,
174
+ });
175
+ }
176
+ }
177
+ else if (child.type === "expression_statement") {
178
+ // Top-level assignment: variable = ...
179
+ const expr = child.children[0];
180
+ if (expr?.type === "assignment") {
181
+ const left = expr.childForFieldName("left");
182
+ if (left?.type === "identifier" && !left.text.startsWith("_")) {
183
+ exports.push({
184
+ name: left.text,
185
+ kind: "variable",
186
+ isTypeOnly: false,
187
+ });
188
+ }
189
+ }
190
+ }
191
+ else if (child.type === "decorated_definition") {
192
+ // Decorated functions/classes: @decorator\ndef func():
193
+ const inner = child.children.find((c) => c.type === "function_definition" || c.type === "class_definition");
194
+ if (inner) {
195
+ const nameNode = inner.childForFieldName("name");
196
+ if (nameNode && !nameNode.text.startsWith("_")) {
197
+ const kind = inner.type === "function_definition" ? "function" : "class";
198
+ exports.push({
199
+ name: nameNode.text,
200
+ kind,
201
+ isTypeOnly: false,
202
+ });
203
+ }
204
+ }
205
+ }
206
+ }
207
+ return exports;
208
+ }
209
+ // --- Functions ---
210
+ function extractFunctions(root, content) {
211
+ const functions = [];
212
+ function walk(node, isTopLevel) {
213
+ const funcNode = node.type === "decorated_definition"
214
+ ? node.children.find((c) => c.type === "function_definition")
215
+ : node.type === "function_definition" ? node : null;
216
+ if (funcNode) {
217
+ const nameNode = funcNode.childForFieldName("name");
218
+ if (nameNode) {
219
+ const params = extractPythonParams(funcNode);
220
+ const returnType = extractPythonReturnType(funcNode);
221
+ const bodyNode = funcNode.childForFieldName("body") ?? funcNode;
222
+ const isAsync = funcNode.children.some((c) => c.type === "async");
223
+ const isExported = isTopLevel && !nameNode.text.startsWith("_");
224
+ functions.push({
225
+ name: nameNode.text,
226
+ startLine: (node.type === "decorated_definition" ? node : funcNode).startPosition.row + 1,
227
+ endLine: funcNode.endPosition.row + 1,
228
+ params,
229
+ returnType,
230
+ isExported,
231
+ isAsync,
232
+ body: truncateBody(funcNode.text, 200),
233
+ complexity: computeComplexity(bodyNode),
234
+ calls: extractCallSites(bodyNode),
235
+ });
236
+ // Don't recurse into nested functions to avoid double-counting
237
+ return;
238
+ }
239
+ }
240
+ // Recurse for class methods and other structures
241
+ if (node.type === "class_definition") {
242
+ const bodyNode = node.childForFieldName("body");
243
+ if (bodyNode) {
244
+ for (const child of bodyNode.children) {
245
+ walk(child, false);
246
+ }
247
+ }
248
+ return;
249
+ }
250
+ for (const child of node.children) {
251
+ walk(child, isTopLevel && node === root);
252
+ }
253
+ }
254
+ for (const child of root.children) {
255
+ walk(child, true);
256
+ }
257
+ return functions;
258
+ }
259
+ function extractPythonParams(funcNode) {
260
+ const params = funcNode.childForFieldName("parameters");
261
+ if (!params)
262
+ return [];
263
+ return params.children
264
+ .filter((c) => c.type === "identifier" ||
265
+ c.type === "typed_parameter" ||
266
+ c.type === "default_parameter" ||
267
+ c.type === "typed_default_parameter" ||
268
+ c.type === "list_splat_pattern" ||
269
+ c.type === "dictionary_splat_pattern")
270
+ .map((c) => {
271
+ if (c.type === "identifier")
272
+ return c.text;
273
+ if (c.type === "typed_parameter" || c.type === "default_parameter" || c.type === "typed_default_parameter") {
274
+ const nameNode = c.children[0];
275
+ return nameNode?.text ?? c.text;
276
+ }
277
+ return c.text;
278
+ })
279
+ .filter((p) => p !== "self" && p !== "cls");
280
+ }
281
+ function extractPythonReturnType(funcNode) {
282
+ const returnType = funcNode.childForFieldName("return_type");
283
+ if (!returnType)
284
+ return null;
285
+ // The return type includes the "-> " prefix from the tree-sitter node
286
+ const text = returnType.text;
287
+ return text.startsWith("->") ? text.slice(2).trim() : text.trim();
288
+ }
289
+ // --- Main visitor ---
290
+ export function visitFile(content, tree, filePath) {
291
+ const root = tree.rootNode;
292
+ const imports = extractImports(root);
293
+ const exports = extractExports(root);
294
+ const loc = countLOC(content, tree);
295
+ const functions = extractFunctions(root, content);
296
+ return {
297
+ filePath,
298
+ language: "python",
299
+ content,
300
+ loc,
301
+ imports,
302
+ exports,
303
+ functions,
304
+ };
305
+ }
306
+ //# sourceMappingURL=python-visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-visitor.js","sourceRoot":"","sources":["../../src/analysis/python-visitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type Parser from "web-tree-sitter";
2
+ import type { FileAnalysis } from "../types/index.js";
3
+ export declare function visitFile(content: string, tree: Parser.Tree, filePath: string): FileAnalysis;
4
+ //# sourceMappingURL=rust-visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-visitor.d.ts","sourceRoot":"","sources":["../../src/analysis/rust-visitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAA2E,MAAM,mBAAmB,CAAC;AAqU/H,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,MAAM,GACf,YAAY,CAgBd"}