codedev-mcp 3.2.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/CHANGELOG.md +90 -0
- package/LICENSE +21 -0
- package/README.md +760 -0
- package/dist/analyzers/api-contract.d.ts +46 -0
- package/dist/analyzers/api-contract.d.ts.map +1 -0
- package/dist/analyzers/api-contract.js +319 -0
- package/dist/analyzers/api-contract.js.map +1 -0
- package/dist/analyzers/architecture.d.ts +37 -0
- package/dist/analyzers/architecture.d.ts.map +1 -0
- package/dist/analyzers/architecture.js +149 -0
- package/dist/analyzers/architecture.js.map +1 -0
- package/dist/analyzers/branch-compare.d.ts +46 -0
- package/dist/analyzers/branch-compare.d.ts.map +1 -0
- package/dist/analyzers/branch-compare.js +128 -0
- package/dist/analyzers/branch-compare.js.map +1 -0
- package/dist/analyzers/cicd.d.ts +42 -0
- package/dist/analyzers/cicd.d.ts.map +1 -0
- package/dist/analyzers/cicd.js +237 -0
- package/dist/analyzers/cicd.js.map +1 -0
- package/dist/analyzers/codebase.d.ts +64 -0
- package/dist/analyzers/codebase.d.ts.map +1 -0
- package/dist/analyzers/codebase.js +354 -0
- package/dist/analyzers/codebase.js.map +1 -0
- package/dist/analyzers/complexity-heatmap.d.ts +50 -0
- package/dist/analyzers/complexity-heatmap.d.ts.map +1 -0
- package/dist/analyzers/complexity-heatmap.js +156 -0
- package/dist/analyzers/complexity-heatmap.js.map +1 -0
- package/dist/analyzers/context-pack.d.ts +43 -0
- package/dist/analyzers/context-pack.d.ts.map +1 -0
- package/dist/analyzers/context-pack.js +232 -0
- package/dist/analyzers/context-pack.js.map +1 -0
- package/dist/analyzers/coverage.d.ts +70 -0
- package/dist/analyzers/coverage.d.ts.map +1 -0
- package/dist/analyzers/coverage.js +313 -0
- package/dist/analyzers/coverage.js.map +1 -0
- package/dist/analyzers/db-schema.d.ts +55 -0
- package/dist/analyzers/db-schema.d.ts.map +1 -0
- package/dist/analyzers/db-schema.js +237 -0
- package/dist/analyzers/db-schema.js.map +1 -0
- package/dist/analyzers/dead-code.d.ts +34 -0
- package/dist/analyzers/dead-code.d.ts.map +1 -0
- package/dist/analyzers/dead-code.js +131 -0
- package/dist/analyzers/dead-code.js.map +1 -0
- package/dist/analyzers/dep-vuln.d.ts +36 -0
- package/dist/analyzers/dep-vuln.d.ts.map +1 -0
- package/dist/analyzers/dep-vuln.js +342 -0
- package/dist/analyzers/dep-vuln.js.map +1 -0
- package/dist/analyzers/docs.d.ts +47 -0
- package/dist/analyzers/docs.d.ts.map +1 -0
- package/dist/analyzers/docs.js +473 -0
- package/dist/analyzers/docs.js.map +1 -0
- package/dist/analyzers/git.d.ts +115 -0
- package/dist/analyzers/git.d.ts.map +1 -0
- package/dist/analyzers/git.js +214 -0
- package/dist/analyzers/git.js.map +1 -0
- package/dist/analyzers/iac.d.ts +39 -0
- package/dist/analyzers/iac.d.ts.map +1 -0
- package/dist/analyzers/iac.js +233 -0
- package/dist/analyzers/iac.js.map +1 -0
- package/dist/analyzers/impact.d.ts +51 -0
- package/dist/analyzers/impact.d.ts.map +1 -0
- package/dist/analyzers/impact.js +235 -0
- package/dist/analyzers/impact.js.map +1 -0
- package/dist/analyzers/monorepo.d.ts +36 -0
- package/dist/analyzers/monorepo.d.ts.map +1 -0
- package/dist/analyzers/monorepo.js +233 -0
- package/dist/analyzers/monorepo.js.map +1 -0
- package/dist/analyzers/notebook.d.ts +53 -0
- package/dist/analyzers/notebook.d.ts.map +1 -0
- package/dist/analyzers/notebook.js +149 -0
- package/dist/analyzers/notebook.js.map +1 -0
- package/dist/analyzers/perf-profile.d.ts +39 -0
- package/dist/analyzers/perf-profile.d.ts.map +1 -0
- package/dist/analyzers/perf-profile.js +222 -0
- package/dist/analyzers/perf-profile.js.map +1 -0
- package/dist/analyzers/scaffold.d.ts +46 -0
- package/dist/analyzers/scaffold.d.ts.map +1 -0
- package/dist/analyzers/scaffold.js +313 -0
- package/dist/analyzers/scaffold.js.map +1 -0
- package/dist/analyzers/security.d.ts +42 -0
- package/dist/analyzers/security.d.ts.map +1 -0
- package/dist/analyzers/security.js +281 -0
- package/dist/analyzers/security.js.map +1 -0
- package/dist/analyzers/symbols.d.ts +49 -0
- package/dist/analyzers/symbols.d.ts.map +1 -0
- package/dist/analyzers/symbols.js +212 -0
- package/dist/analyzers/symbols.js.map +1 -0
- package/dist/analyzers/tree-sitter.d.ts +71 -0
- package/dist/analyzers/tree-sitter.d.ts.map +1 -0
- package/dist/analyzers/tree-sitter.js +333 -0
- package/dist/analyzers/tree-sitter.js.map +1 -0
- package/dist/analyzers/type-flow.d.ts +39 -0
- package/dist/analyzers/type-flow.d.ts.map +1 -0
- package/dist/analyzers/type-flow.js +75 -0
- package/dist/analyzers/type-flow.js.map +1 -0
- package/dist/cache/memory-cache.d.ts +130 -0
- package/dist/cache/memory-cache.d.ts.map +1 -0
- package/dist/cache/memory-cache.js +273 -0
- package/dist/cache/memory-cache.js.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/instructions.d.ts +2 -0
- package/dist/constants/instructions.d.ts.map +1 -0
- package/dist/constants/instructions.js +82 -0
- package/dist/constants/instructions.js.map +1 -0
- package/dist/db/connection.d.ts +12 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +34 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/json-store.d.ts +111 -0
- package/dist/db/json-store.d.ts.map +1 -0
- package/dist/db/json-store.js +201 -0
- package/dist/db/json-store.js.map +1 -0
- package/dist/db/sqlite-store.d.ts +153 -0
- package/dist/db/sqlite-store.d.ts.map +1 -0
- package/dist/db/sqlite-store.js +388 -0
- package/dist/db/sqlite-store.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/health.d.ts +35 -0
- package/dist/resources/health.d.ts.map +1 -0
- package/dist/resources/health.js +81 -0
- package/dist/resources/health.js.map +1 -0
- package/dist/schemas/output-schemas.d.ts +517 -0
- package/dist/schemas/output-schemas.d.ts.map +1 -0
- package/dist/schemas/output-schemas.js +296 -0
- package/dist/schemas/output-schemas.js.map +1 -0
- package/dist/search/fast-search.d.ts +90 -0
- package/dist/search/fast-search.d.ts.map +1 -0
- package/dist/search/fast-search.js +387 -0
- package/dist/search/fast-search.js.map +1 -0
- package/dist/search/semantic.d.ts +26 -0
- package/dist/search/semantic.d.ts.map +1 -0
- package/dist/search/semantic.js +458 -0
- package/dist/search/semantic.js.map +1 -0
- package/dist/tools/analysis.d.ts +7 -0
- package/dist/tools/analysis.d.ts.map +1 -0
- package/dist/tools/analysis.js +491 -0
- package/dist/tools/analysis.js.map +1 -0
- package/dist/tools/architecture.d.ts +7 -0
- package/dist/tools/architecture.d.ts.map +1 -0
- package/dist/tools/architecture.js +176 -0
- package/dist/tools/architecture.js.map +1 -0
- package/dist/tools/devops.d.ts +7 -0
- package/dist/tools/devops.d.ts.map +1 -0
- package/dist/tools/devops.js +179 -0
- package/dist/tools/devops.js.map +1 -0
- package/dist/tools/docs.d.ts +7 -0
- package/dist/tools/docs.d.ts.map +1 -0
- package/dist/tools/docs.js +102 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/git.d.ts +7 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +475 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/nav.d.ts +7 -0
- package/dist/tools/nav.d.ts.map +1 -0
- package/dist/tools/nav.js +275 -0
- package/dist/tools/nav.js.map +1 -0
- package/dist/tools/notebook.d.ts +7 -0
- package/dist/tools/notebook.d.ts.map +1 -0
- package/dist/tools/notebook.js +102 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/performance.d.ts +7 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js +59 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/quality.d.ts +7 -0
- package/dist/tools/quality.d.ts.map +1 -0
- package/dist/tools/quality.js +279 -0
- package/dist/tools/quality.js.map +1 -0
- package/dist/tools/scaffold.d.ts +7 -0
- package/dist/tools/scaffold.d.ts.map +1 -0
- package/dist/tools/scaffold.js +80 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/tools/search.d.ts +7 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +308 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/security.d.ts +7 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +138 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/utils/analytics.d.ts +69 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +144 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/concurrency.d.ts +43 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +78 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/fallback.d.ts +52 -0
- package/dist/utils/fallback.d.ts.map +1 -0
- package/dist/utils/fallback.js +137 -0
- package/dist/utils/fallback.js.map +1 -0
- package/dist/utils/git-hooks.d.ts +24 -0
- package/dist/utils/git-hooks.d.ts.map +1 -0
- package/dist/utils/git-hooks.js +108 -0
- package/dist/utils/git-hooks.js.map +1 -0
- package/dist/utils/languages.d.ts +72 -0
- package/dist/utils/languages.d.ts.map +1 -0
- package/dist/utils/languages.js +463 -0
- package/dist/utils/languages.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +34 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/plugins.d.ts +105 -0
- package/dist/utils/plugins.d.ts.map +1 -0
- package/dist/utils/plugins.js +325 -0
- package/dist/utils/plugins.js.map +1 -0
- package/dist/utils/security.d.ts +17 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +48 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/streaming.d.ts +56 -0
- package/dist/utils/streaming.d.ts.map +1 -0
- package/dist/utils/streaming.js +95 -0
- package/dist/utils/streaming.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/mcp.json +100 -0
- package/package.json +89 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation extraction from source code.
|
|
3
|
+
* Parses JSDoc, Python docstrings, Rustdoc, Javadoc, Go doc comments.
|
|
4
|
+
* Links documentation to symbols for "show docs for X" queries.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile } from 'node:fs/promises';
|
|
7
|
+
/**
|
|
8
|
+
* Extract all documentation from a file.
|
|
9
|
+
* @param filePath - Path to the source file
|
|
10
|
+
* @param language - Programming language of the file
|
|
11
|
+
* @returns Array of documentation entries found in the file
|
|
12
|
+
*/
|
|
13
|
+
export async function extractDocs(filePath, language) {
|
|
14
|
+
const content = await readFile(filePath, 'utf-8');
|
|
15
|
+
const lines = content.split('\n');
|
|
16
|
+
switch (language) {
|
|
17
|
+
case 'typescript':
|
|
18
|
+
case 'javascript':
|
|
19
|
+
case 'tsx':
|
|
20
|
+
case 'jsx':
|
|
21
|
+
return extractJSDoc(lines, filePath);
|
|
22
|
+
case 'python':
|
|
23
|
+
return extractPythonDocs(lines, filePath);
|
|
24
|
+
case 'java':
|
|
25
|
+
case 'kotlin':
|
|
26
|
+
return extractJavadoc(lines, filePath);
|
|
27
|
+
case 'rust':
|
|
28
|
+
return extractRustdoc(lines, filePath);
|
|
29
|
+
case 'go':
|
|
30
|
+
return extractGoDocs(lines, filePath);
|
|
31
|
+
case 'c':
|
|
32
|
+
case 'cpp':
|
|
33
|
+
case 'csharp':
|
|
34
|
+
return extractCStyleDocs(lines, filePath);
|
|
35
|
+
default:
|
|
36
|
+
return extractGenericDocs(lines, filePath);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Extract JSDoc comments.
|
|
41
|
+
* @param lines - Array of source lines
|
|
42
|
+
* @param filePath - Path to the source file
|
|
43
|
+
* @returns Array of documentation entries
|
|
44
|
+
*/
|
|
45
|
+
function extractJSDoc(lines, filePath) {
|
|
46
|
+
const docs = [];
|
|
47
|
+
let i = 0;
|
|
48
|
+
while (i < lines.length) {
|
|
49
|
+
// Look for /** ... */ blocks
|
|
50
|
+
if (lines[i].trim().startsWith('/**')) {
|
|
51
|
+
const commentLines = [];
|
|
52
|
+
while (i < lines.length && !lines[i].includes('*/')) {
|
|
53
|
+
commentLines.push(lines[i]);
|
|
54
|
+
i++;
|
|
55
|
+
}
|
|
56
|
+
// Include closing */
|
|
57
|
+
if (i < lines.length)
|
|
58
|
+
commentLines.push(lines[i]);
|
|
59
|
+
i++;
|
|
60
|
+
// Next non-empty line should be the symbol definition
|
|
61
|
+
while (i < lines.length && lines[i].trim() === '')
|
|
62
|
+
i++;
|
|
63
|
+
if (i < lines.length) {
|
|
64
|
+
const symbolInfo = parseJSSymbol(lines[i], i + 1);
|
|
65
|
+
if (symbolInfo) {
|
|
66
|
+
const parsed = parseJSDocComment(commentLines.join('\n'));
|
|
67
|
+
docs.push({
|
|
68
|
+
...symbolInfo,
|
|
69
|
+
file: filePath,
|
|
70
|
+
doc: parsed.description,
|
|
71
|
+
params: parsed.params,
|
|
72
|
+
returns: parsed.returns,
|
|
73
|
+
examples: parsed.examples,
|
|
74
|
+
tags: parsed.tags,
|
|
75
|
+
deprecated: parsed.deprecated,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
i++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return docs;
|
|
85
|
+
}
|
|
86
|
+
function parseJSSymbol(line, lineNum) {
|
|
87
|
+
const patterns = [
|
|
88
|
+
{ regex: /(?:export\s+)?(?:async\s+)?function\s+(\w+)/, type: 'function' },
|
|
89
|
+
{ regex: /(?:export\s+)?class\s+(\w+)/, type: 'class' },
|
|
90
|
+
{ regex: /(?:export\s+)?interface\s+(\w+)/, type: 'interface' },
|
|
91
|
+
{ regex: /(?:export\s+)?type\s+(\w+)/, type: 'type' },
|
|
92
|
+
{ regex: /(?:export\s+)?enum\s+(\w+)/, type: 'enum' },
|
|
93
|
+
{ regex: /(?:export\s+)?const\s+(\w+)/, type: 'variable' },
|
|
94
|
+
{ regex: /(\w+)\s*[:(]/, type: 'method' },
|
|
95
|
+
];
|
|
96
|
+
for (const { regex, type } of patterns) {
|
|
97
|
+
const match = line.match(regex);
|
|
98
|
+
if (match)
|
|
99
|
+
return { symbol: match[1], symbolType: type, line: lineNum };
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
function parseJSDocComment(comment) {
|
|
104
|
+
const cleaned = comment
|
|
105
|
+
.replace(/\/\*\*\s*/, '')
|
|
106
|
+
.replace(/\s*\*\//, '')
|
|
107
|
+
.split('\n')
|
|
108
|
+
.map((l) => l.replace(/^\s*\*\s?/, ''))
|
|
109
|
+
.join('\n')
|
|
110
|
+
.trim();
|
|
111
|
+
const params = [];
|
|
112
|
+
const tags = [];
|
|
113
|
+
const examples = [];
|
|
114
|
+
let returns;
|
|
115
|
+
let deprecated = false;
|
|
116
|
+
const descLines = [];
|
|
117
|
+
let inExample = false;
|
|
118
|
+
let currentExample = '';
|
|
119
|
+
for (const line of cleaned.split('\n')) {
|
|
120
|
+
const paramMatch = line.match(/@param\s+\{([^}]+)\}\s+(\w+)\s*(.*)/);
|
|
121
|
+
const paramNoType = line.match(/@param\s+(\w+)\s*(.*)/);
|
|
122
|
+
const returnMatch = line.match(/@returns?\s+\{([^}]+)\}\s*(.*)/);
|
|
123
|
+
const returnNoType = line.match(/@returns?\s+(.*)/);
|
|
124
|
+
const tagMatch = line.match(/@(\w+)\s*(.*)/);
|
|
125
|
+
if (line.trim().startsWith('@example')) {
|
|
126
|
+
if (inExample && currentExample)
|
|
127
|
+
examples.push(currentExample.trim());
|
|
128
|
+
inExample = true;
|
|
129
|
+
currentExample = '';
|
|
130
|
+
}
|
|
131
|
+
else if (inExample && tagMatch) {
|
|
132
|
+
if (currentExample)
|
|
133
|
+
examples.push(currentExample.trim());
|
|
134
|
+
inExample = false;
|
|
135
|
+
}
|
|
136
|
+
else if (inExample) {
|
|
137
|
+
currentExample += line + '\n';
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (paramMatch) {
|
|
141
|
+
params.push({ name: paramMatch[2], type: paramMatch[1], description: paramMatch[3] });
|
|
142
|
+
}
|
|
143
|
+
else if (paramNoType && !paramMatch) {
|
|
144
|
+
params.push({ name: paramNoType[1], description: paramNoType[2] });
|
|
145
|
+
}
|
|
146
|
+
else if (returnMatch) {
|
|
147
|
+
returns = { type: returnMatch[1], description: returnMatch[2] };
|
|
148
|
+
}
|
|
149
|
+
else if (returnNoType && !returnMatch && line.includes('@return')) {
|
|
150
|
+
returns = { description: returnNoType[1] };
|
|
151
|
+
}
|
|
152
|
+
else if (line.includes('@deprecated')) {
|
|
153
|
+
deprecated = true;
|
|
154
|
+
}
|
|
155
|
+
else if (tagMatch && !line.includes('@param') && !line.includes('@return') && !line.includes('@example')) {
|
|
156
|
+
tags.push({ tag: tagMatch[1], value: tagMatch[2] });
|
|
157
|
+
}
|
|
158
|
+
else if (!tagMatch) {
|
|
159
|
+
descLines.push(line);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (inExample && currentExample)
|
|
163
|
+
examples.push(currentExample.trim());
|
|
164
|
+
return {
|
|
165
|
+
description: descLines.join('\n').trim(),
|
|
166
|
+
params,
|
|
167
|
+
returns,
|
|
168
|
+
examples,
|
|
169
|
+
tags,
|
|
170
|
+
deprecated,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Extract Python docstrings.
|
|
175
|
+
* @param lines - Array of source lines
|
|
176
|
+
* @param filePath - Path to the source file
|
|
177
|
+
* @returns Array of documentation entries
|
|
178
|
+
*/
|
|
179
|
+
function extractPythonDocs(lines, filePath) {
|
|
180
|
+
const docs = [];
|
|
181
|
+
for (let i = 0; i < lines.length; i++) {
|
|
182
|
+
const line = lines[i];
|
|
183
|
+
const defMatch = line.match(/^(\s*)(?:async\s+)?def\s+(\w+)\s*\(/);
|
|
184
|
+
const classMatch = line.match(/^(\s*)class\s+(\w+)/);
|
|
185
|
+
if (defMatch || classMatch) {
|
|
186
|
+
const symbolName = (defMatch || classMatch)[2];
|
|
187
|
+
const symbolType = defMatch ? 'function' : 'class';
|
|
188
|
+
const symbolLine = i + 1;
|
|
189
|
+
// Look for docstring on next lines
|
|
190
|
+
let j = i + 1;
|
|
191
|
+
while (j < lines.length && lines[j].trim() === '')
|
|
192
|
+
j++;
|
|
193
|
+
// Skip to after the ):
|
|
194
|
+
while (j < lines.length && !lines[j].includes(':') && j - i < 5)
|
|
195
|
+
j++;
|
|
196
|
+
// Move past the colon line
|
|
197
|
+
j++;
|
|
198
|
+
while (j < lines.length && lines[j].trim() === '')
|
|
199
|
+
j++;
|
|
200
|
+
if (j < lines.length) {
|
|
201
|
+
const nextLine = lines[j].trim();
|
|
202
|
+
const quote = nextLine.startsWith('"""') ? '"""' : nextLine.startsWith("'''") ? "'''" : null;
|
|
203
|
+
if (quote) {
|
|
204
|
+
const docLines = [];
|
|
205
|
+
if (nextLine !== quote && nextLine.endsWith(quote) && nextLine.length > 6) {
|
|
206
|
+
// Single-line docstring
|
|
207
|
+
docLines.push(nextLine.slice(3, -3));
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
docLines.push(nextLine.slice(3));
|
|
211
|
+
j++;
|
|
212
|
+
while (j < lines.length && !lines[j].trim().endsWith(quote)) {
|
|
213
|
+
docLines.push(lines[j]);
|
|
214
|
+
j++;
|
|
215
|
+
}
|
|
216
|
+
if (j < lines.length) {
|
|
217
|
+
const last = lines[j].trim();
|
|
218
|
+
if (last !== quote)
|
|
219
|
+
docLines.push(last.slice(0, -3));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const docText = docLines.join('\n').trim();
|
|
223
|
+
const parsed = parsePythonDocstring(docText);
|
|
224
|
+
docs.push({
|
|
225
|
+
symbol: symbolName,
|
|
226
|
+
symbolType,
|
|
227
|
+
file: filePath,
|
|
228
|
+
line: symbolLine,
|
|
229
|
+
doc: parsed.description,
|
|
230
|
+
params: parsed.params,
|
|
231
|
+
returns: parsed.returns,
|
|
232
|
+
examples: parsed.examples,
|
|
233
|
+
tags: [],
|
|
234
|
+
deprecated: docText.toLowerCase().includes('deprecated'),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return docs;
|
|
241
|
+
}
|
|
242
|
+
function parsePythonDocstring(doc) {
|
|
243
|
+
const params = [];
|
|
244
|
+
const examples = [];
|
|
245
|
+
let returns;
|
|
246
|
+
const descLines = [];
|
|
247
|
+
let section = 'desc';
|
|
248
|
+
for (const line of doc.split('\n')) {
|
|
249
|
+
const trimmed = line.trim();
|
|
250
|
+
if (/^(Args|Parameters|Params):$/i.test(trimmed)) {
|
|
251
|
+
section = 'params';
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
if (/^(Returns|Return):$/i.test(trimmed)) {
|
|
255
|
+
section = 'returns';
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
if (/^(Examples?|Usage):$/i.test(trimmed)) {
|
|
259
|
+
section = 'examples';
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (/^(Raises|Throws|Note|Notes|Attributes):$/i.test(trimmed)) {
|
|
263
|
+
section = 'other';
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (section === 'params') {
|
|
267
|
+
const paramMatch = trimmed.match(/(\w+)\s*(?:\(([^)]+)\))?\s*:\s*(.*)/);
|
|
268
|
+
if (paramMatch)
|
|
269
|
+
params.push({ name: paramMatch[1], type: paramMatch[2], description: paramMatch[3] });
|
|
270
|
+
}
|
|
271
|
+
else if (section === 'returns') {
|
|
272
|
+
if (trimmed)
|
|
273
|
+
returns = { description: trimmed };
|
|
274
|
+
}
|
|
275
|
+
else if (section === 'examples') {
|
|
276
|
+
examples.push(trimmed);
|
|
277
|
+
}
|
|
278
|
+
else if (section === 'desc') {
|
|
279
|
+
descLines.push(trimmed);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return { description: descLines.join('\n').trim(), params, returns, examples };
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Extract Javadoc comments.
|
|
286
|
+
* @param lines - Array of source lines
|
|
287
|
+
* @param filePath - Path to the source file
|
|
288
|
+
* @returns Array of documentation entries
|
|
289
|
+
*/
|
|
290
|
+
function extractJavadoc(lines, filePath) {
|
|
291
|
+
// Javadoc uses same /** */ format as JSDoc
|
|
292
|
+
return extractJSDoc(lines, filePath);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Extract Rust /// doc comments.
|
|
296
|
+
* @param lines - Array of source lines
|
|
297
|
+
* @param filePath - Path to the source file
|
|
298
|
+
* @returns Array of documentation entries
|
|
299
|
+
*/
|
|
300
|
+
function extractRustdoc(lines, filePath) {
|
|
301
|
+
const docs = [];
|
|
302
|
+
for (let i = 0; i < lines.length; i++) {
|
|
303
|
+
// Collect consecutive /// lines
|
|
304
|
+
if (lines[i].trim().startsWith('///')) {
|
|
305
|
+
const docLines = [];
|
|
306
|
+
let j = i;
|
|
307
|
+
while (j < lines.length && lines[j].trim().startsWith('///')) {
|
|
308
|
+
docLines.push(lines[j].trim().replace(/^\/\/\/\s?/, ''));
|
|
309
|
+
j++;
|
|
310
|
+
}
|
|
311
|
+
// Next non-empty line should be the symbol
|
|
312
|
+
while (j < lines.length && lines[j].trim() === '')
|
|
313
|
+
j++;
|
|
314
|
+
if (j < lines.length) {
|
|
315
|
+
const rustSymbol = parseRustSymbol(lines[j], j + 1);
|
|
316
|
+
if (rustSymbol) {
|
|
317
|
+
docs.push({
|
|
318
|
+
...rustSymbol,
|
|
319
|
+
file: filePath,
|
|
320
|
+
doc: docLines.join('\n').trim(),
|
|
321
|
+
tags: [],
|
|
322
|
+
deprecated: docLines.some((l) => l.includes('deprecated')),
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
i = j;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return docs;
|
|
330
|
+
}
|
|
331
|
+
function parseRustSymbol(line, lineNum) {
|
|
332
|
+
const patterns = [
|
|
333
|
+
{ regex: /pub\s+(?:async\s+)?fn\s+(\w+)/, type: 'function' },
|
|
334
|
+
{ regex: /pub\s+struct\s+(\w+)/, type: 'struct' },
|
|
335
|
+
{ regex: /pub\s+enum\s+(\w+)/, type: 'enum' },
|
|
336
|
+
{ regex: /pub\s+trait\s+(\w+)/, type: 'trait' },
|
|
337
|
+
{ regex: /pub\s+type\s+(\w+)/, type: 'type' },
|
|
338
|
+
{ regex: /fn\s+(\w+)/, type: 'function' },
|
|
339
|
+
{ regex: /struct\s+(\w+)/, type: 'struct' },
|
|
340
|
+
];
|
|
341
|
+
for (const { regex, type } of patterns) {
|
|
342
|
+
const match = line.match(regex);
|
|
343
|
+
if (match)
|
|
344
|
+
return { symbol: match[1], symbolType: type, line: lineNum };
|
|
345
|
+
}
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Extract Go doc comments (comments directly preceding declarations).
|
|
350
|
+
* @param lines - Array of source lines
|
|
351
|
+
* @param filePath - Path to the source file
|
|
352
|
+
* @returns Array of documentation entries
|
|
353
|
+
*/
|
|
354
|
+
function extractGoDocs(lines, filePath) {
|
|
355
|
+
const docs = [];
|
|
356
|
+
for (let i = 0; i < lines.length; i++) {
|
|
357
|
+
if (lines[i].trim().startsWith('//')) {
|
|
358
|
+
const docLines = [];
|
|
359
|
+
let j = i;
|
|
360
|
+
while (j < lines.length && lines[j].trim().startsWith('//')) {
|
|
361
|
+
docLines.push(lines[j].trim().replace(/^\/\/\s?/, ''));
|
|
362
|
+
j++;
|
|
363
|
+
}
|
|
364
|
+
while (j < lines.length && lines[j].trim() === '')
|
|
365
|
+
j++;
|
|
366
|
+
if (j < lines.length) {
|
|
367
|
+
const goSymbol = parseGoSymbol(lines[j], j + 1);
|
|
368
|
+
if (goSymbol) {
|
|
369
|
+
docs.push({
|
|
370
|
+
...goSymbol,
|
|
371
|
+
file: filePath,
|
|
372
|
+
doc: docLines.join('\n').trim(),
|
|
373
|
+
tags: [],
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
i = j;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return docs;
|
|
381
|
+
}
|
|
382
|
+
function parseGoSymbol(line, lineNum) {
|
|
383
|
+
const patterns = [
|
|
384
|
+
{ regex: /func\s+(\w+)/, type: 'function' },
|
|
385
|
+
{ regex: /func\s+\([^)]+\)\s+(\w+)/, type: 'method' },
|
|
386
|
+
{ regex: /type\s+(\w+)\s+struct/, type: 'struct' },
|
|
387
|
+
{ regex: /type\s+(\w+)\s+interface/, type: 'interface' },
|
|
388
|
+
{ regex: /type\s+(\w+)/, type: 'type' },
|
|
389
|
+
];
|
|
390
|
+
for (const { regex, type } of patterns) {
|
|
391
|
+
const match = line.match(regex);
|
|
392
|
+
if (match)
|
|
393
|
+
return { symbol: match[1], symbolType: type, line: lineNum };
|
|
394
|
+
}
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Extract C-style block comment and line comment docs.
|
|
399
|
+
* @param lines - Array of source lines
|
|
400
|
+
* @param filePath - Path to the source file
|
|
401
|
+
* @returns Array of documentation entries
|
|
402
|
+
*/
|
|
403
|
+
function extractCStyleDocs(lines, filePath) {
|
|
404
|
+
return extractJSDoc(lines, filePath);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Generic doc extraction for unsupported languages.
|
|
408
|
+
* Looks for any comment blocks before definitions.
|
|
409
|
+
* @param lines - Array of source lines
|
|
410
|
+
* @param filePath - Path to the source file
|
|
411
|
+
* @returns Array of documentation entries
|
|
412
|
+
*/
|
|
413
|
+
function extractGenericDocs(lines, filePath) {
|
|
414
|
+
const docs = [];
|
|
415
|
+
const commentBlock = [];
|
|
416
|
+
for (let i = 0; i < lines.length; i++) {
|
|
417
|
+
const trimmed = lines[i].trim();
|
|
418
|
+
if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('--')) {
|
|
419
|
+
commentBlock.push(trimmed.replace(/^[/#-]+\s?/, ''));
|
|
420
|
+
}
|
|
421
|
+
else if (commentBlock.length > 0 && trimmed) {
|
|
422
|
+
// Check if this line looks like a definition
|
|
423
|
+
const defMatch = trimmed.match(/(?:function|def|fn|func|class|struct|module|sub|procedure)\s+(\w+)/);
|
|
424
|
+
if (defMatch) {
|
|
425
|
+
docs.push({
|
|
426
|
+
symbol: defMatch[1],
|
|
427
|
+
symbolType: 'function',
|
|
428
|
+
file: filePath,
|
|
429
|
+
line: i + 1,
|
|
430
|
+
doc: commentBlock.join('\n').trim(),
|
|
431
|
+
tags: [],
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
commentBlock.length = 0;
|
|
435
|
+
}
|
|
436
|
+
else if (!trimmed) {
|
|
437
|
+
commentBlock.length = 0;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return docs;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Find undocumented public symbols in a file.
|
|
444
|
+
* @param filePath - Path to the source file
|
|
445
|
+
* @param language - Programming language of the file
|
|
446
|
+
* @returns Array of undocumented symbols with line numbers
|
|
447
|
+
*/
|
|
448
|
+
export async function findUndocumented(filePath, language) {
|
|
449
|
+
const content = await readFile(filePath, 'utf-8');
|
|
450
|
+
const lines = content.split('\n');
|
|
451
|
+
const documented = await extractDocs(filePath, language);
|
|
452
|
+
const docSymbols = new Set(documented.map((d) => d.symbol));
|
|
453
|
+
const undocumented = [];
|
|
454
|
+
const exportPatterns = [
|
|
455
|
+
/(?:export\s+)?(?:async\s+)?function\s+(\w+)/,
|
|
456
|
+
/(?:export\s+)?class\s+(\w+)/,
|
|
457
|
+
/(?:export\s+)?interface\s+(\w+)/,
|
|
458
|
+
/pub\s+fn\s+(\w+)/,
|
|
459
|
+
/pub\s+struct\s+(\w+)/,
|
|
460
|
+
/func\s+(\w+)/,
|
|
461
|
+
/def\s+(\w+)/,
|
|
462
|
+
];
|
|
463
|
+
for (let i = 0; i < lines.length; i++) {
|
|
464
|
+
for (const pattern of exportPatterns) {
|
|
465
|
+
const match = lines[i].match(pattern);
|
|
466
|
+
if (match && !docSymbols.has(match[1]) && !match[1].startsWith('_')) {
|
|
467
|
+
undocumented.push({ symbol: match[1], line: i + 1, type: 'public' });
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return undocumented;
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/analyzers/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Context Analyzer
|
|
3
|
+
* Provides git history, blame, diff, and change analysis
|
|
4
|
+
*/
|
|
5
|
+
export interface GitLogEntry {
|
|
6
|
+
hash: string;
|
|
7
|
+
author: string;
|
|
8
|
+
date: string;
|
|
9
|
+
message: string;
|
|
10
|
+
files?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface GitBlameEntry {
|
|
13
|
+
line: number;
|
|
14
|
+
hash: string;
|
|
15
|
+
author: string;
|
|
16
|
+
date: string;
|
|
17
|
+
content: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if directory is a git repo.
|
|
21
|
+
* @param cwd - The working directory to check
|
|
22
|
+
* @returns True if the directory is a git repository
|
|
23
|
+
*/
|
|
24
|
+
export declare function isGitRepo(cwd: string): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Get recent git log.
|
|
27
|
+
* @param cwd - The working directory
|
|
28
|
+
* @param options - Log options
|
|
29
|
+
* @param options.count - Maximum number of entries
|
|
30
|
+
* @param options.filePath - Filter by file path
|
|
31
|
+
* @param options.author - Filter by author
|
|
32
|
+
* @param options.since - Filter by date
|
|
33
|
+
* @returns Array of git log entries
|
|
34
|
+
*/
|
|
35
|
+
export declare function getGitLog(cwd: string, options?: {
|
|
36
|
+
count?: number;
|
|
37
|
+
filePath?: string;
|
|
38
|
+
author?: string;
|
|
39
|
+
since?: string;
|
|
40
|
+
}): Promise<GitLogEntry[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Get git log with changed files.
|
|
43
|
+
* @param cwd - The working directory
|
|
44
|
+
* @param count - Maximum number of entries
|
|
45
|
+
* @returns Array of git log entries including changed file lists
|
|
46
|
+
*/
|
|
47
|
+
export declare function getGitLogWithFiles(cwd: string, count?: number): Promise<GitLogEntry[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Git diff -- staged, unstaged, or between refs.
|
|
50
|
+
* @param cwd - The working directory
|
|
51
|
+
* @param options - Diff options
|
|
52
|
+
* @param options.staged - Show staged changes
|
|
53
|
+
* @param options.ref1 - First ref for comparison
|
|
54
|
+
* @param options.ref2 - Second ref for comparison
|
|
55
|
+
* @param options.filePath - Filter by file path
|
|
56
|
+
* @param options.stat - Show diff stats only
|
|
57
|
+
* @returns The diff output as a string
|
|
58
|
+
*/
|
|
59
|
+
export declare function getGitDiff(cwd: string, options?: {
|
|
60
|
+
staged?: boolean;
|
|
61
|
+
ref1?: string;
|
|
62
|
+
ref2?: string;
|
|
63
|
+
filePath?: string;
|
|
64
|
+
stat?: boolean;
|
|
65
|
+
}): Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* Git blame for a file.
|
|
68
|
+
* @param cwd - The working directory
|
|
69
|
+
* @param filePath - Path to the file
|
|
70
|
+
* @param options - Blame options
|
|
71
|
+
* @param options.startLine - Start line for range
|
|
72
|
+
* @param options.endLine - End line for range
|
|
73
|
+
* @returns Array of blame entries per line
|
|
74
|
+
*/
|
|
75
|
+
export declare function getGitBlame(cwd: string, filePath: string, options?: {
|
|
76
|
+
startLine?: number;
|
|
77
|
+
endLine?: number;
|
|
78
|
+
}): Promise<GitBlameEntry[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Get current git status.
|
|
81
|
+
* @param cwd - The working directory
|
|
82
|
+
* @returns Short-format git status output
|
|
83
|
+
*/
|
|
84
|
+
export declare function getGitStatus(cwd: string): Promise<string>;
|
|
85
|
+
/**
|
|
86
|
+
* Get current branch name.
|
|
87
|
+
* @param cwd - The working directory
|
|
88
|
+
* @returns The current branch name
|
|
89
|
+
*/
|
|
90
|
+
export declare function getGitBranch(cwd: string): Promise<string>;
|
|
91
|
+
/**
|
|
92
|
+
* Get list of all branches.
|
|
93
|
+
* @param cwd - The working directory
|
|
94
|
+
* @returns Array of branch names
|
|
95
|
+
*/
|
|
96
|
+
export declare function getGitBranches(cwd: string): Promise<string[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Show a specific commit.
|
|
99
|
+
* @param cwd - The working directory
|
|
100
|
+
* @param ref - The commit reference
|
|
101
|
+
* @param stat - Whether to show stats only
|
|
102
|
+
* @returns The commit details as a string
|
|
103
|
+
*/
|
|
104
|
+
export declare function getGitShow(cwd: string, ref: string, stat?: boolean): Promise<string>;
|
|
105
|
+
/**
|
|
106
|
+
* Get contributors for a file or repo.
|
|
107
|
+
* @param cwd - The working directory
|
|
108
|
+
* @param filePath - Optional file path to filter by
|
|
109
|
+
* @returns Array of contributors with commit counts
|
|
110
|
+
*/
|
|
111
|
+
export declare function getContributors(cwd: string, filePath?: string): Promise<{
|
|
112
|
+
author: string;
|
|
113
|
+
commits: number;
|
|
114
|
+
}[]>;
|
|
115
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/analyzers/git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC,CAexB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgBhG;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,aAAa,EAAE,CAAC,CAsC1B;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnE;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1F;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAapH"}
|