@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.
- package/dist/autodoc/markdown-generator.d.ts +6 -0
- package/dist/autodoc/markdown-generator.d.ts.map +1 -0
- package/dist/autodoc/markdown-generator.js +242 -0
- package/dist/autodoc/markdown-generator.js.map +1 -0
- package/dist/autodoc/module-resolver.d.ts +8 -0
- package/dist/autodoc/module-resolver.d.ts.map +1 -0
- package/dist/autodoc/module-resolver.js +218 -0
- package/dist/autodoc/module-resolver.js.map +1 -0
- package/dist/autodoc/python-docstring.d.ts +7 -0
- package/dist/autodoc/python-docstring.d.ts.map +1 -0
- package/dist/autodoc/python-docstring.js +324 -0
- package/dist/autodoc/python-docstring.js.map +1 -0
- package/dist/autodoc/python-parser.d.ts +10 -0
- package/dist/autodoc/python-parser.d.ts.map +1 -0
- package/dist/autodoc/python-parser.js +541 -0
- package/dist/autodoc/python-parser.js.map +1 -0
- package/dist/autodoc/tree-builder.d.ts +9 -0
- package/dist/autodoc/tree-builder.d.ts.map +1 -0
- package/dist/autodoc/tree-builder.js +279 -0
- package/dist/autodoc/tree-builder.js.map +1 -0
- package/dist/autodoc/types.d.ts +128 -0
- package/dist/autodoc/types.d.ts.map +1 -0
- package/dist/autodoc/types.js +2 -0
- package/dist/autodoc/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +32 -0
- package/dist/cli.js.map +1 -0
- package/dist/export/to-astro.d.ts +26 -0
- package/dist/export/to-astro.d.ts.map +1 -0
- package/dist/export/to-astro.js +551 -0
- package/dist/export/to-astro.js.map +1 -0
- package/dist/export/to-mkdocs-project.d.ts +27 -0
- package/dist/export/to-mkdocs-project.d.ts.map +1 -0
- package/dist/export/to-mkdocs-project.js +192 -0
- package/dist/export/to-mkdocs-project.js.map +1 -0
- package/dist/export/to-mkdocs.d.ts +6 -0
- package/dist/export/to-mkdocs.d.ts.map +1 -0
- package/dist/export/to-mkdocs.js +178 -0
- package/dist/export/to-mkdocs.js.map +1 -0
- package/dist/importer.d.ts +30 -0
- package/dist/importer.d.ts.map +1 -0
- package/dist/importer.js +376 -0
- package/dist/importer.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +170 -0
- package/dist/index.js.map +1 -0
- package/dist/inline-walker.d.ts +17 -0
- package/dist/inline-walker.d.ts.map +1 -0
- package/dist/inline-walker.js +167 -0
- package/dist/inline-walker.js.map +1 -0
- package/dist/loader.d.ts +42 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +765 -0
- package/dist/loader.js.map +1 -0
- package/dist/parse.d.ts +12 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +46 -0
- package/dist/parse.js.map +1 -0
- package/dist/renderers/mermaid.d.ts +9 -0
- package/dist/renderers/mermaid.d.ts.map +1 -0
- package/dist/renderers/mermaid.js +117 -0
- package/dist/renderers/mermaid.js.map +1 -0
- package/dist/rules/admonition.d.ts +6 -0
- package/dist/rules/admonition.d.ts.map +1 -0
- package/dist/rules/admonition.js +73 -0
- package/dist/rules/admonition.js.map +1 -0
- package/dist/rules/annotations.d.ts +6 -0
- package/dist/rules/annotations.d.ts.map +1 -0
- package/dist/rules/annotations.js +57 -0
- package/dist/rules/annotations.js.map +1 -0
- package/dist/rules/autodoc.d.ts +7 -0
- package/dist/rules/autodoc.d.ts.map +1 -0
- package/dist/rules/autodoc.js +102 -0
- package/dist/rules/autodoc.js.map +1 -0
- package/dist/rules/blocks.d.ts +6 -0
- package/dist/rules/blocks.d.ts.map +1 -0
- package/dist/rules/blocks.js +172 -0
- package/dist/rules/blocks.js.map +1 -0
- package/dist/rules/content-tabs.d.ts +6 -0
- package/dist/rules/content-tabs.d.ts.map +1 -0
- package/dist/rules/content-tabs.js +67 -0
- package/dist/rules/content-tabs.js.map +1 -0
- package/dist/rules/docusaurus-admonitions.d.ts +7 -0
- package/dist/rules/docusaurus-admonitions.d.ts.map +1 -0
- package/dist/rules/docusaurus-admonitions.js +101 -0
- package/dist/rules/docusaurus-admonitions.js.map +1 -0
- package/dist/rules/file-include.d.ts +28 -0
- package/dist/rules/file-include.d.ts.map +1 -0
- package/dist/rules/file-include.js +198 -0
- package/dist/rules/file-include.js.map +1 -0
- package/dist/rules/footnotes.d.ts +6 -0
- package/dist/rules/footnotes.d.ts.map +1 -0
- package/dist/rules/footnotes.js +161 -0
- package/dist/rules/footnotes.js.map +1 -0
- package/dist/rules/icon-shortcode.d.ts +30 -0
- package/dist/rules/icon-shortcode.d.ts.map +1 -0
- package/dist/rules/icon-shortcode.js +169 -0
- package/dist/rules/icon-shortcode.js.map +1 -0
- package/dist/rules/keys.d.ts +6 -0
- package/dist/rules/keys.d.ts.map +1 -0
- package/dist/rules/keys.js +30 -0
- package/dist/rules/keys.js.map +1 -0
- package/dist/rules/link-rewrite.d.ts +7 -0
- package/dist/rules/link-rewrite.d.ts.map +1 -0
- package/dist/rules/link-rewrite.js +93 -0
- package/dist/rules/link-rewrite.js.map +1 -0
- package/dist/rules/math.d.ts +14 -0
- package/dist/rules/math.d.ts.map +1 -0
- package/dist/rules/math.js +114 -0
- package/dist/rules/math.js.map +1 -0
- package/dist/rules/md-in-html.d.ts +6 -0
- package/dist/rules/md-in-html.d.ts.map +1 -0
- package/dist/rules/md-in-html.js +135 -0
- package/dist/rules/md-in-html.js.map +1 -0
- package/dist/rules/snippets.d.ts +10 -0
- package/dist/rules/snippets.d.ts.map +1 -0
- package/dist/rules/snippets.js +109 -0
- package/dist/rules/snippets.js.map +1 -0
- package/dist/rules/templates.d.ts +15 -0
- package/dist/rules/templates.d.ts.map +1 -0
- package/dist/rules/templates.js +105 -0
- package/dist/rules/templates.js.map +1 -0
- package/dist/rules/variants.d.ts +12 -0
- package/dist/rules/variants.d.ts.map +1 -0
- package/dist/rules/variants.js +148 -0
- package/dist/rules/variants.js.map +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +2 -0
- package/dist/tree.js.map +1 -0
- package/dist/utils/indent.d.ts +18 -0
- package/dist/utils/indent.d.ts.map +1 -0
- package/dist/utils/indent.js +56 -0
- package/dist/utils/indent.js.map +1 -0
- package/dist/utils/types.d.ts +19 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +63 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/walker.d.ts +8 -0
- package/dist/walker.d.ts.map +1 -0
- package/dist/walker.js +193 -0
- package/dist/walker.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SymbolInfo, AutodocDirectiveOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Generate markdown documentation for a symbol.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateMarkdown(symbol: SymbolInfo, options?: AutodocDirectiveOptions): string;
|
|
6
|
+
//# sourceMappingURL=markdown-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-generator.d.ts","sourceRoot":"","sources":["../../src/autodoc/markdown-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEjF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAaR"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate markdown documentation for a symbol.
|
|
3
|
+
*/
|
|
4
|
+
export function generateMarkdown(symbol, options = {}) {
|
|
5
|
+
const level = options.headingLevel ?? 2;
|
|
6
|
+
const lines = [];
|
|
7
|
+
if (symbol.kind === "module") {
|
|
8
|
+
lines.push(...generateModule(symbol, level, options));
|
|
9
|
+
}
|
|
10
|
+
else if (symbol.kind === "class") {
|
|
11
|
+
lines.push(...generateClass(symbol, level, options));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
lines.push(...generateFunction(symbol, level, options));
|
|
15
|
+
}
|
|
16
|
+
return lines.join("\n");
|
|
17
|
+
}
|
|
18
|
+
function generateModule(symbol, level, options) {
|
|
19
|
+
const lines = [];
|
|
20
|
+
const heading = "#".repeat(level);
|
|
21
|
+
if (options.showRootHeading !== false) {
|
|
22
|
+
lines.push(`${heading} <span class="api-badge api-badge-module">module</span> \`${symbol.name}\``);
|
|
23
|
+
lines.push("");
|
|
24
|
+
}
|
|
25
|
+
if (symbol.docstring) {
|
|
26
|
+
lines.push(symbol.docstring);
|
|
27
|
+
lines.push("");
|
|
28
|
+
}
|
|
29
|
+
const members = filterMembers(symbol.members, options);
|
|
30
|
+
for (const member of members) {
|
|
31
|
+
lines.push(...generateSymbol(member, level + 1, options));
|
|
32
|
+
lines.push("");
|
|
33
|
+
}
|
|
34
|
+
return lines;
|
|
35
|
+
}
|
|
36
|
+
function generateClass(symbol, level, options) {
|
|
37
|
+
const lines = [];
|
|
38
|
+
const heading = "#".repeat(level);
|
|
39
|
+
if (options.showRootHeading !== false) {
|
|
40
|
+
lines.push(`${heading} <span class="api-badge api-badge-class">class</span> \`${symbol.name}\``);
|
|
41
|
+
lines.push("");
|
|
42
|
+
}
|
|
43
|
+
// Class signature — include __init__ params when mergeInitIntoClass
|
|
44
|
+
if (options.separateSignature !== false) {
|
|
45
|
+
lines.push("```python");
|
|
46
|
+
if (options.mergeInitIntoClass !== false && symbol.params.length > 0) {
|
|
47
|
+
// Full signature with all constructor parameters
|
|
48
|
+
const paramLines = symbol.params.map((p) => {
|
|
49
|
+
let s = ` ${p.name}`;
|
|
50
|
+
if (p.bareType || p.type)
|
|
51
|
+
s += `: ${p.bareType || p.type}`;
|
|
52
|
+
if (p.default)
|
|
53
|
+
s += ` = ${p.default}`;
|
|
54
|
+
return s + ",";
|
|
55
|
+
});
|
|
56
|
+
lines.push(`${symbol.name}(`);
|
|
57
|
+
lines.push(" *,");
|
|
58
|
+
lines.push(...paramLines);
|
|
59
|
+
lines.push(")");
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
lines.push(symbol.signature);
|
|
63
|
+
}
|
|
64
|
+
lines.push("```");
|
|
65
|
+
lines.push("");
|
|
66
|
+
}
|
|
67
|
+
// Bases
|
|
68
|
+
if (symbol.bases.length > 0) {
|
|
69
|
+
lines.push(`Bases: ${symbol.bases.map((b) => `\`${b}\``).join(", ")}`);
|
|
70
|
+
lines.push("");
|
|
71
|
+
}
|
|
72
|
+
// Docstring — render as markdown directly
|
|
73
|
+
if (symbol.docstring) {
|
|
74
|
+
lines.push(dedentDoc(symbol.docstring));
|
|
75
|
+
lines.push("");
|
|
76
|
+
}
|
|
77
|
+
// Constructor parameters (merged into class if option set)
|
|
78
|
+
if (options.mergeInitIntoClass !== false && symbol.params.length > 0) {
|
|
79
|
+
lines.push(...generateParamTable(symbol.params));
|
|
80
|
+
lines.push("");
|
|
81
|
+
}
|
|
82
|
+
// Members
|
|
83
|
+
const members = filterMembers(symbol.members, options);
|
|
84
|
+
for (const member of members) {
|
|
85
|
+
if (member.name === "__init__" && options.mergeInitIntoClass !== false)
|
|
86
|
+
continue;
|
|
87
|
+
lines.push(...generateSymbol(member, level + 1, options));
|
|
88
|
+
lines.push("");
|
|
89
|
+
}
|
|
90
|
+
return lines;
|
|
91
|
+
}
|
|
92
|
+
function generateFunction(symbol, level, options) {
|
|
93
|
+
const lines = [];
|
|
94
|
+
const heading = "#".repeat(level);
|
|
95
|
+
if (options.showRootHeading !== false) {
|
|
96
|
+
const badge = symbol.kind === "method" ? "meth" : symbol.kind === "property" ? "attr" : "func";
|
|
97
|
+
lines.push(`${heading} <span class="api-badge api-badge-${badge}">${badge}</span> \`${symbol.name}\``);
|
|
98
|
+
lines.push("");
|
|
99
|
+
}
|
|
100
|
+
// Signature — show call-style for methods (no def, no self)
|
|
101
|
+
if (options.separateSignature !== false) {
|
|
102
|
+
lines.push("```python");
|
|
103
|
+
if (symbol.kind === "method" && symbol.params.length > 0) {
|
|
104
|
+
const paramLines = symbol.params.map((p) => {
|
|
105
|
+
let s = ` ${p.name}`;
|
|
106
|
+
if (p.bareType || p.type)
|
|
107
|
+
s += `: ${p.bareType || p.type}`;
|
|
108
|
+
if (p.default)
|
|
109
|
+
s += ` = ${p.default}`;
|
|
110
|
+
return s + ",";
|
|
111
|
+
});
|
|
112
|
+
lines.push(`${symbol.name}(`);
|
|
113
|
+
lines.push(...paramLines);
|
|
114
|
+
lines.push(")");
|
|
115
|
+
}
|
|
116
|
+
else if (symbol.kind === "method") {
|
|
117
|
+
lines.push(`${symbol.name}()`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
lines.push(symbol.signature);
|
|
121
|
+
}
|
|
122
|
+
lines.push("```");
|
|
123
|
+
lines.push("");
|
|
124
|
+
}
|
|
125
|
+
// Decorators
|
|
126
|
+
if (symbol.decorators.length > 0) {
|
|
127
|
+
for (const dec of symbol.decorators) {
|
|
128
|
+
lines.push(`\`${dec}\``);
|
|
129
|
+
}
|
|
130
|
+
lines.push("");
|
|
131
|
+
}
|
|
132
|
+
// Docstring — render as markdown directly
|
|
133
|
+
if (symbol.docstring) {
|
|
134
|
+
lines.push(dedentDoc(symbol.docstring));
|
|
135
|
+
lines.push("");
|
|
136
|
+
}
|
|
137
|
+
// Parameters
|
|
138
|
+
if (symbol.params.length > 0) {
|
|
139
|
+
lines.push(...generateParamTable(symbol.params));
|
|
140
|
+
lines.push("");
|
|
141
|
+
}
|
|
142
|
+
// Return type
|
|
143
|
+
if (symbol.returnType) {
|
|
144
|
+
lines.push(`**Returns:** \`${symbol.returnType}\``);
|
|
145
|
+
lines.push("");
|
|
146
|
+
}
|
|
147
|
+
return lines;
|
|
148
|
+
}
|
|
149
|
+
function generateSymbol(symbol, level, options) {
|
|
150
|
+
if (symbol.kind === "class")
|
|
151
|
+
return generateClass(symbol, level, options);
|
|
152
|
+
return generateFunction(symbol, level, options);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Generate a JSON-encoded api-params directive that the loader
|
|
156
|
+
* will convert to a TreeNode. This avoids markdown table limitations
|
|
157
|
+
* (no multi-line cells) and lets a dedicated component render rich
|
|
158
|
+
* parameter documentation.
|
|
159
|
+
*
|
|
160
|
+
* Format: <!-- api-params:JSON -->
|
|
161
|
+
*/
|
|
162
|
+
function generateParamTable(params) {
|
|
163
|
+
const paramData = params.map((p) => ({
|
|
164
|
+
name: p.name,
|
|
165
|
+
type: p.bareType || p.type || null,
|
|
166
|
+
default: p.default || null,
|
|
167
|
+
required: p.required,
|
|
168
|
+
doc: p.doc ? dedentDoc(p.doc) : null,
|
|
169
|
+
}));
|
|
170
|
+
return [
|
|
171
|
+
"**Parameters:**",
|
|
172
|
+
"",
|
|
173
|
+
`<!-- api-params:${JSON.stringify(paramData)} -->`,
|
|
174
|
+
"",
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
function dedentDoc(text) {
|
|
178
|
+
const lines = text.split("\n");
|
|
179
|
+
// Find minimum indentation, skipping the first line (often unindented)
|
|
180
|
+
// and empty lines
|
|
181
|
+
let minIndent = Infinity;
|
|
182
|
+
for (let i = 0; i < lines.length; i++) {
|
|
183
|
+
if (lines[i].trim() === "")
|
|
184
|
+
continue;
|
|
185
|
+
const indent = lines[i].match(/^(\s*)/)?.[1].length ?? 0;
|
|
186
|
+
// Skip first line for min calculation if it has no indent
|
|
187
|
+
// (common pattern: first line right after quotes, rest indented)
|
|
188
|
+
if (i === 0 && indent === 0)
|
|
189
|
+
continue;
|
|
190
|
+
if (indent < minIndent)
|
|
191
|
+
minIndent = indent;
|
|
192
|
+
}
|
|
193
|
+
if (minIndent === Infinity || minIndent === 0)
|
|
194
|
+
return text.trim();
|
|
195
|
+
return lines.map((l) => {
|
|
196
|
+
if (l.trim() === "")
|
|
197
|
+
return "";
|
|
198
|
+
return l.startsWith(" ".repeat(minIndent)) ? l.slice(minIndent) : l;
|
|
199
|
+
}).join("\n").trim();
|
|
200
|
+
}
|
|
201
|
+
function filterMembers(members, options) {
|
|
202
|
+
let filtered = [...members];
|
|
203
|
+
// Apply member whitelist
|
|
204
|
+
if (options.members && options.members.length > 0) {
|
|
205
|
+
const allowed = new Set(options.members);
|
|
206
|
+
filtered = filtered.filter((m) => allowed.has(m.name));
|
|
207
|
+
// Preserve requested order
|
|
208
|
+
filtered.sort((a, b) => {
|
|
209
|
+
const aIdx = options.members.indexOf(a.name);
|
|
210
|
+
const bIdx = options.members.indexOf(b.name);
|
|
211
|
+
return aIdx - bIdx;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Apply filters (e.g. "!^_" to exclude private members)
|
|
215
|
+
if (options.filters) {
|
|
216
|
+
for (const filter of options.filters) {
|
|
217
|
+
if (filter.startsWith("!")) {
|
|
218
|
+
const re = new RegExp(filter.slice(1));
|
|
219
|
+
filtered = filtered.filter((m) => !re.test(m.name));
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const re = new RegExp(filter);
|
|
223
|
+
filtered = filtered.filter((m) => re.test(m.name));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Skip no-docstring members unless showIfNoDocstring
|
|
228
|
+
if (!options.showIfNoDocstring) {
|
|
229
|
+
// Keep all by default (FastAPI uses show_if_no_docstring: true globally)
|
|
230
|
+
}
|
|
231
|
+
// Sort
|
|
232
|
+
if (options.membersOrder === "alphabetical") {
|
|
233
|
+
filtered.sort((a, b) => a.name.localeCompare(b.name));
|
|
234
|
+
}
|
|
235
|
+
return filtered;
|
|
236
|
+
}
|
|
237
|
+
function truncate(s, maxLen) {
|
|
238
|
+
if (s.length <= maxLen)
|
|
239
|
+
return s;
|
|
240
|
+
return s.substring(0, maxLen - 3) + "...";
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=markdown-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-generator.js","sourceRoot":"","sources":["../../src/autodoc/markdown-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SymbolInfo } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build list of source paths to search.
|
|
4
|
+
* Includes the sourceRoot itself plus any .venv site-packages.
|
|
5
|
+
*/
|
|
6
|
+
export declare function buildSourcePaths(sourceRoot: string): string[];
|
|
7
|
+
export declare function resolveIdentifier(identifier: string, sourceRoot: string): Promise<SymbolInfo | null>;
|
|
8
|
+
//# sourceMappingURL=module-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-resolver.d.ts","sourceRoot":"","sources":["../../src/autodoc/module-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB7D;AAkBD,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAmB5B"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { findSymbolInSource } from "./python-parser.js";
|
|
4
|
+
/**
|
|
5
|
+
* Build list of source paths to search.
|
|
6
|
+
* Includes the sourceRoot itself plus any .venv site-packages.
|
|
7
|
+
*/
|
|
8
|
+
export function buildSourcePaths(sourceRoot) {
|
|
9
|
+
const paths = [sourceRoot];
|
|
10
|
+
// Search for .venv/lib/python*/site-packages/
|
|
11
|
+
const venvDirs = [".venv", "venv", ".env"];
|
|
12
|
+
for (const venv of venvDirs) {
|
|
13
|
+
const venvPath = join(sourceRoot, venv, "lib");
|
|
14
|
+
if (!existsSync(venvPath))
|
|
15
|
+
continue;
|
|
16
|
+
try {
|
|
17
|
+
for (const pyDir of readdirSync(venvPath)) {
|
|
18
|
+
const sitePackages = join(venvPath, pyDir, "site-packages");
|
|
19
|
+
if (existsSync(sitePackages) && statSync(sitePackages).isDirectory()) {
|
|
20
|
+
paths.push(sitePackages);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch { /* continue */ }
|
|
25
|
+
}
|
|
26
|
+
return paths;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a dotted Python identifier to a source file and symbol.
|
|
30
|
+
*
|
|
31
|
+
* Examples:
|
|
32
|
+
* "fastapi.FastAPI" → fastapi/__init__.py or fastapi/applications.py
|
|
33
|
+
* "fastapi.security.OAuth2" → fastapi/security/__init__.py
|
|
34
|
+
* "fastapi.responses.JSONResponse" → fastapi/responses.py
|
|
35
|
+
* "fastapi.status" → fastapi/status.py (module-level)
|
|
36
|
+
*/
|
|
37
|
+
// Cache source paths to avoid rebuilding for every resolve call
|
|
38
|
+
let cachedSourceRoot = null;
|
|
39
|
+
let cachedSourcePaths = [];
|
|
40
|
+
// Track identifiers being resolved to prevent infinite recursion
|
|
41
|
+
const resolving = new Set();
|
|
42
|
+
export async function resolveIdentifier(identifier, sourceRoot) {
|
|
43
|
+
if (resolving.has(identifier))
|
|
44
|
+
return null;
|
|
45
|
+
resolving.add(identifier);
|
|
46
|
+
try {
|
|
47
|
+
if (cachedSourceRoot !== sourceRoot) {
|
|
48
|
+
cachedSourcePaths = buildSourcePaths(sourceRoot);
|
|
49
|
+
cachedSourceRoot = sourceRoot;
|
|
50
|
+
}
|
|
51
|
+
for (const root of cachedSourcePaths) {
|
|
52
|
+
const result = await resolveInRoot(identifier, root, cachedSourcePaths, 0);
|
|
53
|
+
if (result)
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
resolving.delete(identifier);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function resolveInRoot(identifier, sourceRoot, allPaths, depth = 0) {
|
|
63
|
+
// Prevent infinite recursion from circular re-exports
|
|
64
|
+
if (depth > 2)
|
|
65
|
+
return null;
|
|
66
|
+
const parts = identifier.split(".");
|
|
67
|
+
// Try progressively splitting: module.path vs symbol.name
|
|
68
|
+
for (let split = parts.length - 1; split >= 1; split--) {
|
|
69
|
+
const moduleParts = parts.slice(0, split);
|
|
70
|
+
const symbolName = parts.slice(split).join(".");
|
|
71
|
+
const filePath = resolveModulePath(moduleParts, sourceRoot);
|
|
72
|
+
if (!filePath)
|
|
73
|
+
continue;
|
|
74
|
+
try {
|
|
75
|
+
const source = readFileSync(filePath, "utf-8");
|
|
76
|
+
const symbol = await findSymbolInSource(source, symbolName, filePath);
|
|
77
|
+
if (symbol)
|
|
78
|
+
return symbol;
|
|
79
|
+
// Follow chained re-export in this file
|
|
80
|
+
const chainMatch = source.match(new RegExp(`from\\s+(\\S+)\\s+import\\s+${symbolName}(?:\\s+as\\s+${symbolName})?`));
|
|
81
|
+
if (chainMatch) {
|
|
82
|
+
const chainModule = chainMatch[1];
|
|
83
|
+
const searchPaths = allPaths || [sourceRoot];
|
|
84
|
+
for (const root of searchPaths) {
|
|
85
|
+
const result = await resolveInRoot(`${chainModule}.${symbolName}`, root, allPaths, depth + 1);
|
|
86
|
+
if (result)
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Follow re-exports from __init__.py
|
|
96
|
+
const lastPart = parts[parts.length - 1];
|
|
97
|
+
const packageParts = parts.slice(0, -1);
|
|
98
|
+
const packageDir = join(sourceRoot, ...packageParts);
|
|
99
|
+
if (existsSync(packageDir) && statSync(packageDir).isDirectory()) {
|
|
100
|
+
const initPath = join(packageDir, "__init__.py");
|
|
101
|
+
if (existsSync(initPath)) {
|
|
102
|
+
const initSource = readFileSync(initPath, "utf-8");
|
|
103
|
+
// Follow relative imports: from .submodule import Symbol
|
|
104
|
+
const relImportMatch = initSource.match(new RegExp(`from\\s+\\.(\\w+)\\s+import\\s+(?:.*\\b${lastPart}\\b)`));
|
|
105
|
+
if (relImportMatch) {
|
|
106
|
+
const submodule = relImportMatch[1];
|
|
107
|
+
const subPath = join(packageDir, submodule + ".py");
|
|
108
|
+
if (existsSync(subPath)) {
|
|
109
|
+
try {
|
|
110
|
+
const subSource = readFileSync(subPath, "utf-8");
|
|
111
|
+
// Try as a definition first
|
|
112
|
+
const symbol = await findSymbolInSource(subSource, lastPart, subPath);
|
|
113
|
+
if (symbol)
|
|
114
|
+
return symbol;
|
|
115
|
+
// Follow chained re-export: from other.module import Symbol
|
|
116
|
+
const chainMatch = subSource.match(new RegExp(`from\\s+(\\S+)\\s+import\\s+${lastPart}(?:\\s+as\\s+${lastPart})?`));
|
|
117
|
+
if (chainMatch) {
|
|
118
|
+
const chainModule = chainMatch[1];
|
|
119
|
+
const searchPaths = allPaths || [sourceRoot];
|
|
120
|
+
for (const root of searchPaths) {
|
|
121
|
+
const result = await resolveInRoot(`${chainModule}.${lastPart}`, root, allPaths, depth + 1);
|
|
122
|
+
if (result)
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch { /* continue */ }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Follow absolute imports: from some.module import Symbol as Symbol
|
|
131
|
+
const absImportMatch = initSource.match(new RegExp(`from\\s+(\\S+)\\s+import\\s+${lastPart}(?:\\s+as\\s+${lastPart})?`));
|
|
132
|
+
if (absImportMatch) {
|
|
133
|
+
const absModule = absImportMatch[1];
|
|
134
|
+
// Resolve this as a new identifier from all source paths
|
|
135
|
+
const searchPaths = allPaths || [sourceRoot];
|
|
136
|
+
for (const root of searchPaths) {
|
|
137
|
+
const absResult = await resolveInRoot(`${absModule}.${lastPart}`, root, allPaths, depth + 1);
|
|
138
|
+
if (absResult)
|
|
139
|
+
return absResult;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Scan .py files for definitions (skip at depth > 0 to avoid slow scans)
|
|
144
|
+
if (depth === 0) {
|
|
145
|
+
try {
|
|
146
|
+
for (const entry of readdirSync(packageDir)) {
|
|
147
|
+
if (!entry.endsWith(".py") || entry === "__init__.py")
|
|
148
|
+
continue;
|
|
149
|
+
const filePath = join(packageDir, entry);
|
|
150
|
+
try {
|
|
151
|
+
const source = readFileSync(filePath, "utf-8");
|
|
152
|
+
const symbol = await findSymbolInSource(source, lastPart, filePath);
|
|
153
|
+
if (symbol)
|
|
154
|
+
return symbol;
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch { /* continue */ }
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Try as a module itself
|
|
165
|
+
const modulePath = resolveModulePath(parts, sourceRoot);
|
|
166
|
+
if (modulePath) {
|
|
167
|
+
try {
|
|
168
|
+
const source = readFileSync(modulePath, "utf-8");
|
|
169
|
+
const { parsePythonSource } = await import("./python-parser.js");
|
|
170
|
+
const symbols = await parsePythonSource(source, modulePath);
|
|
171
|
+
return {
|
|
172
|
+
name: parts[parts.length - 1],
|
|
173
|
+
kind: "module",
|
|
174
|
+
signature: `module ${identifier}`,
|
|
175
|
+
docstring: extractModuleDocstring(source),
|
|
176
|
+
decorators: [],
|
|
177
|
+
bases: [],
|
|
178
|
+
params: [],
|
|
179
|
+
returnType: null,
|
|
180
|
+
members: symbols,
|
|
181
|
+
source: { file: modulePath, line: 1 },
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Fall through
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Resolve module path parts to a file path.
|
|
192
|
+
* Tries: package/__init__.py, then module.py
|
|
193
|
+
*/
|
|
194
|
+
function resolveModulePath(parts, sourceRoot) {
|
|
195
|
+
// Try as package: parts/__init__.py
|
|
196
|
+
const packageInit = join(sourceRoot, ...parts, "__init__.py");
|
|
197
|
+
if (existsSync(packageInit))
|
|
198
|
+
return packageInit;
|
|
199
|
+
// Try as module: parts[:-1]/parts[-1].py
|
|
200
|
+
if (parts.length > 1) {
|
|
201
|
+
const modulePath = join(sourceRoot, ...parts.slice(0, -1), parts[parts.length - 1] + ".py");
|
|
202
|
+
if (existsSync(modulePath))
|
|
203
|
+
return modulePath;
|
|
204
|
+
}
|
|
205
|
+
// Try as single file: parts.py
|
|
206
|
+
const singleFile = join(sourceRoot, parts.join("/") + ".py");
|
|
207
|
+
if (existsSync(singleFile))
|
|
208
|
+
return singleFile;
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
function extractModuleDocstring(source) {
|
|
212
|
+
// First string literal in the file
|
|
213
|
+
const match = source.match(/^(?:#[^\n]*\n)*\s*(?:"""([\s\S]*?)"""|'''([\s\S]*?)''')/);
|
|
214
|
+
if (match)
|
|
215
|
+
return (match[1] ?? match[2] ?? "").trim();
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=module-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-resolver.js","sourceRoot":"","sources":["../../src/autodoc/module-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ParsedDocstring } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a Python docstring into structured sections.
|
|
4
|
+
* Supports Google, NumPy, and Sphinx styles.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseDocstring(raw: string): ParsedDocstring;
|
|
7
|
+
//# sourceMappingURL=python-docstring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-docstring.d.ts","sourceRoot":"","sources":["../../src/autodoc/python-docstring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmD,MAAM,YAAY,CAAC;AAEnG;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAoB3D"}
|