driftdetect-core 0.1.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/analyzers/ast-analyzer.d.ts +251 -0
- package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ast-analyzer.js +548 -0
- package/dist/analyzers/ast-analyzer.js.map +1 -0
- package/dist/analyzers/flow-analyzer.d.ts +241 -0
- package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
- package/dist/analyzers/flow-analyzer.js +1219 -0
- package/dist/analyzers/flow-analyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +18 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +19 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-analyzer.d.ts +252 -0
- package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
- package/dist/analyzers/semantic-analyzer.js +1182 -0
- package/dist/analyzers/semantic-analyzer.js.map +1 -0
- package/dist/analyzers/type-analyzer.d.ts +289 -0
- package/dist/analyzers/type-analyzer.d.ts.map +1 -0
- package/dist/analyzers/type-analyzer.js +1269 -0
- package/dist/analyzers/type-analyzer.js.map +1 -0
- package/dist/analyzers/types.d.ts +537 -0
- package/dist/analyzers/types.d.ts.map +1 -0
- package/dist/analyzers/types.js +11 -0
- package/dist/analyzers/types.js.map +1 -0
- package/dist/config/config-loader.d.ts +166 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +429 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +204 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +632 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/defaults.d.ts +8 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/exporter.d.ts +21 -0
- package/dist/manifest/exporter.d.ts.map +1 -0
- package/dist/manifest/exporter.js +339 -0
- package/dist/manifest/exporter.js.map +1 -0
- package/dist/manifest/index.d.ts +14 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +15 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/manifest-store.d.ts +111 -0
- package/dist/manifest/manifest-store.d.ts.map +1 -0
- package/dist/manifest/manifest-store.js +418 -0
- package/dist/manifest/manifest-store.js.map +1 -0
- package/dist/manifest/types.d.ts +238 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +11 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/matcher/confidence-scorer.d.ts +188 -0
- package/dist/matcher/confidence-scorer.d.ts.map +1 -0
- package/dist/matcher/confidence-scorer.js +302 -0
- package/dist/matcher/confidence-scorer.js.map +1 -0
- package/dist/matcher/index.d.ts +24 -0
- package/dist/matcher/index.d.ts.map +1 -0
- package/dist/matcher/index.js +26 -0
- package/dist/matcher/index.js.map +1 -0
- package/dist/matcher/outlier-detector.d.ts +252 -0
- package/dist/matcher/outlier-detector.d.ts.map +1 -0
- package/dist/matcher/outlier-detector.js +544 -0
- package/dist/matcher/outlier-detector.js.map +1 -0
- package/dist/matcher/pattern-matcher.d.ts +169 -0
- package/dist/matcher/pattern-matcher.d.ts.map +1 -0
- package/dist/matcher/pattern-matcher.js +692 -0
- package/dist/matcher/pattern-matcher.js.map +1 -0
- package/dist/matcher/types.d.ts +476 -0
- package/dist/matcher/types.d.ts.map +1 -0
- package/dist/matcher/types.js +36 -0
- package/dist/matcher/types.js.map +1 -0
- package/dist/parsers/base-parser.d.ts +282 -0
- package/dist/parsers/base-parser.d.ts.map +1 -0
- package/dist/parsers/base-parser.js +421 -0
- package/dist/parsers/base-parser.js.map +1 -0
- package/dist/parsers/css-parser.d.ts +225 -0
- package/dist/parsers/css-parser.d.ts.map +1 -0
- package/dist/parsers/css-parser.js +477 -0
- package/dist/parsers/css-parser.js.map +1 -0
- package/dist/parsers/index.d.ts +15 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +15 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/json-parser.d.ts +219 -0
- package/dist/parsers/json-parser.d.ts.map +1 -0
- package/dist/parsers/json-parser.js +602 -0
- package/dist/parsers/json-parser.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +276 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +731 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/parsers/parser-manager.d.ts +294 -0
- package/dist/parsers/parser-manager.d.ts.map +1 -0
- package/dist/parsers/parser-manager.js +738 -0
- package/dist/parsers/parser-manager.js.map +1 -0
- package/dist/parsers/python-parser.d.ts +204 -0
- package/dist/parsers/python-parser.d.ts.map +1 -0
- package/dist/parsers/python-parser.js +517 -0
- package/dist/parsers/python-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +43 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +7 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +264 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +658 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/rules/evaluator.d.ts +305 -0
- package/dist/rules/evaluator.d.ts.map +1 -0
- package/dist/rules/evaluator.js +579 -0
- package/dist/rules/evaluator.js.map +1 -0
- package/dist/rules/index.d.ts +13 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/quick-fix-generator.d.ts +334 -0
- package/dist/rules/quick-fix-generator.d.ts.map +1 -0
- package/dist/rules/quick-fix-generator.js +1075 -0
- package/dist/rules/quick-fix-generator.js.map +1 -0
- package/dist/rules/rule-engine.d.ts +241 -0
- package/dist/rules/rule-engine.d.ts.map +1 -0
- package/dist/rules/rule-engine.js +585 -0
- package/dist/rules/rule-engine.js.map +1 -0
- package/dist/rules/severity-manager.d.ts +394 -0
- package/dist/rules/severity-manager.d.ts.map +1 -0
- package/dist/rules/severity-manager.js +619 -0
- package/dist/rules/severity-manager.js.map +1 -0
- package/dist/rules/types.d.ts +370 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +133 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/variant-manager.d.ts +388 -0
- package/dist/rules/variant-manager.d.ts.map +1 -0
- package/dist/rules/variant-manager.js +777 -0
- package/dist/rules/variant-manager.js.map +1 -0
- package/dist/scanner/change-detector.d.ts +164 -0
- package/dist/scanner/change-detector.d.ts.map +1 -0
- package/dist/scanner/change-detector.js +263 -0
- package/dist/scanner/change-detector.js.map +1 -0
- package/dist/scanner/dependency-graph.d.ts +270 -0
- package/dist/scanner/dependency-graph.d.ts.map +1 -0
- package/dist/scanner/dependency-graph.js +436 -0
- package/dist/scanner/dependency-graph.js.map +1 -0
- package/dist/scanner/file-walker.d.ts +127 -0
- package/dist/scanner/file-walker.d.ts.map +1 -0
- package/dist/scanner/file-walker.js +526 -0
- package/dist/scanner/file-walker.js.map +1 -0
- package/dist/scanner/index.d.ts +12 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +12 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/types.d.ts +218 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +10 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scanner/worker-pool.d.ts +317 -0
- package/dist/scanner/worker-pool.d.ts.map +1 -0
- package/dist/scanner/worker-pool.js +571 -0
- package/dist/scanner/worker-pool.js.map +1 -0
- package/dist/store/cache-manager.d.ts +179 -0
- package/dist/store/cache-manager.d.ts.map +1 -0
- package/dist/store/cache-manager.js +391 -0
- package/dist/store/cache-manager.js.map +1 -0
- package/dist/store/history-store.d.ts +314 -0
- package/dist/store/history-store.d.ts.map +1 -0
- package/dist/store/history-store.js +707 -0
- package/dist/store/history-store.js.map +1 -0
- package/dist/store/index.d.ts +20 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +26 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/lock-file-manager.d.ts +202 -0
- package/dist/store/lock-file-manager.d.ts.map +1 -0
- package/dist/store/lock-file-manager.js +475 -0
- package/dist/store/lock-file-manager.js.map +1 -0
- package/dist/store/pattern-store.d.ts +289 -0
- package/dist/store/pattern-store.d.ts.map +1 -0
- package/dist/store/pattern-store.js +936 -0
- package/dist/store/pattern-store.js.map +1 -0
- package/dist/store/schema-validator.d.ts +159 -0
- package/dist/store/schema-validator.d.ts.map +1 -0
- package/dist/store/schema-validator.js +1096 -0
- package/dist/store/schema-validator.js.map +1 -0
- package/dist/store/types.d.ts +585 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +82 -0
- package/dist/store/types.js.map +1 -0
- package/dist/types/analysis.d.ts +19 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +5 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/common.d.ts +7 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/patterns.d.ts +40 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +7 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/violations.d.ts +7 -0
- package/dist/types/violations.d.ts.map +1 -0
- package/dist/types/violations.js +7 -0
- package/dist/types/violations.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Parser - Python parsing for AST extraction
|
|
3
|
+
*
|
|
4
|
+
* Extracts imports, classes, functions, and decorators from
|
|
5
|
+
* Python files using regex-based parsing.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 3.2
|
|
8
|
+
*/
|
|
9
|
+
import { BaseParser } from './base-parser.js';
|
|
10
|
+
/**
|
|
11
|
+
* Python parser using regex-based parsing.
|
|
12
|
+
*
|
|
13
|
+
* Provides AST parsing and extraction of imports, classes,
|
|
14
|
+
* functions, and decorators from Python source files.
|
|
15
|
+
*
|
|
16
|
+
* @requirements 3.2 - Support Python parsing
|
|
17
|
+
* @requirements 3.3 - Graceful degradation on parse errors
|
|
18
|
+
*/
|
|
19
|
+
export class PythonParser extends BaseParser {
|
|
20
|
+
language = 'python';
|
|
21
|
+
extensions = ['.py', '.pyw', '.pyi'];
|
|
22
|
+
/**
|
|
23
|
+
* Parse Python source code into an AST.
|
|
24
|
+
*
|
|
25
|
+
* @param source - The source code to parse
|
|
26
|
+
* @param filePath - Optional file path for error reporting
|
|
27
|
+
* @returns PythonParseResult containing the AST and extracted information
|
|
28
|
+
*
|
|
29
|
+
* @requirements 3.2, 3.3
|
|
30
|
+
*/
|
|
31
|
+
parse(source, _filePath) {
|
|
32
|
+
try {
|
|
33
|
+
const lines = source.split('\n');
|
|
34
|
+
const rootChildren = [];
|
|
35
|
+
// Extract semantic information
|
|
36
|
+
const imports = this.extractImports(source, lines);
|
|
37
|
+
const decorators = this.extractDecorators(source, lines);
|
|
38
|
+
const classes = this.extractClasses(source, lines);
|
|
39
|
+
const functions = this.extractFunctions(source, lines);
|
|
40
|
+
// Build AST nodes for imports
|
|
41
|
+
for (const imp of imports) {
|
|
42
|
+
const importNode = this.createImportNode(imp, source);
|
|
43
|
+
rootChildren.push(importNode);
|
|
44
|
+
}
|
|
45
|
+
// Build AST nodes for classes
|
|
46
|
+
for (const cls of classes) {
|
|
47
|
+
const classNode = this.createClassNode(cls, source);
|
|
48
|
+
rootChildren.push(classNode);
|
|
49
|
+
}
|
|
50
|
+
// Build AST nodes for functions
|
|
51
|
+
for (const func of functions) {
|
|
52
|
+
const funcNode = this.createFunctionNode(func, source);
|
|
53
|
+
rootChildren.push(funcNode);
|
|
54
|
+
}
|
|
55
|
+
// Create root node
|
|
56
|
+
const endPosition = lines.length > 0
|
|
57
|
+
? { row: lines.length - 1, column: lines[lines.length - 1]?.length ?? 0 }
|
|
58
|
+
: { row: 0, column: 0 };
|
|
59
|
+
const rootNode = this.createNode('Module', source, { row: 0, column: 0 }, endPosition, rootChildren);
|
|
60
|
+
const ast = this.createAST(rootNode, source);
|
|
61
|
+
return {
|
|
62
|
+
...this.createSuccessResult(ast),
|
|
63
|
+
imports,
|
|
64
|
+
classes,
|
|
65
|
+
functions,
|
|
66
|
+
decorators,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown parse error';
|
|
71
|
+
return {
|
|
72
|
+
...this.createFailureResult([this.createError(errorMessage, { row: 0, column: 0 })]),
|
|
73
|
+
imports: [],
|
|
74
|
+
classes: [],
|
|
75
|
+
functions: [],
|
|
76
|
+
decorators: [],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Query the AST for nodes matching a pattern.
|
|
82
|
+
*
|
|
83
|
+
* Supports querying by node type (e.g., 'ImportStatement', 'ClassDef', 'FunctionDef').
|
|
84
|
+
*
|
|
85
|
+
* @param ast - The AST to query
|
|
86
|
+
* @param pattern - The node type to search for
|
|
87
|
+
* @returns Array of matching AST nodes
|
|
88
|
+
*
|
|
89
|
+
* @requirements 3.5
|
|
90
|
+
*/
|
|
91
|
+
query(ast, pattern) {
|
|
92
|
+
return this.findNodesByType(ast, pattern);
|
|
93
|
+
}
|
|
94
|
+
// ============================================
|
|
95
|
+
// Import Extraction
|
|
96
|
+
// ============================================
|
|
97
|
+
/**
|
|
98
|
+
* Extract all import statements from Python source.
|
|
99
|
+
*/
|
|
100
|
+
extractImports(source, lines) {
|
|
101
|
+
const imports = [];
|
|
102
|
+
// Match 'import x' and 'import x as y' statements
|
|
103
|
+
// Use [ \t]* instead of \s* to avoid matching newlines as indentation
|
|
104
|
+
const importRegex = /^([ \t]*)import\s+(.+)$/gm;
|
|
105
|
+
let match;
|
|
106
|
+
while ((match = importRegex.exec(source)) !== null) {
|
|
107
|
+
const lineStart = this.getLineNumber(source, match.index);
|
|
108
|
+
const indent = match[1]?.length ?? 0;
|
|
109
|
+
const importPart = match[2]?.trim() ?? '';
|
|
110
|
+
// Parse the import names
|
|
111
|
+
const names = this.parseImportNames(importPart);
|
|
112
|
+
for (const nameInfo of names) {
|
|
113
|
+
imports.push({
|
|
114
|
+
module: nameInfo.name,
|
|
115
|
+
names: [{ name: nameInfo.name, alias: nameInfo.alias }],
|
|
116
|
+
isFromImport: false,
|
|
117
|
+
level: 0,
|
|
118
|
+
startPosition: { row: lineStart, column: indent },
|
|
119
|
+
endPosition: { row: lineStart, column: indent + (match[0]?.length ?? 0) },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Match 'from x import y' statements (including multi-line)
|
|
124
|
+
// Use [ \t]* instead of \s* to avoid matching newlines as indentation
|
|
125
|
+
const fromImportRegex = /^([ \t]*)from\s+(\.*)(\S*)\s+import\s+(.+)$/gm;
|
|
126
|
+
while ((match = fromImportRegex.exec(source)) !== null) {
|
|
127
|
+
const lineStart = this.getLineNumber(source, match.index);
|
|
128
|
+
const indent = match[1]?.length ?? 0;
|
|
129
|
+
const dots = match[2] ?? '';
|
|
130
|
+
const module = match[3] ?? '';
|
|
131
|
+
let importPart = match[4]?.trim() ?? '';
|
|
132
|
+
// Handle parenthesized imports
|
|
133
|
+
if (importPart.startsWith('(')) {
|
|
134
|
+
const endParen = this.findMatchingParen(source, match.index + (match[0]?.indexOf('(') ?? 0));
|
|
135
|
+
if (endParen > 0) {
|
|
136
|
+
importPart = source.slice(match.index + (match[0]?.indexOf('(') ?? 0) + 1, endParen).trim();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Parse the imported names
|
|
140
|
+
const names = this.parseImportNames(importPart);
|
|
141
|
+
const endLine = this.getLineNumber(source, match.index + (match[0]?.length ?? 0));
|
|
142
|
+
imports.push({
|
|
143
|
+
module: module,
|
|
144
|
+
names,
|
|
145
|
+
isFromImport: true,
|
|
146
|
+
level: dots.length,
|
|
147
|
+
startPosition: { row: lineStart, column: indent },
|
|
148
|
+
endPosition: { row: endLine, column: (lines[endLine]?.length ?? 0) },
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return imports;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Parse comma-separated import names with optional aliases.
|
|
155
|
+
*/
|
|
156
|
+
parseImportNames(importPart) {
|
|
157
|
+
const names = [];
|
|
158
|
+
// Remove parentheses and split by comma
|
|
159
|
+
const cleanPart = importPart.replace(/[()]/g, '').trim();
|
|
160
|
+
const parts = cleanPart.split(',');
|
|
161
|
+
for (const part of parts) {
|
|
162
|
+
const trimmed = part.trim();
|
|
163
|
+
if (!trimmed || trimmed === '\\')
|
|
164
|
+
continue;
|
|
165
|
+
// Check for 'as' alias
|
|
166
|
+
const asMatch = trimmed.match(/^(\S+)\s+as\s+(\S+)$/);
|
|
167
|
+
if (asMatch) {
|
|
168
|
+
names.push({
|
|
169
|
+
name: asMatch[1] ?? '',
|
|
170
|
+
alias: asMatch[2] ?? null,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// Handle line continuation
|
|
175
|
+
const name = trimmed.replace(/\\$/, '').trim();
|
|
176
|
+
if (name) {
|
|
177
|
+
names.push({ name, alias: null });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return names;
|
|
182
|
+
}
|
|
183
|
+
// ============================================
|
|
184
|
+
// Decorator Extraction
|
|
185
|
+
// ============================================
|
|
186
|
+
/**
|
|
187
|
+
* Extract all decorators from Python source.
|
|
188
|
+
*/
|
|
189
|
+
extractDecorators(source, _lines) {
|
|
190
|
+
const decorators = [];
|
|
191
|
+
// Use [ \t]* instead of \s* to avoid matching newlines as indentation
|
|
192
|
+
const decoratorRegex = /^([ \t]*)@(\w+(?:\.\w+)*)(\([^)]*\))?/gm;
|
|
193
|
+
let match;
|
|
194
|
+
while ((match = decoratorRegex.exec(source)) !== null) {
|
|
195
|
+
const lineStart = this.getLineNumber(source, match.index);
|
|
196
|
+
const indent = match[1]?.length ?? 0;
|
|
197
|
+
const name = match[2] ?? '';
|
|
198
|
+
const args = match[3] ? match[3].slice(1, -1) : null;
|
|
199
|
+
decorators.push({
|
|
200
|
+
name,
|
|
201
|
+
arguments: args,
|
|
202
|
+
startPosition: { row: lineStart, column: indent },
|
|
203
|
+
endPosition: { row: lineStart, column: indent + (match[0]?.length ?? 0) },
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return decorators;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get decorators that appear immediately before a given line.
|
|
210
|
+
*/
|
|
211
|
+
getDecoratorsForLine(_source, lines, targetLine) {
|
|
212
|
+
const decorators = [];
|
|
213
|
+
let line = targetLine - 1;
|
|
214
|
+
while (line >= 0) {
|
|
215
|
+
const lineContent = lines[line]?.trim() ?? '';
|
|
216
|
+
if (lineContent.startsWith('@')) {
|
|
217
|
+
// Extract decorator name
|
|
218
|
+
const match = lineContent.match(/^@(\w+(?:\.\w+)*)(?:\(.*\))?$/);
|
|
219
|
+
if (match) {
|
|
220
|
+
decorators.unshift(match[1] ?? '');
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
decorators.unshift(lineContent.slice(1));
|
|
224
|
+
}
|
|
225
|
+
line--;
|
|
226
|
+
}
|
|
227
|
+
else if (lineContent === '' || lineContent.startsWith('#')) {
|
|
228
|
+
// Skip empty lines and comments
|
|
229
|
+
line--;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return decorators;
|
|
236
|
+
}
|
|
237
|
+
// ============================================
|
|
238
|
+
// Class Extraction
|
|
239
|
+
// ============================================
|
|
240
|
+
/**
|
|
241
|
+
* Extract all class definitions from Python source.
|
|
242
|
+
*/
|
|
243
|
+
extractClasses(source, lines) {
|
|
244
|
+
const classes = [];
|
|
245
|
+
// Use [ \t]* instead of \s* to avoid matching newlines as indentation
|
|
246
|
+
const classRegex = /^([ \t]*)class\s+(\w+)(?:\s*\(([^)]*)\))?\s*:/gm;
|
|
247
|
+
let match;
|
|
248
|
+
while ((match = classRegex.exec(source)) !== null) {
|
|
249
|
+
const lineStart = this.getLineNumber(source, match.index);
|
|
250
|
+
const indent = match[1]?.length ?? 0;
|
|
251
|
+
const name = match[2] ?? '';
|
|
252
|
+
const basesStr = match[3] ?? '';
|
|
253
|
+
// Parse base classes
|
|
254
|
+
const bases = basesStr
|
|
255
|
+
.split(',')
|
|
256
|
+
.map((b) => b.trim())
|
|
257
|
+
.filter((b) => b.length > 0);
|
|
258
|
+
// Get decorators
|
|
259
|
+
const decorators = this.getDecoratorsForLine(source, lines, lineStart);
|
|
260
|
+
const isDataclass = decorators.some((d) => d === 'dataclass' || d === 'dataclasses.dataclass');
|
|
261
|
+
// Find class body end
|
|
262
|
+
const classEnd = this.findBlockEnd(lines, lineStart, indent);
|
|
263
|
+
// Extract methods and attributes
|
|
264
|
+
const { methods, attributes } = this.extractClassMembers(lines, lineStart + 1, classEnd, indent);
|
|
265
|
+
classes.push({
|
|
266
|
+
name,
|
|
267
|
+
bases,
|
|
268
|
+
decorators,
|
|
269
|
+
methods,
|
|
270
|
+
attributes,
|
|
271
|
+
isDataclass,
|
|
272
|
+
startPosition: { row: lineStart, column: indent },
|
|
273
|
+
endPosition: { row: classEnd, column: lines[classEnd]?.length ?? 0 },
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
return classes;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Extract methods and attributes from a class body.
|
|
280
|
+
*/
|
|
281
|
+
extractClassMembers(lines, startLine, endLine, classIndent) {
|
|
282
|
+
const methods = [];
|
|
283
|
+
const attributes = [];
|
|
284
|
+
const methodIndent = classIndent + 4; // Standard Python indentation
|
|
285
|
+
for (let i = startLine; i <= endLine && i < lines.length; i++) {
|
|
286
|
+
const line = lines[i] ?? '';
|
|
287
|
+
const trimmed = line.trim();
|
|
288
|
+
const lineIndent = line.length - line.trimStart().length;
|
|
289
|
+
// Skip if not at method level
|
|
290
|
+
if (lineIndent < methodIndent && trimmed !== '')
|
|
291
|
+
continue;
|
|
292
|
+
// Check for method definition
|
|
293
|
+
const methodMatch = trimmed.match(/^(?:async\s+)?def\s+(\w+)\s*\(/);
|
|
294
|
+
if (methodMatch && lineIndent === methodIndent) {
|
|
295
|
+
methods.push(methodMatch[1] ?? '');
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
// Check for class attribute (at class level, not in method)
|
|
299
|
+
const attrMatch = trimmed.match(/^(\w+)\s*(?::\s*\S+)?\s*=/);
|
|
300
|
+
if (attrMatch && lineIndent === methodIndent) {
|
|
301
|
+
attributes.push(attrMatch[1] ?? '');
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return { methods, attributes };
|
|
305
|
+
}
|
|
306
|
+
// ============================================
|
|
307
|
+
// Function Extraction
|
|
308
|
+
// ============================================
|
|
309
|
+
/**
|
|
310
|
+
* Extract all module-level function definitions from Python source.
|
|
311
|
+
*/
|
|
312
|
+
extractFunctions(source, lines) {
|
|
313
|
+
const functions = [];
|
|
314
|
+
// Use [ \t]* instead of \s* to avoid matching newlines as indentation
|
|
315
|
+
const funcRegex = /^([ \t]*)(async\s+)?def\s+(\w+)\s*\(([^)]*)\)(?:\s*->\s*([^:]+))?\s*:/gm;
|
|
316
|
+
// Collect all matches first
|
|
317
|
+
const allMatches = [];
|
|
318
|
+
for (const match of source.matchAll(funcRegex)) {
|
|
319
|
+
allMatches.push(match);
|
|
320
|
+
}
|
|
321
|
+
for (const match of allMatches) {
|
|
322
|
+
const lineStart = this.getLineNumber(source, match.index ?? 0);
|
|
323
|
+
const indent = match[1]?.length ?? 0;
|
|
324
|
+
const name = match[3] ?? '';
|
|
325
|
+
// Only extract module-level functions (indent 0)
|
|
326
|
+
// Class methods are extracted separately
|
|
327
|
+
if (indent !== 0)
|
|
328
|
+
continue;
|
|
329
|
+
const isAsync = !!match[2];
|
|
330
|
+
const paramsStr = match[4] ?? '';
|
|
331
|
+
const returnType = match[5]?.trim() ?? null;
|
|
332
|
+
// Parse parameters
|
|
333
|
+
const parameters = this.parseParameters(paramsStr);
|
|
334
|
+
// Get decorators
|
|
335
|
+
const decorators = this.getDecoratorsForLine(source, lines, lineStart);
|
|
336
|
+
// Find function body end
|
|
337
|
+
const funcEnd = this.findBlockEnd(lines, lineStart, indent);
|
|
338
|
+
// Check if function is a generator
|
|
339
|
+
const isGenerator = this.checkIsGenerator(lines, lineStart + 1, funcEnd);
|
|
340
|
+
functions.push({
|
|
341
|
+
name,
|
|
342
|
+
decorators,
|
|
343
|
+
parameters,
|
|
344
|
+
isAsync,
|
|
345
|
+
isGenerator,
|
|
346
|
+
returnType,
|
|
347
|
+
startPosition: { row: lineStart, column: indent },
|
|
348
|
+
endPosition: { row: funcEnd, column: lines[funcEnd]?.length ?? 0 },
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
return functions;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Parse function parameters.
|
|
355
|
+
*/
|
|
356
|
+
parseParameters(paramsStr) {
|
|
357
|
+
const params = [];
|
|
358
|
+
const parts = paramsStr.split(',');
|
|
359
|
+
for (const part of parts) {
|
|
360
|
+
const trimmed = part.trim();
|
|
361
|
+
if (!trimmed)
|
|
362
|
+
continue;
|
|
363
|
+
// Extract parameter name (before : or =)
|
|
364
|
+
const nameMatch = trimmed.match(/^(\*{0,2}\w+)/);
|
|
365
|
+
if (nameMatch) {
|
|
366
|
+
params.push(nameMatch[1] ?? '');
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return params;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Check if a function body contains yield statements (is a generator).
|
|
373
|
+
*/
|
|
374
|
+
checkIsGenerator(lines, startLine, endLine) {
|
|
375
|
+
for (let i = startLine; i <= endLine && i < lines.length; i++) {
|
|
376
|
+
const line = lines[i]?.trim() ?? '';
|
|
377
|
+
if (line.match(/\byield\b/)) {
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
// ============================================
|
|
384
|
+
// AST Node Creation
|
|
385
|
+
// ============================================
|
|
386
|
+
/**
|
|
387
|
+
* Create an AST node for an import statement.
|
|
388
|
+
*/
|
|
389
|
+
createImportNode(imp, source) {
|
|
390
|
+
const nodeType = imp.isFromImport ? 'ImportFrom' : 'Import';
|
|
391
|
+
const text = this.getTextForRange(source, imp.startPosition, imp.endPosition);
|
|
392
|
+
const children = [];
|
|
393
|
+
// Add module node
|
|
394
|
+
if (imp.module) {
|
|
395
|
+
children.push(this.createNode('module', imp.module, imp.startPosition, imp.endPosition, []));
|
|
396
|
+
}
|
|
397
|
+
// Add name nodes
|
|
398
|
+
for (const name of imp.names) {
|
|
399
|
+
const nameText = name.alias ? `${name.name} as ${name.alias}` : name.name;
|
|
400
|
+
children.push(this.createNode('alias', nameText, imp.startPosition, imp.endPosition, []));
|
|
401
|
+
}
|
|
402
|
+
return this.createNode(nodeType, text, imp.startPosition, imp.endPosition, children);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Create an AST node for a class definition.
|
|
406
|
+
*/
|
|
407
|
+
createClassNode(cls, source) {
|
|
408
|
+
const text = this.getTextForRange(source, cls.startPosition, cls.endPosition);
|
|
409
|
+
const children = [];
|
|
410
|
+
// Add name node
|
|
411
|
+
children.push(this.createNode('name', cls.name, cls.startPosition, cls.startPosition, []));
|
|
412
|
+
// Add base class nodes
|
|
413
|
+
for (const base of cls.bases) {
|
|
414
|
+
children.push(this.createNode('base', base, cls.startPosition, cls.startPosition, []));
|
|
415
|
+
}
|
|
416
|
+
// Add decorator nodes
|
|
417
|
+
for (const dec of cls.decorators) {
|
|
418
|
+
children.push(this.createNode('decorator', dec, cls.startPosition, cls.startPosition, []));
|
|
419
|
+
}
|
|
420
|
+
// Add method nodes
|
|
421
|
+
for (const method of cls.methods) {
|
|
422
|
+
children.push(this.createNode('FunctionDef', method, cls.startPosition, cls.endPosition, []));
|
|
423
|
+
}
|
|
424
|
+
return this.createNode('ClassDef', text, cls.startPosition, cls.endPosition, children);
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Create an AST node for a function definition.
|
|
428
|
+
*/
|
|
429
|
+
createFunctionNode(func, source) {
|
|
430
|
+
const text = this.getTextForRange(source, func.startPosition, func.endPosition);
|
|
431
|
+
const nodeType = func.isAsync ? 'AsyncFunctionDef' : 'FunctionDef';
|
|
432
|
+
const children = [];
|
|
433
|
+
// Add name node
|
|
434
|
+
children.push(this.createNode('name', func.name, func.startPosition, func.startPosition, []));
|
|
435
|
+
// Add parameter nodes
|
|
436
|
+
for (const param of func.parameters) {
|
|
437
|
+
children.push(this.createNode('arg', param, func.startPosition, func.startPosition, []));
|
|
438
|
+
}
|
|
439
|
+
// Add decorator nodes
|
|
440
|
+
for (const dec of func.decorators) {
|
|
441
|
+
children.push(this.createNode('decorator', dec, func.startPosition, func.startPosition, []));
|
|
442
|
+
}
|
|
443
|
+
// Add return type node if present
|
|
444
|
+
if (func.returnType) {
|
|
445
|
+
children.push(this.createNode('returns', func.returnType, func.startPosition, func.startPosition, []));
|
|
446
|
+
}
|
|
447
|
+
return this.createNode(nodeType, text, func.startPosition, func.endPosition, children);
|
|
448
|
+
}
|
|
449
|
+
// ============================================
|
|
450
|
+
// Utility Methods
|
|
451
|
+
// ============================================
|
|
452
|
+
/**
|
|
453
|
+
* Get the line number for a character offset.
|
|
454
|
+
*/
|
|
455
|
+
getLineNumber(source, offset) {
|
|
456
|
+
let line = 0;
|
|
457
|
+
for (let i = 0; i < offset && i < source.length; i++) {
|
|
458
|
+
if (source[i] === '\n') {
|
|
459
|
+
line++;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return line;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Find the end of an indented block.
|
|
466
|
+
*/
|
|
467
|
+
findBlockEnd(lines, startLine, blockIndent) {
|
|
468
|
+
let endLine = startLine;
|
|
469
|
+
for (let i = startLine + 1; i < lines.length; i++) {
|
|
470
|
+
const line = lines[i] ?? '';
|
|
471
|
+
const trimmed = line.trim();
|
|
472
|
+
// Skip empty lines and comments
|
|
473
|
+
if (trimmed === '' || trimmed.startsWith('#')) {
|
|
474
|
+
endLine = i;
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
// Check indentation
|
|
478
|
+
const lineIndent = line.length - line.trimStart().length;
|
|
479
|
+
if (lineIndent <= blockIndent) {
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
endLine = i;
|
|
483
|
+
}
|
|
484
|
+
return endLine;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Find the matching closing parenthesis.
|
|
488
|
+
*/
|
|
489
|
+
findMatchingParen(source, openIndex) {
|
|
490
|
+
let depth = 1;
|
|
491
|
+
for (let i = openIndex + 1; i < source.length; i++) {
|
|
492
|
+
if (source[i] === '(')
|
|
493
|
+
depth++;
|
|
494
|
+
else if (source[i] === ')') {
|
|
495
|
+
depth--;
|
|
496
|
+
if (depth === 0)
|
|
497
|
+
return i;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return -1;
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Get text between two positions.
|
|
504
|
+
*/
|
|
505
|
+
getTextForRange(source, start, end) {
|
|
506
|
+
const lines = source.split('\n');
|
|
507
|
+
const result = [];
|
|
508
|
+
for (let row = start.row; row <= end.row && row < lines.length; row++) {
|
|
509
|
+
const line = lines[row] ?? '';
|
|
510
|
+
const startCol = row === start.row ? start.column : 0;
|
|
511
|
+
const endCol = row === end.row ? end.column : line.length;
|
|
512
|
+
result.push(line.slice(startCol, endCol));
|
|
513
|
+
}
|
|
514
|
+
return result.join('\n');
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
//# sourceMappingURL=python-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-parser.js","sourceRoot":"","sources":["../../src/parsers/python-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser type definitions
|
|
3
|
+
*
|
|
4
|
+
* @requirements 3.1, 3.5
|
|
5
|
+
*/
|
|
6
|
+
export type Language = 'typescript' | 'javascript' | 'python' | 'css' | 'scss' | 'json' | 'yaml' | 'markdown';
|
|
7
|
+
export interface ParseResult {
|
|
8
|
+
/** The parsed AST */
|
|
9
|
+
ast: AST | null;
|
|
10
|
+
/** Language of the parsed file */
|
|
11
|
+
language: Language;
|
|
12
|
+
/** Parse errors if any */
|
|
13
|
+
errors: ParseError[];
|
|
14
|
+
/** Whether parsing was successful */
|
|
15
|
+
success: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface AST {
|
|
18
|
+
/** Root node of the AST */
|
|
19
|
+
rootNode: ASTNode;
|
|
20
|
+
/** Source text */
|
|
21
|
+
text: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ASTNode {
|
|
24
|
+
/** Node type */
|
|
25
|
+
type: string;
|
|
26
|
+
/** Start position */
|
|
27
|
+
startPosition: Position;
|
|
28
|
+
/** End position */
|
|
29
|
+
endPosition: Position;
|
|
30
|
+
/** Child nodes */
|
|
31
|
+
children: ASTNode[];
|
|
32
|
+
/** Node text */
|
|
33
|
+
text: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Position {
|
|
36
|
+
row: number;
|
|
37
|
+
column: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ParseError {
|
|
40
|
+
message: string;
|
|
41
|
+
position: Position;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parsers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,GAAG;IAClB,2BAA2B;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,aAAa,EAAE,QAAQ,CAAC;IACxB,mBAAmB;IACnB,WAAW,EAAE,QAAQ,CAAC;IACtB,kBAAkB;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parsers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|