@dogsbay/autodoc-python 0.2.0-beta.41

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.
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Parse a Python docstring into structured sections.
3
+ * Supports Google, NumPy, and Sphinx styles.
4
+ */
5
+ export function parseDocstring(raw) {
6
+ const trimmed = dedent(raw);
7
+ const lines = trimmed.split("\n");
8
+ // Detect style and parse
9
+ if (isGoogleStyle(lines))
10
+ return parseGoogleDocstring(lines);
11
+ if (isNumpyStyle(lines))
12
+ return parseNumpyDocstring(lines);
13
+ if (isSphinxStyle(lines))
14
+ return parseSphinxDocstring(lines);
15
+ // No recognized section style — treat as plain description
16
+ return {
17
+ summary: extractSummary(lines),
18
+ description: lines.join("\n").trim(),
19
+ params: [],
20
+ returns: null,
21
+ raises: [],
22
+ examples: [],
23
+ notes: [],
24
+ deprecated: null,
25
+ };
26
+ }
27
+ function dedent(text) {
28
+ const lines = text.split("\n");
29
+ // Find minimum indentation (excluding empty lines)
30
+ let minIndent = Infinity;
31
+ for (const line of lines) {
32
+ if (line.trim() === "")
33
+ continue;
34
+ const indent = line.match(/^(\s*)/)?.[1].length ?? 0;
35
+ if (indent < minIndent)
36
+ minIndent = indent;
37
+ }
38
+ if (minIndent === Infinity || minIndent === 0)
39
+ return text;
40
+ return lines.map((l) => l.slice(minIndent)).join("\n");
41
+ }
42
+ function extractSummary(lines) {
43
+ const parts = [];
44
+ for (const line of lines) {
45
+ if (line.trim() === "" && parts.length > 0)
46
+ break;
47
+ if (line.trim() !== "")
48
+ parts.push(line.trim());
49
+ }
50
+ return parts.join(" ");
51
+ }
52
+ // ── Google Style ─────────────────────────────────────
53
+ const GOOGLE_SECTIONS = /^(Args|Arguments|Parameters|Returns?|Raises?|Yields?|Examples?|Notes?|Attributes?|Todo|Deprecated|References?|Warns?|See Also)\s*:/i;
54
+ function isGoogleStyle(lines) {
55
+ return lines.some((l) => GOOGLE_SECTIONS.test(l.trim()));
56
+ }
57
+ function parseGoogleDocstring(lines) {
58
+ const result = {
59
+ summary: "",
60
+ description: "",
61
+ params: [],
62
+ returns: null,
63
+ raises: [],
64
+ examples: [],
65
+ notes: [],
66
+ deprecated: null,
67
+ };
68
+ let currentSection = null;
69
+ const descLines = [];
70
+ const sectionLines = [];
71
+ let inSummary = true;
72
+ function flushSection() {
73
+ if (!currentSection)
74
+ return;
75
+ const content = sectionLines.join("\n");
76
+ switch (currentSection.toLowerCase()) {
77
+ case "args":
78
+ case "arguments":
79
+ case "parameters":
80
+ case "attributes":
81
+ result.params = parseGoogleParams(sectionLines);
82
+ break;
83
+ case "returns":
84
+ case "return":
85
+ result.returns = parseGoogleReturn(sectionLines);
86
+ break;
87
+ case "raises":
88
+ case "raise":
89
+ result.raises = parseGoogleRaises(sectionLines);
90
+ break;
91
+ case "examples":
92
+ case "example":
93
+ result.examples.push(content);
94
+ break;
95
+ case "notes":
96
+ case "note":
97
+ result.notes.push(content);
98
+ break;
99
+ case "deprecated":
100
+ result.deprecated = content.trim();
101
+ break;
102
+ }
103
+ sectionLines.length = 0;
104
+ }
105
+ for (const line of lines) {
106
+ const trimmed = line.trim();
107
+ const sectionMatch = GOOGLE_SECTIONS.exec(trimmed);
108
+ if (sectionMatch) {
109
+ if (inSummary) {
110
+ result.summary = extractSummary(descLines);
111
+ result.description = descLines.join("\n").trim();
112
+ inSummary = false;
113
+ }
114
+ flushSection();
115
+ currentSection = sectionMatch[1];
116
+ continue;
117
+ }
118
+ if (currentSection) {
119
+ sectionLines.push(line);
120
+ }
121
+ else {
122
+ if (trimmed === "" && inSummary && descLines.length > 0) {
123
+ result.summary = extractSummary(descLines);
124
+ inSummary = false;
125
+ }
126
+ descLines.push(line);
127
+ }
128
+ }
129
+ if (inSummary && descLines.length > 0) {
130
+ result.summary = extractSummary(descLines);
131
+ result.description = descLines.join("\n").trim();
132
+ }
133
+ flushSection();
134
+ return result;
135
+ }
136
+ function parseGoogleParams(lines) {
137
+ const params = [];
138
+ let current = null;
139
+ for (const line of lines) {
140
+ // "name (type): description" or "name: description"
141
+ const match = line.match(/^\s{2,4}(\w+)\s*(?:\(([^)]+)\))?\s*:\s*(.*)/);
142
+ if (match) {
143
+ if (current)
144
+ params.push(current);
145
+ current = {
146
+ name: match[1],
147
+ type: match[2] || null,
148
+ description: match[3].trim(),
149
+ };
150
+ }
151
+ else if (current && line.trim() !== "") {
152
+ current.description += " " + line.trim();
153
+ }
154
+ }
155
+ if (current)
156
+ params.push(current);
157
+ return params;
158
+ }
159
+ function parseGoogleReturn(lines) {
160
+ const text = lines.map((l) => l.trim()).filter(Boolean).join(" ");
161
+ if (!text)
162
+ return null;
163
+ // "type: description" or just "description"
164
+ const match = text.match(/^(\w[\w\[\], |]*?):\s*(.*)/);
165
+ if (match)
166
+ return { type: match[1], description: match[2] };
167
+ return { type: null, description: text };
168
+ }
169
+ function parseGoogleRaises(lines) {
170
+ const raises = [];
171
+ let current = null;
172
+ for (const line of lines) {
173
+ const match = line.match(/^\s{2,4}(\w+)\s*:\s*(.*)/);
174
+ if (match) {
175
+ if (current)
176
+ raises.push(current);
177
+ current = { type: match[1], description: match[2].trim() };
178
+ }
179
+ else if (current && line.trim() !== "") {
180
+ current.description += " " + line.trim();
181
+ }
182
+ }
183
+ if (current)
184
+ raises.push(current);
185
+ return raises;
186
+ }
187
+ // ── NumPy Style ──────────────────────────────────────
188
+ const NUMPY_SECTION_UNDERLINE = /^-{3,}\s*$/;
189
+ function isNumpyStyle(lines) {
190
+ return lines.some((l) => NUMPY_SECTION_UNDERLINE.test(l.trim()));
191
+ }
192
+ function parseNumpyDocstring(lines) {
193
+ const result = {
194
+ summary: extractSummary(lines),
195
+ description: "",
196
+ params: [],
197
+ returns: null,
198
+ raises: [],
199
+ examples: [],
200
+ notes: [],
201
+ deprecated: null,
202
+ };
203
+ let i = 0;
204
+ const descLines = [];
205
+ // Collect description until first section
206
+ while (i < lines.length) {
207
+ if (i + 1 < lines.length && NUMPY_SECTION_UNDERLINE.test(lines[i + 1].trim()))
208
+ break;
209
+ descLines.push(lines[i]);
210
+ i++;
211
+ }
212
+ result.description = descLines.join("\n").trim();
213
+ // Parse sections
214
+ while (i < lines.length) {
215
+ const sectionName = lines[i].trim();
216
+ i++; // skip section name
217
+ if (i < lines.length && NUMPY_SECTION_UNDERLINE.test(lines[i].trim())) {
218
+ i++; // skip underline
219
+ }
220
+ const sectionLines = [];
221
+ while (i < lines.length) {
222
+ if (i + 1 < lines.length && NUMPY_SECTION_UNDERLINE.test(lines[i + 1].trim()))
223
+ break;
224
+ sectionLines.push(lines[i]);
225
+ i++;
226
+ }
227
+ const lower = sectionName.toLowerCase();
228
+ if (lower === "parameters" || lower === "params") {
229
+ result.params = parseNumpyParams(sectionLines);
230
+ }
231
+ else if (lower === "returns") {
232
+ const retText = sectionLines.map((l) => l.trim()).filter(Boolean).join(" ");
233
+ if (retText)
234
+ result.returns = { type: null, description: retText };
235
+ }
236
+ else if (lower === "raises") {
237
+ result.raises = parseGoogleRaises(sectionLines); // Similar format
238
+ }
239
+ else if (lower === "examples" || lower === "example") {
240
+ result.examples.push(sectionLines.join("\n"));
241
+ }
242
+ else if (lower === "notes") {
243
+ result.notes.push(sectionLines.join("\n").trim());
244
+ }
245
+ }
246
+ return result;
247
+ }
248
+ function parseNumpyParams(lines) {
249
+ const params = [];
250
+ let current = null;
251
+ for (const line of lines) {
252
+ // "name : type" or just "name"
253
+ const match = line.match(/^(\w+)\s*:\s*(.*)/);
254
+ if (match && !line.startsWith(" ")) {
255
+ if (current)
256
+ params.push(current);
257
+ current = { name: match[1], type: match[2] || null, description: "" };
258
+ }
259
+ else if (current && line.trim() !== "") {
260
+ current.description += (current.description ? " " : "") + line.trim();
261
+ }
262
+ }
263
+ if (current)
264
+ params.push(current);
265
+ return params;
266
+ }
267
+ // ── Sphinx Style ─────────────────────────────────────
268
+ function isSphinxStyle(lines) {
269
+ return lines.some((l) => /^\s*:(param|type|returns?|rtype|raises?)\s/.test(l));
270
+ }
271
+ function parseSphinxDocstring(lines) {
272
+ const result = {
273
+ summary: extractSummary(lines),
274
+ description: "",
275
+ params: [],
276
+ returns: null,
277
+ raises: [],
278
+ examples: [],
279
+ notes: [],
280
+ deprecated: null,
281
+ };
282
+ const descLines = [];
283
+ const paramDocs = {};
284
+ const paramTypes = {};
285
+ for (const line of lines) {
286
+ const paramMatch = line.match(/^\s*:param\s+(\w+)\s*:\s*(.*)/);
287
+ const typeMatch = line.match(/^\s*:type\s+(\w+)\s*:\s*(.*)/);
288
+ const returnMatch = line.match(/^\s*:returns?\s*:\s*(.*)/);
289
+ const rtypeMatch = line.match(/^\s*:rtype\s*:\s*(.*)/);
290
+ const raisesMatch = line.match(/^\s*:raises?\s+(\w+)\s*:\s*(.*)/);
291
+ if (paramMatch) {
292
+ paramDocs[paramMatch[1]] = paramMatch[2].trim();
293
+ }
294
+ else if (typeMatch) {
295
+ paramTypes[typeMatch[1]] = typeMatch[2].trim();
296
+ }
297
+ else if (returnMatch) {
298
+ if (!result.returns)
299
+ result.returns = { type: null, description: "" };
300
+ result.returns.description = returnMatch[1].trim();
301
+ }
302
+ else if (rtypeMatch) {
303
+ if (!result.returns)
304
+ result.returns = { type: null, description: "" };
305
+ result.returns.type = rtypeMatch[1].trim();
306
+ }
307
+ else if (raisesMatch) {
308
+ result.raises.push({ type: raisesMatch[1], description: raisesMatch[2].trim() });
309
+ }
310
+ else {
311
+ descLines.push(line);
312
+ }
313
+ }
314
+ result.description = descLines.join("\n").trim();
315
+ for (const [name, desc] of Object.entries(paramDocs)) {
316
+ result.params.push({
317
+ name,
318
+ type: paramTypes[name] || null,
319
+ description: desc,
320
+ });
321
+ }
322
+ return result;
323
+ }
324
+ //# sourceMappingURL=python-docstring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-docstring.js","sourceRoot":"","sources":["../src/python-docstring.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,yBAAyB;IACzB,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE7D,2DAA2D;IAC3D,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;QACpC,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,mDAAmD;IACnD,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QACrD,IAAI,MAAM,GAAG,SAAS;YAAE,SAAS,GAAG,MAAM,CAAC;IAC7C,CAAC;IACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM;QAClD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,wDAAwD;AAExD,MAAM,eAAe,GAAG,qIAAqI,CAAC;AAE9J,SAAS,aAAa,CAAC,KAAe;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,SAAS,YAAY;QACnB,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,QAAQ,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACf,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ;gBACX,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO;gBACV,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,UAAU,CAAC;YAChB,KAAK,SAAS;gBACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,OAAO,CAAC;YACb,KAAK,MAAM;gBACT,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM;QACV,CAAC;QACD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjD,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;YACD,YAAY,EAAE,CAAC;YACf,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,KAAK,EAAE,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC3C,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;IACD,YAAY,EAAE,CAAC;IAEf,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe;IACxC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,oDAAoD;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACxE,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG;gBACR,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;gBACtB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAC7B,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzC,OAAO,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACvD,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe;IACxC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7D,CAAC;aAAM,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzC,OAAO,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wDAAwD;AAExD,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAE7C,SAAS,YAAY,CAAC,KAAe;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe;IAC1C,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,0CAA0C;IAC1C,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAE,MAAM;QACrF,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC,EAAE,CAAC;IACN,CAAC;IACD,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjD,iBAAiB;IACjB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC,EAAE,CAAC,CAAC,oBAAoB;QACzB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACtE,CAAC,EAAE,CAAC,CAAC,iBAAiB;QACxB,CAAC;QAED,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,MAAM;YACrF,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC;QACN,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjD,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5E,IAAI,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACrE,CAAC;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB;QACpE,CAAC;aAAM,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe;IACvC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,+BAA+B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QACxE,CAAC;aAAM,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxE,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wDAAwD;AAExD,SAAS,aAAa,CAAC,KAAe;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,4CAA4C,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAElE,IAAI,UAAU,EAAE,CAAC;YACf,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YACtE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YACtE,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACjB,IAAI;YACJ,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI;YAC9B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { SymbolInfo } from "./types.js";
2
+ /**
3
+ * Parse Python source code and extract all top-level symbols.
4
+ */
5
+ export declare function parsePythonSource(source: string, filePath: string): Promise<SymbolInfo[]>;
6
+ /**
7
+ * Find a specific symbol by name in parsed source.
8
+ */
9
+ export declare function findSymbolInSource(source: string, symbolName: string, filePath: string): Promise<SymbolInfo | null>;
10
+ //# sourceMappingURL=python-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.d.ts","sourceRoot":"","sources":["../src/python-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AA+GxD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAKvB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgB5B"}