@dogsbay/format-mkdocs 0.2.0-beta.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 (145) hide show
  1. package/dist/autodoc/markdown-generator.d.ts +6 -0
  2. package/dist/autodoc/markdown-generator.d.ts.map +1 -0
  3. package/dist/autodoc/markdown-generator.js +242 -0
  4. package/dist/autodoc/markdown-generator.js.map +1 -0
  5. package/dist/autodoc/module-resolver.d.ts +8 -0
  6. package/dist/autodoc/module-resolver.d.ts.map +1 -0
  7. package/dist/autodoc/module-resolver.js +218 -0
  8. package/dist/autodoc/module-resolver.js.map +1 -0
  9. package/dist/autodoc/python-docstring.d.ts +7 -0
  10. package/dist/autodoc/python-docstring.d.ts.map +1 -0
  11. package/dist/autodoc/python-docstring.js +324 -0
  12. package/dist/autodoc/python-docstring.js.map +1 -0
  13. package/dist/autodoc/python-parser.d.ts +10 -0
  14. package/dist/autodoc/python-parser.d.ts.map +1 -0
  15. package/dist/autodoc/python-parser.js +541 -0
  16. package/dist/autodoc/python-parser.js.map +1 -0
  17. package/dist/autodoc/tree-builder.d.ts +9 -0
  18. package/dist/autodoc/tree-builder.d.ts.map +1 -0
  19. package/dist/autodoc/tree-builder.js +279 -0
  20. package/dist/autodoc/tree-builder.js.map +1 -0
  21. package/dist/autodoc/types.d.ts +128 -0
  22. package/dist/autodoc/types.d.ts.map +1 -0
  23. package/dist/autodoc/types.js +2 -0
  24. package/dist/autodoc/types.js.map +1 -0
  25. package/dist/cli.d.ts +3 -0
  26. package/dist/cli.d.ts.map +1 -0
  27. package/dist/cli.js +32 -0
  28. package/dist/cli.js.map +1 -0
  29. package/dist/export/to-astro.d.ts +26 -0
  30. package/dist/export/to-astro.d.ts.map +1 -0
  31. package/dist/export/to-astro.js +551 -0
  32. package/dist/export/to-astro.js.map +1 -0
  33. package/dist/export/to-mkdocs-project.d.ts +27 -0
  34. package/dist/export/to-mkdocs-project.d.ts.map +1 -0
  35. package/dist/export/to-mkdocs-project.js +192 -0
  36. package/dist/export/to-mkdocs-project.js.map +1 -0
  37. package/dist/export/to-mkdocs.d.ts +6 -0
  38. package/dist/export/to-mkdocs.d.ts.map +1 -0
  39. package/dist/export/to-mkdocs.js +178 -0
  40. package/dist/export/to-mkdocs.js.map +1 -0
  41. package/dist/importer.d.ts +30 -0
  42. package/dist/importer.d.ts.map +1 -0
  43. package/dist/importer.js +376 -0
  44. package/dist/importer.js.map +1 -0
  45. package/dist/index.d.ts +57 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +170 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/inline-walker.d.ts +17 -0
  50. package/dist/inline-walker.d.ts.map +1 -0
  51. package/dist/inline-walker.js +167 -0
  52. package/dist/inline-walker.js.map +1 -0
  53. package/dist/loader.d.ts +42 -0
  54. package/dist/loader.d.ts.map +1 -0
  55. package/dist/loader.js +765 -0
  56. package/dist/loader.js.map +1 -0
  57. package/dist/parse.d.ts +12 -0
  58. package/dist/parse.d.ts.map +1 -0
  59. package/dist/parse.js +46 -0
  60. package/dist/parse.js.map +1 -0
  61. package/dist/renderers/mermaid.d.ts +9 -0
  62. package/dist/renderers/mermaid.d.ts.map +1 -0
  63. package/dist/renderers/mermaid.js +117 -0
  64. package/dist/renderers/mermaid.js.map +1 -0
  65. package/dist/rules/admonition.d.ts +6 -0
  66. package/dist/rules/admonition.d.ts.map +1 -0
  67. package/dist/rules/admonition.js +73 -0
  68. package/dist/rules/admonition.js.map +1 -0
  69. package/dist/rules/annotations.d.ts +6 -0
  70. package/dist/rules/annotations.d.ts.map +1 -0
  71. package/dist/rules/annotations.js +57 -0
  72. package/dist/rules/annotations.js.map +1 -0
  73. package/dist/rules/autodoc.d.ts +7 -0
  74. package/dist/rules/autodoc.d.ts.map +1 -0
  75. package/dist/rules/autodoc.js +102 -0
  76. package/dist/rules/autodoc.js.map +1 -0
  77. package/dist/rules/blocks.d.ts +6 -0
  78. package/dist/rules/blocks.d.ts.map +1 -0
  79. package/dist/rules/blocks.js +172 -0
  80. package/dist/rules/blocks.js.map +1 -0
  81. package/dist/rules/content-tabs.d.ts +6 -0
  82. package/dist/rules/content-tabs.d.ts.map +1 -0
  83. package/dist/rules/content-tabs.js +67 -0
  84. package/dist/rules/content-tabs.js.map +1 -0
  85. package/dist/rules/docusaurus-admonitions.d.ts +7 -0
  86. package/dist/rules/docusaurus-admonitions.d.ts.map +1 -0
  87. package/dist/rules/docusaurus-admonitions.js +101 -0
  88. package/dist/rules/docusaurus-admonitions.js.map +1 -0
  89. package/dist/rules/file-include.d.ts +28 -0
  90. package/dist/rules/file-include.d.ts.map +1 -0
  91. package/dist/rules/file-include.js +198 -0
  92. package/dist/rules/file-include.js.map +1 -0
  93. package/dist/rules/footnotes.d.ts +6 -0
  94. package/dist/rules/footnotes.d.ts.map +1 -0
  95. package/dist/rules/footnotes.js +161 -0
  96. package/dist/rules/footnotes.js.map +1 -0
  97. package/dist/rules/icon-shortcode.d.ts +30 -0
  98. package/dist/rules/icon-shortcode.d.ts.map +1 -0
  99. package/dist/rules/icon-shortcode.js +169 -0
  100. package/dist/rules/icon-shortcode.js.map +1 -0
  101. package/dist/rules/keys.d.ts +6 -0
  102. package/dist/rules/keys.d.ts.map +1 -0
  103. package/dist/rules/keys.js +30 -0
  104. package/dist/rules/keys.js.map +1 -0
  105. package/dist/rules/link-rewrite.d.ts +7 -0
  106. package/dist/rules/link-rewrite.d.ts.map +1 -0
  107. package/dist/rules/link-rewrite.js +93 -0
  108. package/dist/rules/link-rewrite.js.map +1 -0
  109. package/dist/rules/math.d.ts +14 -0
  110. package/dist/rules/math.d.ts.map +1 -0
  111. package/dist/rules/math.js +114 -0
  112. package/dist/rules/math.js.map +1 -0
  113. package/dist/rules/md-in-html.d.ts +6 -0
  114. package/dist/rules/md-in-html.d.ts.map +1 -0
  115. package/dist/rules/md-in-html.js +135 -0
  116. package/dist/rules/md-in-html.js.map +1 -0
  117. package/dist/rules/snippets.d.ts +10 -0
  118. package/dist/rules/snippets.d.ts.map +1 -0
  119. package/dist/rules/snippets.js +109 -0
  120. package/dist/rules/snippets.js.map +1 -0
  121. package/dist/rules/templates.d.ts +15 -0
  122. package/dist/rules/templates.d.ts.map +1 -0
  123. package/dist/rules/templates.js +105 -0
  124. package/dist/rules/templates.js.map +1 -0
  125. package/dist/rules/variants.d.ts +12 -0
  126. package/dist/rules/variants.d.ts.map +1 -0
  127. package/dist/rules/variants.js +148 -0
  128. package/dist/rules/variants.js.map +1 -0
  129. package/dist/tree.d.ts +2 -0
  130. package/dist/tree.d.ts.map +1 -0
  131. package/dist/tree.js +2 -0
  132. package/dist/tree.js.map +1 -0
  133. package/dist/utils/indent.d.ts +18 -0
  134. package/dist/utils/indent.d.ts.map +1 -0
  135. package/dist/utils/indent.js +56 -0
  136. package/dist/utils/indent.js.map +1 -0
  137. package/dist/utils/types.d.ts +19 -0
  138. package/dist/utils/types.d.ts.map +1 -0
  139. package/dist/utils/types.js +63 -0
  140. package/dist/utils/types.js.map +1 -0
  141. package/dist/walker.d.ts +8 -0
  142. package/dist/walker.d.ts.map +1 -0
  143. package/dist/walker.js +193 -0
  144. package/dist/walker.js.map +1 -0
  145. package/package.json +71 -0
@@ -0,0 +1,541 @@
1
+ import { resolve } from "node:path";
2
+ import { existsSync, realpathSync, readdirSync } from "node:fs";
3
+ let parserInstance = null;
4
+ /**
5
+ * Initialize the tree-sitter Python parser (lazy, cached).
6
+ */
7
+ async function getParser() {
8
+ if (parserInstance)
9
+ return parserInstance;
10
+ const TreeSitter = await import("web-tree-sitter");
11
+ // Find the web-tree-sitter.wasm file for Emscripten init
12
+ const treeSitterWasm = findPackageFile("web-tree-sitter", "web-tree-sitter.wasm");
13
+ await TreeSitter.Parser.init(treeSitterWasm
14
+ ? {
15
+ locateFile: () => treeSitterWasm,
16
+ }
17
+ : undefined);
18
+ parserInstance = new TreeSitter.Parser();
19
+ // Find tree-sitter-python.wasm for language loading
20
+ const pythonWasm = findPackageFile("tree-sitter-python", "tree-sitter-python.wasm");
21
+ if (!pythonWasm) {
22
+ throw new Error("tree-sitter-python.wasm not found");
23
+ }
24
+ const pythonLanguage = await TreeSitter.Language.load(pythonWasm);
25
+ parserInstance.setLanguage(pythonLanguage);
26
+ return parserInstance;
27
+ }
28
+ /**
29
+ * Find a file within an npm package, following symlinks for file: linked packages.
30
+ */
31
+ function findPackageFile(packageName, fileName) {
32
+ const candidate = `node_modules/${packageName}/${fileName}`;
33
+ const starts = [process.cwd()];
34
+ // Follow symlinks for file: linked packages
35
+ try {
36
+ const pkgDir = resolve(process.cwd(), "node_modules/@dogsbay/format-mkdocs");
37
+ starts.push(realpathSync(pkgDir));
38
+ }
39
+ catch { /* ignore */ }
40
+ for (const start of starts) {
41
+ let dir = start;
42
+ for (let i = 0; i < 6; i++) {
43
+ const full = resolve(dir, candidate);
44
+ if (existsSync(full))
45
+ return full;
46
+ const parent = resolve(dir, "..");
47
+ if (parent === dir)
48
+ break;
49
+ dir = parent;
50
+ }
51
+ }
52
+ // Search pnpm's .pnpm directory structure
53
+ for (const start of starts) {
54
+ let dir = start;
55
+ for (let i = 0; i < 6; i++) {
56
+ const pnpmDir = resolve(dir, "node_modules/.pnpm");
57
+ if (existsSync(pnpmDir)) {
58
+ try {
59
+ for (const entry of readdirSync(pnpmDir)) {
60
+ if (entry.startsWith(`${packageName}@`)) {
61
+ const full = resolve(pnpmDir, entry, "node_modules", packageName, fileName);
62
+ if (existsSync(full))
63
+ return full;
64
+ }
65
+ }
66
+ }
67
+ catch { /* continue */ }
68
+ }
69
+ const parent = resolve(dir, "..");
70
+ if (parent === dir)
71
+ break;
72
+ dir = parent;
73
+ }
74
+ }
75
+ return null;
76
+ }
77
+ /**
78
+ * Parse Python source code and extract all top-level symbols.
79
+ */
80
+ export async function parsePythonSource(source, filePath) {
81
+ const parser = await getParser();
82
+ const tree = parser.parse(source);
83
+ if (!tree)
84
+ return [];
85
+ return extractSymbols(tree.rootNode, filePath);
86
+ }
87
+ /**
88
+ * Find a specific symbol by name in parsed source.
89
+ */
90
+ export async function findSymbolInSource(source, symbolName, filePath) {
91
+ const symbols = await parsePythonSource(source, filePath);
92
+ // Direct match
93
+ for (const sym of symbols) {
94
+ if (sym.name === symbolName)
95
+ return sym;
96
+ }
97
+ // Check for dotted name (e.g. looking for "FastAPI" in a module)
98
+ const parts = symbolName.split(".");
99
+ const lastName = parts[parts.length - 1];
100
+ for (const sym of symbols) {
101
+ if (sym.name === lastName)
102
+ return sym;
103
+ }
104
+ return null;
105
+ }
106
+ function extractSymbols(node, filePath) {
107
+ const symbols = [];
108
+ for (const child of node.children) {
109
+ if (child.type === "class_definition") {
110
+ symbols.push(extractClass(child, filePath));
111
+ }
112
+ else if (child.type === "function_definition") {
113
+ symbols.push(extractFunction(child, filePath, "function"));
114
+ }
115
+ else if (child.type === "decorated_definition") {
116
+ const decorators = extractDecorators(child);
117
+ const inner = child.children.find((c) => c.type === "class_definition" || c.type === "function_definition");
118
+ if (inner) {
119
+ const sym = inner.type === "class_definition"
120
+ ? extractClass(inner, filePath)
121
+ : extractFunction(inner, filePath, "function");
122
+ sym.decorators = decorators;
123
+ symbols.push(sym);
124
+ }
125
+ }
126
+ else if (child.type === "expression_statement") {
127
+ // Module-level assignments (constants, type aliases)
128
+ const assign = child.children.find((c) => c.type === "assignment" || c.type === "type_alias_statement");
129
+ if (assign) {
130
+ const nameNode = assign.children[0];
131
+ if (nameNode?.type === "identifier") {
132
+ symbols.push({
133
+ name: nameNode.text,
134
+ kind: "variable",
135
+ signature: assign.text,
136
+ docstring: extractFollowingDocstring(child),
137
+ decorators: [],
138
+ bases: [],
139
+ params: [],
140
+ returnType: null,
141
+ members: [],
142
+ source: { file: filePath, line: child.startPosition.row + 1 },
143
+ });
144
+ }
145
+ }
146
+ }
147
+ }
148
+ return symbols;
149
+ }
150
+ function extractClass(node, filePath) {
151
+ const nameNode = node.childForFieldName("name");
152
+ const name = nameNode?.text ?? "Unknown";
153
+ // Base classes
154
+ const bases = [];
155
+ const argList = node.children.find((c) => c.type === "argument_list");
156
+ if (argList) {
157
+ for (const arg of argList.children) {
158
+ if (arg.type === "identifier" || arg.type === "attribute") {
159
+ bases.push(arg.text);
160
+ }
161
+ }
162
+ }
163
+ // Class body
164
+ const body = node.childForFieldName("body");
165
+ const docstring = body ? extractDocstring(body) : null;
166
+ const members = [];
167
+ const initParams = [];
168
+ if (body) {
169
+ for (const child of body.children) {
170
+ if (child.type === "function_definition") {
171
+ const method = extractFunction(child, filePath, "method");
172
+ if (method.name === "__init__") {
173
+ initParams.push(...method.params.filter((p) => p.name !== "self"));
174
+ // Extract instance attributes from __init__ body (self.x: Type = value)
175
+ const initBody = child.childForFieldName("body");
176
+ if (initBody) {
177
+ members.push(...extractInstanceAttributes(initBody, filePath));
178
+ }
179
+ }
180
+ members.push(method);
181
+ }
182
+ else if (child.type === "decorated_definition") {
183
+ const decorators = extractDecorators(child);
184
+ const inner = child.children.find((c) => c.type === "function_definition");
185
+ if (inner) {
186
+ const method = extractFunction(inner, filePath, "method");
187
+ method.decorators = decorators;
188
+ // Check for @property
189
+ if (decorators.some((d) => d === "@property")) {
190
+ method.kind = "property";
191
+ }
192
+ members.push(method);
193
+ }
194
+ }
195
+ }
196
+ }
197
+ // Build class signature
198
+ const basesStr = bases.length > 0 ? `(${bases.join(", ")})` : "";
199
+ const signature = `class ${name}${basesStr}`;
200
+ return {
201
+ name,
202
+ kind: "class",
203
+ signature,
204
+ docstring,
205
+ decorators: [],
206
+ bases,
207
+ params: initParams,
208
+ returnType: null,
209
+ members,
210
+ source: { file: filePath, line: node.startPosition.row + 1 },
211
+ sourceText: node.text,
212
+ };
213
+ }
214
+ function extractFunction(node, filePath, kind) {
215
+ const nameNode = node.childForFieldName("name");
216
+ const name = nameNode?.text ?? "Unknown";
217
+ // Parameters
218
+ const paramsNode = node.childForFieldName("parameters");
219
+ const params = paramsNode ? extractParams(paramsNode) : [];
220
+ // Return type
221
+ const returnNode = node.childForFieldName("return_type");
222
+ const returnType = returnNode?.text ?? null;
223
+ // Docstring
224
+ const body = node.childForFieldName("body");
225
+ const docstring = body ? extractDocstring(body) : null;
226
+ // Build signature
227
+ const paramsStr = params
228
+ .map((p) => {
229
+ let s = "";
230
+ if (p.kind === "var_positional")
231
+ s += "*";
232
+ if (p.kind === "var_keyword")
233
+ s += "**";
234
+ s += p.name;
235
+ if (p.bareType || p.type)
236
+ s += `: ${p.bareType || p.type}`;
237
+ if (p.default)
238
+ s += ` = ${p.default}`;
239
+ return s;
240
+ })
241
+ .join(", ");
242
+ const retStr = returnType ? ` -> ${returnType}` : "";
243
+ const signature = `def ${name}(${paramsStr})${retStr}`;
244
+ return {
245
+ name,
246
+ kind,
247
+ signature,
248
+ docstring,
249
+ decorators: [],
250
+ bases: [],
251
+ params: kind === "method" ? params.filter((p) => p.name !== "self" && p.name !== "cls") : params,
252
+ returnType,
253
+ members: [],
254
+ source: { file: filePath, line: node.startPosition.row + 1 },
255
+ sourceText: node.text,
256
+ };
257
+ }
258
+ function extractParams(node) {
259
+ const params = [];
260
+ let seenStar = false;
261
+ for (const child of node.children) {
262
+ if (child.type === "identifier") {
263
+ params.push({
264
+ name: child.text,
265
+ type: null,
266
+ bareType: null,
267
+ default: null,
268
+ doc: null,
269
+ required: true,
270
+ kind: seenStar ? "keyword_only" : "positional",
271
+ });
272
+ }
273
+ else if (child.type === "typed_parameter" || child.type === "typed_default_parameter") {
274
+ // Handle **kwargs and *args with type annotations
275
+ const splatNode = child.children.find((c) => c.type === "dictionary_splat_pattern" || c.type === "list_splat_pattern");
276
+ const nameNode = splatNode
277
+ ? splatNode.children.find((c) => c.type === "identifier")
278
+ : child.children.find((c) => c.type === "identifier");
279
+ const typeNode = child.childForFieldName("type");
280
+ const defaultNode = child.children.find((c) => c.type === "default_parameter" || child.type === "typed_default_parameter");
281
+ let name = nameNode?.text ?? "";
282
+ let paramKind = seenStar ? "keyword_only" : "positional";
283
+ if (splatNode?.type === "dictionary_splat_pattern") {
284
+ name = `**${name}`;
285
+ paramKind = "var_keyword";
286
+ }
287
+ else if (splatNode?.type === "list_splat_pattern") {
288
+ name = `*${name}`;
289
+ paramKind = "var_positional";
290
+ }
291
+ const fullType = typeNode?.text ?? null;
292
+ // Extract Annotated[type, Doc("...")] if present
293
+ const { bareType, doc } = parseAnnotatedType(fullType);
294
+ // Find default value
295
+ let defaultVal = null;
296
+ if (child.type === "typed_default_parameter") {
297
+ // The default value is after the '='
298
+ const eqIdx = child.children.findIndex((c) => c.type === "=");
299
+ if (eqIdx >= 0 && eqIdx + 1 < child.children.length) {
300
+ defaultVal = child.children[eqIdx + 1].text;
301
+ }
302
+ }
303
+ params.push({
304
+ name,
305
+ type: fullType,
306
+ bareType,
307
+ default: defaultVal,
308
+ doc,
309
+ required: defaultVal === null && defaultVal !== "...",
310
+ kind: paramKind,
311
+ });
312
+ }
313
+ else if (child.type === "default_parameter") {
314
+ const nameNode = child.children[0];
315
+ const valueNode = child.children[child.children.length - 1];
316
+ params.push({
317
+ name: nameNode?.text ?? "",
318
+ type: null,
319
+ bareType: null,
320
+ default: valueNode?.text ?? null,
321
+ doc: null,
322
+ required: false,
323
+ kind: seenStar ? "keyword_only" : "positional",
324
+ });
325
+ }
326
+ else if (child.type === "list_splat_pattern" || child.text === "*") {
327
+ if (child.text === "*") {
328
+ seenStar = true;
329
+ }
330
+ else {
331
+ const nameNode = child.children.find((c) => c.type === "identifier");
332
+ params.push({
333
+ name: nameNode?.text ?? "args",
334
+ type: null,
335
+ bareType: null,
336
+ default: null,
337
+ doc: null,
338
+ required: false,
339
+ kind: "var_positional",
340
+ });
341
+ }
342
+ }
343
+ else if (child.type === "dictionary_splat_pattern") {
344
+ const nameNode = child.children.find((c) => c.type === "identifier");
345
+ params.push({
346
+ name: nameNode?.text ?? "kwargs",
347
+ type: null,
348
+ bareType: null,
349
+ default: null,
350
+ doc: null,
351
+ required: false,
352
+ kind: "var_keyword",
353
+ });
354
+ }
355
+ }
356
+ return params;
357
+ }
358
+ /**
359
+ * Parse Annotated[BaseType, Doc("description"), ...] to extract
360
+ * the bare type and Doc() description.
361
+ *
362
+ * Uses bracket/quote matching instead of regex to handle nested
363
+ * triple-quoted strings with code blocks inside Doc().
364
+ */
365
+ function parseAnnotatedType(fullType) {
366
+ if (!fullType)
367
+ return { bareType: null, doc: null };
368
+ const trimmed = fullType.trim();
369
+ if (!trimmed.startsWith("Annotated"))
370
+ return { bareType: fullType, doc: null };
371
+ // Find the opening bracket
372
+ const bracketStart = trimmed.indexOf("[");
373
+ if (bracketStart === -1)
374
+ return { bareType: fullType, doc: null };
375
+ const inner = trimmed.slice(bracketStart + 1);
376
+ // Extract the first type argument (before the first top-level comma)
377
+ let depth = 0;
378
+ let firstComma = -1;
379
+ for (let i = 0; i < inner.length; i++) {
380
+ if (inner[i] === "[" || inner[i] === "(")
381
+ depth++;
382
+ else if (inner[i] === "]" || inner[i] === ")")
383
+ depth--;
384
+ else if (inner[i] === "," && depth === 0) {
385
+ firstComma = i;
386
+ break;
387
+ }
388
+ }
389
+ if (firstComma === -1)
390
+ return { bareType: fullType, doc: null };
391
+ const bareType = inner.slice(0, firstComma).trim();
392
+ // Find Doc(...) in the remaining content
393
+ const rest = inner.slice(firstComma + 1);
394
+ const docIdx = rest.indexOf("Doc(");
395
+ if (docIdx === -1)
396
+ return { bareType, doc: null };
397
+ // Extract content inside Doc(...)
398
+ const docStart = docIdx + 4; // after "Doc("
399
+ const docContent = rest.slice(docStart);
400
+ // Find the matching closing paren, handling triple-quoted strings
401
+ let doc = extractDocContent(docContent);
402
+ return { bareType, doc };
403
+ }
404
+ /**
405
+ * Extract the string content from inside Doc(...), handling
406
+ * triple-quoted strings that may contain code blocks.
407
+ */
408
+ function extractDocContent(content) {
409
+ const trimmed = content.trimStart();
410
+ // Triple-quoted string
411
+ if (trimmed.startsWith("'''") || trimmed.startsWith('"""')) {
412
+ const quote = trimmed.slice(0, 3);
413
+ const endIdx = trimmed.indexOf(quote, 3);
414
+ if (endIdx !== -1) {
415
+ return trimmed.slice(3, endIdx).trim();
416
+ }
417
+ }
418
+ // Single-quoted string
419
+ if (trimmed.startsWith('"')) {
420
+ const endIdx = trimmed.indexOf('"', 1);
421
+ if (endIdx !== -1)
422
+ return trimmed.slice(1, endIdx).trim();
423
+ }
424
+ if (trimmed.startsWith("'")) {
425
+ const endIdx = trimmed.indexOf("'", 1);
426
+ if (endIdx !== -1)
427
+ return trimmed.slice(1, endIdx).trim();
428
+ }
429
+ return null;
430
+ }
431
+ function extractDocstring(bodyNode) {
432
+ // First statement in the body
433
+ const firstChild = bodyNode.children[0];
434
+ if (!firstChild)
435
+ return null;
436
+ // Expression statement containing a string
437
+ if (firstChild.type === "expression_statement") {
438
+ const stringNode = firstChild.children[0];
439
+ if (stringNode?.type === "string" || stringNode?.type === "concatenated_string") {
440
+ return stripQuotes(stringNode.text);
441
+ }
442
+ }
443
+ return null;
444
+ }
445
+ function extractFollowingDocstring(node) {
446
+ // Check the next sibling for a docstring
447
+ const next = node.nextSibling;
448
+ if (next?.type === "expression_statement") {
449
+ const stringNode = next.children[0];
450
+ if (stringNode?.type === "string") {
451
+ return stripQuotes(stringNode.text);
452
+ }
453
+ }
454
+ return null;
455
+ }
456
+ function stripQuotes(s) {
457
+ // Remove triple quotes or single quotes
458
+ if (s.startsWith('"""') && s.endsWith('"""'))
459
+ return s.slice(3, -3).trim();
460
+ if (s.startsWith("'''") && s.endsWith("'''"))
461
+ return s.slice(3, -3).trim();
462
+ if (s.startsWith('"') && s.endsWith('"'))
463
+ return s.slice(1, -1).trim();
464
+ if (s.startsWith("'") && s.endsWith("'"))
465
+ return s.slice(1, -1).trim();
466
+ return s.trim();
467
+ }
468
+ /**
469
+ * Extract instance attributes from __init__ body.
470
+ * Looks for `self.name: Annotated[Type, Doc("...")] = value` patterns.
471
+ */
472
+ function extractInstanceAttributes(initBody, filePath) {
473
+ const attrs = [];
474
+ for (const stmt of initBody.children) {
475
+ if (stmt.type !== "expression_statement")
476
+ continue;
477
+ const expr = stmt.children[0];
478
+ if (!expr)
479
+ continue;
480
+ // self.name: Type = value OR self.name = value
481
+ if (expr.type === "assignment") {
482
+ const leftNode = expr.childForFieldName("left");
483
+ const left = leftNode || expr.children[0];
484
+ if (left?.type === "attribute" && left.text.startsWith("self.")) {
485
+ const attrName = left.text.slice(5); // remove "self."
486
+ // Type annotation is the "type" field on the assignment
487
+ const typeNode = expr.childForFieldName("type");
488
+ const fullType = typeNode?.text ?? null;
489
+ const { bareType, doc } = parseAnnotatedType(fullType);
490
+ // Get default value via field name
491
+ const rightNode = expr.childForFieldName("right");
492
+ const defaultVal = rightNode?.text ?? null;
493
+ attrs.push({
494
+ name: attrName,
495
+ kind: "property",
496
+ signature: `${attrName}: ${bareType || fullType || "Any"}${defaultVal ? ` = ${defaultVal}` : ""}`,
497
+ docstring: doc,
498
+ decorators: [],
499
+ bases: [],
500
+ params: [],
501
+ returnType: bareType || fullType,
502
+ members: [],
503
+ source: { file: filePath, line: stmt.startPosition.row + 1 },
504
+ });
505
+ }
506
+ }
507
+ // self.name: Type = value (typed assignment — `type` field on assignment)
508
+ if (expr.type === "type" && expr.children.length > 0) {
509
+ // Handle augmented assignment with type annotation
510
+ const innerAssign = expr.children[0];
511
+ if (innerAssign?.type === "assignment") {
512
+ const left = innerAssign.children[0];
513
+ if (left?.type === "attribute" && left.text.startsWith("self.")) {
514
+ const attrName = left.text.slice(5);
515
+ const typeAnnotation = innerAssign.childForFieldName("type");
516
+ const fullType = typeAnnotation?.text ?? null;
517
+ const { bareType, doc } = parseAnnotatedType(fullType);
518
+ attrs.push({
519
+ name: attrName,
520
+ kind: "property",
521
+ signature: `${attrName}: ${bareType || fullType || "Any"}`,
522
+ docstring: doc,
523
+ decorators: [],
524
+ bases: [],
525
+ params: [],
526
+ returnType: bareType || fullType,
527
+ members: [],
528
+ source: { file: filePath, line: stmt.startPosition.row + 1 },
529
+ });
530
+ }
531
+ }
532
+ }
533
+ }
534
+ return attrs;
535
+ }
536
+ function extractDecorators(node) {
537
+ return node.children
538
+ .filter((c) => c.type === "decorator")
539
+ .map((d) => d.text);
540
+ }
541
+ //# sourceMappingURL=python-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.js","sourceRoot":"","sources":["../../src/autodoc/python-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type MarkdownIt from "markdown-it";
2
+ import type { TreeNode } from "../tree.js";
3
+ import type { SymbolInfo, AutodocDirectiveOptions } from "./types.js";
4
+ /**
5
+ * Convert a SymbolInfo into a tree of API TreeNodes.
6
+ * These render through dedicated components (ApiSymbol, ApiDoc, ApiParams).
7
+ */
8
+ export declare function symbolToTreeNode(symbol: SymbolInfo, options: AutodocDirectiveOptions, md: MarkdownIt, fullPath?: string, sourceRoot?: string): TreeNode;
9
+ //# sourceMappingURL=tree-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-builder.d.ts","sourceRoot":"","sources":["../../src/autodoc/tree-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAa,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAQjF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,uBAAuB,EAChC,EAAE,EAAE,UAAU,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,QAAQ,CAQV"}