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.
Files changed (229) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/LICENSE +21 -0
  3. package/README.md +760 -0
  4. package/dist/analyzers/api-contract.d.ts +46 -0
  5. package/dist/analyzers/api-contract.d.ts.map +1 -0
  6. package/dist/analyzers/api-contract.js +319 -0
  7. package/dist/analyzers/api-contract.js.map +1 -0
  8. package/dist/analyzers/architecture.d.ts +37 -0
  9. package/dist/analyzers/architecture.d.ts.map +1 -0
  10. package/dist/analyzers/architecture.js +149 -0
  11. package/dist/analyzers/architecture.js.map +1 -0
  12. package/dist/analyzers/branch-compare.d.ts +46 -0
  13. package/dist/analyzers/branch-compare.d.ts.map +1 -0
  14. package/dist/analyzers/branch-compare.js +128 -0
  15. package/dist/analyzers/branch-compare.js.map +1 -0
  16. package/dist/analyzers/cicd.d.ts +42 -0
  17. package/dist/analyzers/cicd.d.ts.map +1 -0
  18. package/dist/analyzers/cicd.js +237 -0
  19. package/dist/analyzers/cicd.js.map +1 -0
  20. package/dist/analyzers/codebase.d.ts +64 -0
  21. package/dist/analyzers/codebase.d.ts.map +1 -0
  22. package/dist/analyzers/codebase.js +354 -0
  23. package/dist/analyzers/codebase.js.map +1 -0
  24. package/dist/analyzers/complexity-heatmap.d.ts +50 -0
  25. package/dist/analyzers/complexity-heatmap.d.ts.map +1 -0
  26. package/dist/analyzers/complexity-heatmap.js +156 -0
  27. package/dist/analyzers/complexity-heatmap.js.map +1 -0
  28. package/dist/analyzers/context-pack.d.ts +43 -0
  29. package/dist/analyzers/context-pack.d.ts.map +1 -0
  30. package/dist/analyzers/context-pack.js +232 -0
  31. package/dist/analyzers/context-pack.js.map +1 -0
  32. package/dist/analyzers/coverage.d.ts +70 -0
  33. package/dist/analyzers/coverage.d.ts.map +1 -0
  34. package/dist/analyzers/coverage.js +313 -0
  35. package/dist/analyzers/coverage.js.map +1 -0
  36. package/dist/analyzers/db-schema.d.ts +55 -0
  37. package/dist/analyzers/db-schema.d.ts.map +1 -0
  38. package/dist/analyzers/db-schema.js +237 -0
  39. package/dist/analyzers/db-schema.js.map +1 -0
  40. package/dist/analyzers/dead-code.d.ts +34 -0
  41. package/dist/analyzers/dead-code.d.ts.map +1 -0
  42. package/dist/analyzers/dead-code.js +131 -0
  43. package/dist/analyzers/dead-code.js.map +1 -0
  44. package/dist/analyzers/dep-vuln.d.ts +36 -0
  45. package/dist/analyzers/dep-vuln.d.ts.map +1 -0
  46. package/dist/analyzers/dep-vuln.js +342 -0
  47. package/dist/analyzers/dep-vuln.js.map +1 -0
  48. package/dist/analyzers/docs.d.ts +47 -0
  49. package/dist/analyzers/docs.d.ts.map +1 -0
  50. package/dist/analyzers/docs.js +473 -0
  51. package/dist/analyzers/docs.js.map +1 -0
  52. package/dist/analyzers/git.d.ts +115 -0
  53. package/dist/analyzers/git.d.ts.map +1 -0
  54. package/dist/analyzers/git.js +214 -0
  55. package/dist/analyzers/git.js.map +1 -0
  56. package/dist/analyzers/iac.d.ts +39 -0
  57. package/dist/analyzers/iac.d.ts.map +1 -0
  58. package/dist/analyzers/iac.js +233 -0
  59. package/dist/analyzers/iac.js.map +1 -0
  60. package/dist/analyzers/impact.d.ts +51 -0
  61. package/dist/analyzers/impact.d.ts.map +1 -0
  62. package/dist/analyzers/impact.js +235 -0
  63. package/dist/analyzers/impact.js.map +1 -0
  64. package/dist/analyzers/monorepo.d.ts +36 -0
  65. package/dist/analyzers/monorepo.d.ts.map +1 -0
  66. package/dist/analyzers/monorepo.js +233 -0
  67. package/dist/analyzers/monorepo.js.map +1 -0
  68. package/dist/analyzers/notebook.d.ts +53 -0
  69. package/dist/analyzers/notebook.d.ts.map +1 -0
  70. package/dist/analyzers/notebook.js +149 -0
  71. package/dist/analyzers/notebook.js.map +1 -0
  72. package/dist/analyzers/perf-profile.d.ts +39 -0
  73. package/dist/analyzers/perf-profile.d.ts.map +1 -0
  74. package/dist/analyzers/perf-profile.js +222 -0
  75. package/dist/analyzers/perf-profile.js.map +1 -0
  76. package/dist/analyzers/scaffold.d.ts +46 -0
  77. package/dist/analyzers/scaffold.d.ts.map +1 -0
  78. package/dist/analyzers/scaffold.js +313 -0
  79. package/dist/analyzers/scaffold.js.map +1 -0
  80. package/dist/analyzers/security.d.ts +42 -0
  81. package/dist/analyzers/security.d.ts.map +1 -0
  82. package/dist/analyzers/security.js +281 -0
  83. package/dist/analyzers/security.js.map +1 -0
  84. package/dist/analyzers/symbols.d.ts +49 -0
  85. package/dist/analyzers/symbols.d.ts.map +1 -0
  86. package/dist/analyzers/symbols.js +212 -0
  87. package/dist/analyzers/symbols.js.map +1 -0
  88. package/dist/analyzers/tree-sitter.d.ts +71 -0
  89. package/dist/analyzers/tree-sitter.d.ts.map +1 -0
  90. package/dist/analyzers/tree-sitter.js +333 -0
  91. package/dist/analyzers/tree-sitter.js.map +1 -0
  92. package/dist/analyzers/type-flow.d.ts +39 -0
  93. package/dist/analyzers/type-flow.d.ts.map +1 -0
  94. package/dist/analyzers/type-flow.js +75 -0
  95. package/dist/analyzers/type-flow.js.map +1 -0
  96. package/dist/cache/memory-cache.d.ts +130 -0
  97. package/dist/cache/memory-cache.d.ts.map +1 -0
  98. package/dist/cache/memory-cache.js +273 -0
  99. package/dist/cache/memory-cache.js.map +1 -0
  100. package/dist/config.d.ts +32 -0
  101. package/dist/config.d.ts.map +1 -0
  102. package/dist/config.js +57 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/constants/instructions.d.ts +2 -0
  105. package/dist/constants/instructions.d.ts.map +1 -0
  106. package/dist/constants/instructions.js +82 -0
  107. package/dist/constants/instructions.js.map +1 -0
  108. package/dist/db/connection.d.ts +12 -0
  109. package/dist/db/connection.d.ts.map +1 -0
  110. package/dist/db/connection.js +34 -0
  111. package/dist/db/connection.js.map +1 -0
  112. package/dist/db/json-store.d.ts +111 -0
  113. package/dist/db/json-store.d.ts.map +1 -0
  114. package/dist/db/json-store.js +201 -0
  115. package/dist/db/json-store.js.map +1 -0
  116. package/dist/db/sqlite-store.d.ts +153 -0
  117. package/dist/db/sqlite-store.d.ts.map +1 -0
  118. package/dist/db/sqlite-store.js +388 -0
  119. package/dist/db/sqlite-store.js.map +1 -0
  120. package/dist/index.d.ts +17 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +116 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/resources/health.d.ts +35 -0
  125. package/dist/resources/health.d.ts.map +1 -0
  126. package/dist/resources/health.js +81 -0
  127. package/dist/resources/health.js.map +1 -0
  128. package/dist/schemas/output-schemas.d.ts +517 -0
  129. package/dist/schemas/output-schemas.d.ts.map +1 -0
  130. package/dist/schemas/output-schemas.js +296 -0
  131. package/dist/schemas/output-schemas.js.map +1 -0
  132. package/dist/search/fast-search.d.ts +90 -0
  133. package/dist/search/fast-search.d.ts.map +1 -0
  134. package/dist/search/fast-search.js +387 -0
  135. package/dist/search/fast-search.js.map +1 -0
  136. package/dist/search/semantic.d.ts +26 -0
  137. package/dist/search/semantic.d.ts.map +1 -0
  138. package/dist/search/semantic.js +458 -0
  139. package/dist/search/semantic.js.map +1 -0
  140. package/dist/tools/analysis.d.ts +7 -0
  141. package/dist/tools/analysis.d.ts.map +1 -0
  142. package/dist/tools/analysis.js +491 -0
  143. package/dist/tools/analysis.js.map +1 -0
  144. package/dist/tools/architecture.d.ts +7 -0
  145. package/dist/tools/architecture.d.ts.map +1 -0
  146. package/dist/tools/architecture.js +176 -0
  147. package/dist/tools/architecture.js.map +1 -0
  148. package/dist/tools/devops.d.ts +7 -0
  149. package/dist/tools/devops.d.ts.map +1 -0
  150. package/dist/tools/devops.js +179 -0
  151. package/dist/tools/devops.js.map +1 -0
  152. package/dist/tools/docs.d.ts +7 -0
  153. package/dist/tools/docs.d.ts.map +1 -0
  154. package/dist/tools/docs.js +102 -0
  155. package/dist/tools/docs.js.map +1 -0
  156. package/dist/tools/git.d.ts +7 -0
  157. package/dist/tools/git.d.ts.map +1 -0
  158. package/dist/tools/git.js +475 -0
  159. package/dist/tools/git.js.map +1 -0
  160. package/dist/tools/nav.d.ts +7 -0
  161. package/dist/tools/nav.d.ts.map +1 -0
  162. package/dist/tools/nav.js +275 -0
  163. package/dist/tools/nav.js.map +1 -0
  164. package/dist/tools/notebook.d.ts +7 -0
  165. package/dist/tools/notebook.d.ts.map +1 -0
  166. package/dist/tools/notebook.js +102 -0
  167. package/dist/tools/notebook.js.map +1 -0
  168. package/dist/tools/performance.d.ts +7 -0
  169. package/dist/tools/performance.d.ts.map +1 -0
  170. package/dist/tools/performance.js +59 -0
  171. package/dist/tools/performance.js.map +1 -0
  172. package/dist/tools/quality.d.ts +7 -0
  173. package/dist/tools/quality.d.ts.map +1 -0
  174. package/dist/tools/quality.js +279 -0
  175. package/dist/tools/quality.js.map +1 -0
  176. package/dist/tools/scaffold.d.ts +7 -0
  177. package/dist/tools/scaffold.d.ts.map +1 -0
  178. package/dist/tools/scaffold.js +80 -0
  179. package/dist/tools/scaffold.js.map +1 -0
  180. package/dist/tools/search.d.ts +7 -0
  181. package/dist/tools/search.d.ts.map +1 -0
  182. package/dist/tools/search.js +308 -0
  183. package/dist/tools/search.js.map +1 -0
  184. package/dist/tools/security.d.ts +7 -0
  185. package/dist/tools/security.d.ts.map +1 -0
  186. package/dist/tools/security.js +138 -0
  187. package/dist/tools/security.js.map +1 -0
  188. package/dist/utils/analytics.d.ts +69 -0
  189. package/dist/utils/analytics.d.ts.map +1 -0
  190. package/dist/utils/analytics.js +144 -0
  191. package/dist/utils/analytics.js.map +1 -0
  192. package/dist/utils/concurrency.d.ts +43 -0
  193. package/dist/utils/concurrency.d.ts.map +1 -0
  194. package/dist/utils/concurrency.js +78 -0
  195. package/dist/utils/concurrency.js.map +1 -0
  196. package/dist/utils/fallback.d.ts +52 -0
  197. package/dist/utils/fallback.d.ts.map +1 -0
  198. package/dist/utils/fallback.js +137 -0
  199. package/dist/utils/fallback.js.map +1 -0
  200. package/dist/utils/git-hooks.d.ts +24 -0
  201. package/dist/utils/git-hooks.d.ts.map +1 -0
  202. package/dist/utils/git-hooks.js +108 -0
  203. package/dist/utils/git-hooks.js.map +1 -0
  204. package/dist/utils/languages.d.ts +72 -0
  205. package/dist/utils/languages.d.ts.map +1 -0
  206. package/dist/utils/languages.js +463 -0
  207. package/dist/utils/languages.js.map +1 -0
  208. package/dist/utils/logger.d.ts +13 -0
  209. package/dist/utils/logger.d.ts.map +1 -0
  210. package/dist/utils/logger.js +34 -0
  211. package/dist/utils/logger.js.map +1 -0
  212. package/dist/utils/plugins.d.ts +105 -0
  213. package/dist/utils/plugins.d.ts.map +1 -0
  214. package/dist/utils/plugins.js +325 -0
  215. package/dist/utils/plugins.js.map +1 -0
  216. package/dist/utils/security.d.ts +17 -0
  217. package/dist/utils/security.d.ts.map +1 -0
  218. package/dist/utils/security.js +48 -0
  219. package/dist/utils/security.js.map +1 -0
  220. package/dist/utils/streaming.d.ts +56 -0
  221. package/dist/utils/streaming.d.ts.map +1 -0
  222. package/dist/utils/streaming.js +95 -0
  223. package/dist/utils/streaming.js.map +1 -0
  224. package/dist/version.d.ts +3 -0
  225. package/dist/version.d.ts.map +1 -0
  226. package/dist/version.js +3 -0
  227. package/dist/version.js.map +1 -0
  228. package/mcp.json +100 -0
  229. 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"}