@refrakt-md/cli 0.9.0 → 0.9.1

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 (40) hide show
  1. package/dist/bin.js +3 -94
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/inspect.js +4 -4
  4. package/dist/commands/inspect.js.map +1 -1
  5. package/dist/lib/format.d.ts.map +1 -1
  6. package/dist/lib/format.js +28 -2
  7. package/dist/lib/format.js.map +1 -1
  8. package/package.json +6 -9
  9. package/dist/commands/extract.d.ts +0 -10
  10. package/dist/commands/extract.d.ts.map +0 -1
  11. package/dist/commands/extract.js +0 -161
  12. package/dist/commands/extract.js.map +0 -1
  13. package/dist/extractors/index.d.ts +0 -3
  14. package/dist/extractors/index.d.ts.map +0 -1
  15. package/dist/extractors/index.js +0 -17
  16. package/dist/extractors/index.js.map +0 -1
  17. package/dist/extractors/python-docstring.d.ts +0 -26
  18. package/dist/extractors/python-docstring.d.ts.map +0 -1
  19. package/dist/extractors/python-docstring.js +0 -396
  20. package/dist/extractors/python-docstring.js.map +0 -1
  21. package/dist/extractors/python.d.ts +0 -21
  22. package/dist/extractors/python.d.ts.map +0 -1
  23. package/dist/extractors/python.js +0 -560
  24. package/dist/extractors/python.js.map +0 -1
  25. package/dist/extractors/types.d.ts +0 -55
  26. package/dist/extractors/types.d.ts.map +0 -1
  27. package/dist/extractors/types.js +0 -2
  28. package/dist/extractors/types.js.map +0 -1
  29. package/dist/extractors/typescript.d.ts +0 -28
  30. package/dist/extractors/typescript.d.ts.map +0 -1
  31. package/dist/extractors/typescript.js +0 -566
  32. package/dist/extractors/typescript.js.map +0 -1
  33. package/dist/lib/layout-generator.d.ts +0 -8
  34. package/dist/lib/layout-generator.d.ts.map +0 -1
  35. package/dist/lib/layout-generator.js +0 -22
  36. package/dist/lib/layout-generator.js.map +0 -1
  37. package/dist/lib/symbol-generator.d.ts +0 -14
  38. package/dist/lib/symbol-generator.d.ts.map +0 -1
  39. package/dist/lib/symbol-generator.js +0 -201
  40. package/dist/lib/symbol-generator.js.map +0 -1
@@ -1,161 +0,0 @@
1
- import { resolve, join, relative, dirname } from 'node:path';
2
- import { writeFileSync, readFileSync, existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';
3
- import { loadExtractor } from '../extractors/index.js';
4
- import { generateSymbolMarkdown, toSlug } from '../lib/symbol-generator.js';
5
- import { generateLayoutMarkdown } from '../lib/layout-generator.js';
6
- function detectLanguage(inputPath) {
7
- const abs = resolve(inputPath);
8
- // Check if input is a single file
9
- if (existsSync(abs) && statSync(abs).isFile()) {
10
- if (abs.endsWith('.ts') || abs.endsWith('.tsx'))
11
- return 'typescript';
12
- if (abs.endsWith('.py'))
13
- return 'python';
14
- }
15
- // Check for tsconfig.json
16
- if (existsSync(join(abs, 'tsconfig.json')) ||
17
- existsSync(join(dirname(abs), 'tsconfig.json'))) {
18
- return 'typescript';
19
- }
20
- // Check directory contents
21
- if (existsSync(abs) && statSync(abs).isDirectory()) {
22
- try {
23
- const files = readdirSync(abs);
24
- if (files.some(f => f.endsWith('.ts') || f.endsWith('.tsx')))
25
- return 'typescript';
26
- if (files.some(f => f.endsWith('.py')))
27
- return 'python';
28
- }
29
- catch {
30
- // fall through
31
- }
32
- }
33
- return 'typescript';
34
- }
35
- function findSourceFiles(inputPath, lang) {
36
- const abs = resolve(inputPath);
37
- if (!existsSync(abs))
38
- return [];
39
- const stat = statSync(abs);
40
- if (stat.isFile())
41
- return [abs];
42
- const ext = lang === 'typescript' ? /\.tsx?$/ : /\.py$/;
43
- return walkFiles(abs, ext);
44
- }
45
- function walkFiles(dir, ext) {
46
- const files = [];
47
- const entries = readdirSync(dir);
48
- for (const entry of entries) {
49
- if (entry === 'node_modules' || entry === '__pycache__' || entry.startsWith('.'))
50
- continue;
51
- const fullPath = resolve(dir, entry);
52
- const stat = statSync(fullPath);
53
- if (stat.isDirectory()) {
54
- files.push(...walkFiles(fullPath, ext));
55
- }
56
- else if (ext.test(entry)
57
- && !entry.endsWith('.d.ts') && !entry.endsWith('.test.ts') && !entry.endsWith('.spec.ts')
58
- && !entry.startsWith('test_') && !entry.endsWith('_test.py')
59
- && entry !== 'conftest.py' && entry !== 'setup.py') {
60
- files.push(fullPath);
61
- }
62
- }
63
- return files;
64
- }
65
- export async function extractCommand(opts) {
66
- const inputPath = resolve(opts.input);
67
- const outputPath = resolve(opts.output);
68
- const lang = opts.lang ?? detectLanguage(inputPath);
69
- if (!existsSync(inputPath)) {
70
- console.error(`Error: Input path does not exist: ${inputPath}`);
71
- process.exit(1);
72
- }
73
- // Use the directory as rootDir for the extractor (even if input is a single file)
74
- const extractorRoot = statSync(inputPath).isDirectory() ? inputPath : dirname(inputPath);
75
- // Load the appropriate extractor
76
- const extractor = await loadExtractor(lang, extractorRoot, opts.sourceUrl);
77
- // Find all source files
78
- const sourceFiles = findSourceFiles(inputPath, lang);
79
- if (sourceFiles.length === 0) {
80
- console.error(`No ${lang} source files found in ${inputPath}`);
81
- process.exit(1);
82
- }
83
- // Extract symbols from all files
84
- const allSymbols = [];
85
- for (const file of sourceFiles) {
86
- const result = extractor.extractFile(file);
87
- allSymbols.push(...result.symbols);
88
- }
89
- if (allSymbols.length === 0) {
90
- console.log('No exported symbols found.');
91
- return;
92
- }
93
- console.log(`Found ${allSymbols.length} symbols in ${sourceFiles.length} files`);
94
- // Detect slug collisions and resolve them
95
- const slugMap = new Map();
96
- for (const doc of allSymbols) {
97
- const slug = toSlug(doc.name);
98
- const existing = slugMap.get(slug) ?? [];
99
- existing.push(doc);
100
- slugMap.set(slug, existing);
101
- }
102
- // Generate Markdown for each symbol
103
- const generated = new Map();
104
- for (const [slug, docs] of slugMap) {
105
- if (docs.length === 1) {
106
- const filePath = join(outputPath, `${slug}.md`);
107
- generated.set(filePath, generateSymbolMarkdown(docs[0], { lang }));
108
- }
109
- else {
110
- // Resolve collisions by appending kind
111
- for (const doc of docs) {
112
- const uniqueSlug = `${slug}-${doc.kind}`;
113
- const filePath = join(outputPath, `${uniqueSlug}.md`);
114
- generated.set(filePath, generateSymbolMarkdown(doc, { lang }));
115
- }
116
- }
117
- }
118
- // Generate _layout.md
119
- const layoutPath = join(outputPath, '_layout.md');
120
- const layoutContent = generateLayoutMarkdown(allSymbols, { title: opts.title });
121
- generated.set(layoutPath, layoutContent);
122
- // Validate mode: compare generated to existing
123
- if (opts.validate) {
124
- let stale = false;
125
- for (const [filePath, content] of generated) {
126
- if (!existsSync(filePath)) {
127
- console.error(`MISSING: ${relative(process.cwd(), filePath)}`);
128
- stale = true;
129
- }
130
- else {
131
- const existing = readFileSync(filePath, 'utf-8');
132
- if (existing !== content) {
133
- console.error(`STALE: ${relative(process.cwd(), filePath)}`);
134
- stale = true;
135
- }
136
- }
137
- }
138
- if (stale) {
139
- console.error('\nAPI reference is out of date. Run `refrakt extract` to regenerate.');
140
- process.exit(1);
141
- }
142
- else {
143
- console.log(`OK: ${generated.size} files up to date (${allSymbols.length} symbols)`);
144
- }
145
- return;
146
- }
147
- // Write mode
148
- if (!existsSync(outputPath)) {
149
- mkdirSync(outputPath, { recursive: true });
150
- }
151
- let written = 0;
152
- for (const [filePath, content] of generated) {
153
- const dir = dirname(filePath);
154
- if (!existsSync(dir))
155
- mkdirSync(dir, { recursive: true });
156
- writeFileSync(filePath, content);
157
- written++;
158
- }
159
- console.log(`Written ${written} files to ${relative(process.cwd(), outputPath)}`);
160
- }
161
- //# sourceMappingURL=extract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export type { SymbolDoc, SymbolExtractor, ExtractorResult, SymbolKind, SymbolParameter, SymbolReturn, SymbolThrows, SymbolMemberDoc, SymbolGroupDoc, } from './types.js';
2
- export declare function loadExtractor(lang: 'typescript' | 'python', rootDir: string, sourceUrl?: string): Promise<import('./types.js').SymbolExtractor>;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EACvD,eAAe,EAAE,YAAY,EAAE,YAAY,EAC3C,eAAe,EAAE,cAAc,GAC/B,MAAM,YAAY,CAAC;AAEpB,wBAAsB,aAAa,CAClC,IAAI,EAAE,YAAY,GAAG,QAAQ,EAC7B,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,YAAY,EAAE,eAAe,CAAC,CAe/C"}
@@ -1,17 +0,0 @@
1
- export async function loadExtractor(lang, rootDir, sourceUrl) {
2
- switch (lang) {
3
- case 'typescript': {
4
- const { TypeScriptExtractor } = await import('./typescript.js');
5
- return new TypeScriptExtractor(rootDir, sourceUrl);
6
- }
7
- case 'python': {
8
- const { PythonExtractor } = await import('./python.js');
9
- const extractor = new PythonExtractor(rootDir, sourceUrl);
10
- await extractor.init();
11
- return extractor;
12
- }
13
- default:
14
- throw new Error(`Unsupported language: ${lang}`);
15
- }
16
- }
17
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,IAA6B,EAC7B,OAAe,EACf,SAAkB;IAElB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAChE,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1D,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD;YACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACF,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Python docstring parser — supports Google, NumPy, and Sphinx (reST) conventions.
3
- * Auto-detects the format and extracts parameters, returns, raises, since, and deprecated.
4
- */
5
- export interface DocstringParam {
6
- type: string;
7
- description: string;
8
- }
9
- export interface DocstringInfo {
10
- description: string;
11
- params: Map<string, DocstringParam>;
12
- returns?: {
13
- type: string;
14
- description: string;
15
- };
16
- raises: Array<{
17
- type: string;
18
- description: string;
19
- }>;
20
- since?: string;
21
- deprecated?: string;
22
- }
23
- export type DocstringStyle = 'google' | 'numpy' | 'sphinx' | 'plain';
24
- export declare function detectStyle(raw: string): DocstringStyle;
25
- export declare function parseDocstring(raw: string): DocstringInfo;
26
- //# sourceMappingURL=python-docstring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"python-docstring.d.ts","sourceRoot":"","sources":["../../src/extractors/python-docstring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAQrE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAMvD;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAazD"}
@@ -1,396 +0,0 @@
1
- /**
2
- * Python docstring parser — supports Google, NumPy, and Sphinx (reST) conventions.
3
- * Auto-detects the format and extracts parameters, returns, raises, since, and deprecated.
4
- */
5
- // ── Detection ────────────────────────────────────────────────────────
6
- const GOOGLE_SECTIONS = /^(Args|Arguments|Parameters|Returns?|Raises?|Yields?|Examples?|Notes?|Attributes|Todo|References):\s*$/m;
7
- const NUMPY_SECTIONS = /^(Parameters|Returns?|Raises?|Yields?|See Also|Notes|References|Examples|Attributes)\s*\n-{3,}/m;
8
- const SPHINX_DIRECTIVES = /:(param|type|returns?|rtype|raises?|var|ivar|cvar)[\s:]/;
9
- export function detectStyle(raw) {
10
- const text = dedent(raw);
11
- if (NUMPY_SECTIONS.test(text))
12
- return 'numpy';
13
- if (SPHINX_DIRECTIVES.test(text))
14
- return 'sphinx';
15
- if (GOOGLE_SECTIONS.test(text))
16
- return 'google';
17
- return 'plain';
18
- }
19
- // ── Main entry ───────────────────────────────────────────────────────
20
- export function parseDocstring(raw) {
21
- const cleaned = dedent(raw);
22
- const style = detectStyle(cleaned);
23
- let info;
24
- switch (style) {
25
- case 'google':
26
- info = parseGoogleDocstring(cleaned);
27
- break;
28
- case 'numpy':
29
- info = parseNumpyDocstring(cleaned);
30
- break;
31
- case 'sphinx':
32
- info = parseSphinxDocstring(cleaned);
33
- break;
34
- default:
35
- info = parsePlainDocstring(cleaned);
36
- break;
37
- }
38
- // Extract reStructuredText directives from any style
39
- extractRstDirectives(cleaned, info);
40
- return info;
41
- }
42
- // ── RST directives (shared across all styles) ────────────────────────
43
- function extractRstDirectives(raw, info) {
44
- // .. versionadded:: X.Y
45
- const sinceMatch = raw.match(/\.\.\s+versionadded::\s*(.+)/);
46
- if (sinceMatch)
47
- info.since = sinceMatch[1].trim();
48
- // .. deprecated:: X.Y
49
- const deprecatedMatch = raw.match(/\.\.\s+deprecated::\s*(.+)/);
50
- if (deprecatedMatch)
51
- info.deprecated = deprecatedMatch[1].trim();
52
- }
53
- // ── Plain ────────────────────────────────────────────────────────────
54
- function parsePlainDocstring(raw) {
55
- return {
56
- description: raw.trim(),
57
- params: new Map(),
58
- raises: [],
59
- };
60
- }
61
- // ── Google style ─────────────────────────────────────────────────────
62
- function parseGoogleDocstring(raw) {
63
- const info = { description: '', params: new Map(), raises: [] };
64
- // Split into sections. Each section starts with a header like "Args:"
65
- const sectionRe = /^(Args|Arguments|Parameters|Returns?|Raises?|Yields?|Examples?|Notes?|Attributes|Todo|References):\s*$/gm;
66
- const sections = [];
67
- let match;
68
- while ((match = sectionRe.exec(raw)) !== null) {
69
- sections.push({ name: match[1], headerStart: match.index, start: match.index + match[0].length, end: raw.length });
70
- }
71
- // Set end boundaries
72
- for (let i = 0; i < sections.length - 1; i++) {
73
- sections[i].end = sections[i + 1].headerStart;
74
- }
75
- // Description is everything before the first section (minus RST directives)
76
- const descEnd = sections.length > 0 ? sections[0].headerStart : raw.length;
77
- info.description = stripRstDirectives(raw.slice(0, descEnd)).trim();
78
- for (const section of sections) {
79
- const body = raw.slice(section.start, section.end);
80
- const normalized = section.name.replace(/s$/, '').toLowerCase();
81
- if (normalized === 'arg' || normalized === 'argument' || normalized === 'parameter') {
82
- parseGoogleParams(body, info.params);
83
- }
84
- else if (normalized === 'return' || normalized === 'yield') {
85
- info.returns = parseGoogleReturns(body);
86
- }
87
- else if (normalized === 'raise') {
88
- parseGoogleRaises(body, info.raises);
89
- }
90
- }
91
- return info;
92
- }
93
- function parseGoogleParams(body, params) {
94
- // Pattern: " name (type): Description" or " name: Description"
95
- const lines = body.split('\n');
96
- let currentName = '';
97
- let currentType = '';
98
- let currentDesc = '';
99
- for (const line of lines) {
100
- // New param line: starts with indent + identifier
101
- const paramMatch = line.match(/^\s{2,}(\*{0,2}\w+)\s*(?:\(([^)]+)\))?\s*:\s*(.*)/);
102
- if (paramMatch) {
103
- if (currentName) {
104
- params.set(currentName, { type: currentType || 'Any', description: currentDesc.trim() });
105
- }
106
- currentName = paramMatch[1];
107
- currentType = paramMatch[2] ?? '';
108
- currentDesc = paramMatch[3] ?? '';
109
- }
110
- else if (currentName && line.match(/^\s{4,}/)) {
111
- // Continuation line
112
- currentDesc += ' ' + line.trim();
113
- }
114
- }
115
- if (currentName) {
116
- params.set(currentName, { type: currentType || 'Any', description: currentDesc.trim() });
117
- }
118
- }
119
- function parseGoogleReturns(body) {
120
- const lines = body.split('\n').filter(l => l.trim());
121
- if (lines.length === 0)
122
- return undefined;
123
- // Pattern: " type: Description" or just " Description"
124
- const first = lines[0].trim();
125
- const typeMatch = first.match(/^(\S+)\s*:\s*(.*)/);
126
- if (typeMatch) {
127
- const desc = [typeMatch[2], ...lines.slice(1).map(l => l.trim())].join(' ').trim();
128
- return { type: typeMatch[1], description: desc };
129
- }
130
- return { type: 'Any', description: lines.map(l => l.trim()).join(' ').trim() };
131
- }
132
- function parseGoogleRaises(body, raises) {
133
- const lines = body.split('\n');
134
- let currentType = '';
135
- let currentDesc = '';
136
- for (const line of lines) {
137
- const raiseMatch = line.match(/^\s{2,}(\w+)\s*:\s*(.*)/);
138
- if (raiseMatch) {
139
- if (currentType) {
140
- raises.push({ type: currentType, description: currentDesc.trim() });
141
- }
142
- currentType = raiseMatch[1];
143
- currentDesc = raiseMatch[2] ?? '';
144
- }
145
- else if (currentType && line.match(/^\s{4,}/)) {
146
- currentDesc += ' ' + line.trim();
147
- }
148
- }
149
- if (currentType) {
150
- raises.push({ type: currentType, description: currentDesc.trim() });
151
- }
152
- }
153
- // ── NumPy style ──────────────────────────────────────────────────────
154
- function parseNumpyDocstring(raw) {
155
- const info = { description: '', params: new Map(), raises: [] };
156
- // Split on sections delimited by underlined headers
157
- const sectionRe = /^(\w[\w\s]*?)\s*\n(-{3,})\s*$/gm;
158
- const sections = [];
159
- let match;
160
- while ((match = sectionRe.exec(raw)) !== null) {
161
- const headerStart = match.index;
162
- const bodyStart = match.index + match[0].length;
163
- sections.push({ name: match[1].trim(), start: bodyStart, end: raw.length });
164
- // Store headerStart for description extraction
165
- if (sections.length === 1) {
166
- info.description = stripRstDirectives(raw.slice(0, headerStart)).trim();
167
- }
168
- }
169
- if (sections.length === 0) {
170
- info.description = stripRstDirectives(raw).trim();
171
- return info;
172
- }
173
- // Set end boundaries
174
- for (let i = 0; i < sections.length - 1; i++) {
175
- // Find start of next section's header
176
- const nextHeaderRe = new RegExp(`^${escapeRegex(sections[i + 1].name)}\\s*\\n-{3,}`, 'm');
177
- const nextMatch = raw.slice(sections[i].start).match(nextHeaderRe);
178
- if (nextMatch) {
179
- sections[i].end = sections[i].start + nextMatch.index;
180
- }
181
- }
182
- for (const section of sections) {
183
- const body = raw.slice(section.start, section.end);
184
- const normalized = section.name.replace(/s$/, '').toLowerCase();
185
- if (normalized === 'parameter') {
186
- parseNumpyParams(body, info.params);
187
- }
188
- else if (normalized === 'return' || normalized === 'yield') {
189
- info.returns = parseNumpyReturns(body);
190
- }
191
- else if (normalized === 'raise') {
192
- parseNumpyRaises(body, info.raises);
193
- }
194
- }
195
- return info;
196
- }
197
- function parseNumpyParams(body, params) {
198
- // Pattern: "name : type\n Description" or "name : type, optional\n Description"
199
- const lines = body.split('\n');
200
- let currentName = '';
201
- let currentType = '';
202
- let currentDesc = '';
203
- for (const line of lines) {
204
- const paramMatch = line.match(/^(\*{0,2}\w+)\s*:\s*(.*)/);
205
- if (paramMatch && !line.match(/^\s/)) {
206
- if (currentName) {
207
- params.set(currentName, { type: currentType || 'Any', description: currentDesc.trim() });
208
- }
209
- currentName = paramMatch[1];
210
- currentType = paramMatch[2].replace(/,?\s*optional\s*$/, '').trim() || 'Any';
211
- currentDesc = '';
212
- }
213
- else if (currentName && line.match(/^\s{2,}/)) {
214
- currentDesc += (currentDesc ? ' ' : '') + line.trim();
215
- }
216
- }
217
- if (currentName) {
218
- params.set(currentName, { type: currentType || 'Any', description: currentDesc.trim() });
219
- }
220
- }
221
- function parseNumpyReturns(body) {
222
- const lines = body.split('\n');
223
- let type = 'Any';
224
- let desc = '';
225
- for (const line of lines) {
226
- const typeMatch = line.match(/^(\S+)\s*$/);
227
- if (typeMatch && !line.match(/^\s/) && !desc) {
228
- type = typeMatch[1];
229
- }
230
- else if (line.match(/^\s{2,}/)) {
231
- desc += (desc ? ' ' : '') + line.trim();
232
- }
233
- }
234
- if (!type && !desc)
235
- return undefined;
236
- return { type, description: desc.trim() };
237
- }
238
- function parseNumpyRaises(body, raises) {
239
- const lines = body.split('\n');
240
- let currentType = '';
241
- let currentDesc = '';
242
- for (const line of lines) {
243
- const typeMatch = line.match(/^(\w+)\s*$/);
244
- if (typeMatch && !line.match(/^\s/)) {
245
- if (currentType) {
246
- raises.push({ type: currentType, description: currentDesc.trim() });
247
- }
248
- currentType = typeMatch[1];
249
- currentDesc = '';
250
- }
251
- else if (currentType && line.match(/^\s{2,}/)) {
252
- currentDesc += (currentDesc ? ' ' : '') + line.trim();
253
- }
254
- }
255
- if (currentType) {
256
- raises.push({ type: currentType, description: currentDesc.trim() });
257
- }
258
- }
259
- // ── Sphinx/reST style ────────────────────────────────────────────────
260
- function parseSphinxDocstring(raw) {
261
- const info = { description: '', params: new Map(), raises: [] };
262
- const lines = raw.split('\n');
263
- const descLines = [];
264
- let foundDirective = false;
265
- // Temporary storage for :type: merging
266
- const paramTypes = new Map();
267
- let returnDesc = '';
268
- let returnType = '';
269
- for (let i = 0; i < lines.length; i++) {
270
- const line = lines[i];
271
- // :param name: description
272
- const paramMatch = line.match(/^\s*:param\s+(\w+)\s*:\s*(.*)/);
273
- if (paramMatch) {
274
- foundDirective = true;
275
- const name = paramMatch[1];
276
- let desc = paramMatch[2];
277
- // Collect continuation lines
278
- while (i + 1 < lines.length && lines[i + 1].match(/^\s+\S/) && !lines[i + 1].match(/^\s*:/)) {
279
- i++;
280
- desc += ' ' + lines[i].trim();
281
- }
282
- const existing = info.params.get(name);
283
- info.params.set(name, {
284
- type: existing?.type ?? 'Any',
285
- description: desc.trim(),
286
- });
287
- continue;
288
- }
289
- // :type name: type
290
- const typeMatch = line.match(/^\s*:type\s+(\w+)\s*:\s*(.*)/);
291
- if (typeMatch) {
292
- foundDirective = true;
293
- paramTypes.set(typeMatch[1], typeMatch[2].trim());
294
- continue;
295
- }
296
- // :returns: / :return: description
297
- const returnMatch = line.match(/^\s*:returns?\s*:\s*(.*)/);
298
- if (returnMatch) {
299
- foundDirective = true;
300
- returnDesc = returnMatch[1];
301
- while (i + 1 < lines.length && lines[i + 1].match(/^\s+\S/) && !lines[i + 1].match(/^\s*:/)) {
302
- i++;
303
- returnDesc += ' ' + lines[i].trim();
304
- }
305
- continue;
306
- }
307
- // :rtype: type
308
- const rtypeMatch = line.match(/^\s*:rtype\s*:\s*(.*)/);
309
- if (rtypeMatch) {
310
- foundDirective = true;
311
- returnType = rtypeMatch[1].trim();
312
- continue;
313
- }
314
- // :raises Type: description
315
- const raiseMatch = line.match(/^\s*:raises?\s+(\w+)\s*:\s*(.*)/);
316
- if (raiseMatch) {
317
- foundDirective = true;
318
- let desc = raiseMatch[2];
319
- while (i + 1 < lines.length && lines[i + 1].match(/^\s+\S/) && !lines[i + 1].match(/^\s*:/)) {
320
- i++;
321
- desc += ' ' + lines[i].trim();
322
- }
323
- info.raises.push({ type: raiseMatch[1], description: desc.trim() });
324
- continue;
325
- }
326
- // RST directives (.. versionadded, .. deprecated) are handled by extractRstDirectives
327
- if (line.match(/^\s*\.\.\s+(versionadded|deprecated)::/)) {
328
- foundDirective = true;
329
- continue;
330
- }
331
- if (!foundDirective) {
332
- descLines.push(line);
333
- }
334
- }
335
- info.description = stripRstDirectives(descLines.join('\n')).trim();
336
- // Merge :type: into :param:
337
- for (const [name, type] of paramTypes) {
338
- const existing = info.params.get(name);
339
- if (existing) {
340
- existing.type = type;
341
- }
342
- else {
343
- info.params.set(name, { type, description: '' });
344
- }
345
- }
346
- // Set returns
347
- if (returnDesc || returnType) {
348
- info.returns = { type: returnType || 'Any', description: returnDesc.trim() };
349
- }
350
- return info;
351
- }
352
- // ── Helpers ──────────────────────────────────────────────────────────
353
- function stripRstDirectives(text) {
354
- return text
355
- .replace(/\.\.\s+versionadded::\s*.+(\n\s+.*)*/g, '')
356
- .replace(/\.\.\s+deprecated::\s*.+(\n\s+.*)*/g, '')
357
- .trim();
358
- }
359
- function escapeRegex(s) {
360
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
361
- }
362
- /**
363
- * Remove common leading whitespace from all lines (Python's `inspect.cleandoc` equivalent).
364
- * The first line is treated specially: its leading whitespace is stripped independently.
365
- */
366
- function dedent(text) {
367
- const lines = text.split('\n');
368
- // First line: strip leading whitespace
369
- const firstLine = lines[0].trimStart();
370
- if (lines.length === 1)
371
- return firstLine;
372
- // Find minimum indentation of non-empty lines after the first
373
- let minIndent = Infinity;
374
- for (let i = 1; i < lines.length; i++) {
375
- const line = lines[i];
376
- if (line.trim().length === 0)
377
- continue;
378
- const indent = line.match(/^\s*/)[0].length;
379
- if (indent < minIndent)
380
- minIndent = indent;
381
- }
382
- if (!isFinite(minIndent))
383
- minIndent = 0;
384
- // Strip common indentation
385
- const dedented = [firstLine];
386
- for (let i = 1; i < lines.length; i++) {
387
- dedented.push(lines[i].slice(minIndent));
388
- }
389
- // Remove leading/trailing blank lines
390
- while (dedented.length > 0 && dedented[0].trim() === '')
391
- dedented.shift();
392
- while (dedented.length > 0 && dedented[dedented.length - 1].trim() === '')
393
- dedented.pop();
394
- return dedented.join('\n');
395
- }
396
- //# sourceMappingURL=python-docstring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"python-docstring.js","sourceRoot":"","sources":["../../src/extractors/python-docstring.ts"],"names":[],"mappings":"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"}