erosolar-cli 2.1.204 â 2.1.205
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/shell/interactiveShell.d.ts +0 -4
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +2 -155
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +6 -3
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/package.json +1 -1
- package/dist/tools/softwareEngineeringTools.d.ts +0 -7
- package/dist/tools/softwareEngineeringTools.d.ts.map +0 -1
- package/dist/tools/softwareEngineeringTools.js +0 -338
- package/dist/tools/softwareEngineeringTools.js.map +0 -1
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck - Temporarily disabled type checking for this file (work in progress)
|
|
2
|
-
import { readFileSync, existsSync, statSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
/**
|
|
5
|
-
* Software Engineering Tools for enhanced code quality and development experience
|
|
6
|
-
* Provides real-time code analysis, complexity monitoring, and quality metrics
|
|
7
|
-
*/
|
|
8
|
-
export function createSoftwareEngineeringTools(workingDir) {
|
|
9
|
-
return [
|
|
10
|
-
{
|
|
11
|
-
name: 'analyze_code_quality',
|
|
12
|
-
description: 'Analyze code quality metrics for a specific file including complexity, maintainability, and potential issues.',
|
|
13
|
-
parameters: {
|
|
14
|
-
type: 'object',
|
|
15
|
-
properties: {
|
|
16
|
-
path: {
|
|
17
|
-
type: 'string',
|
|
18
|
-
description: 'The file path to analyze (relative to working directory or absolute)',
|
|
19
|
-
minLength: 1,
|
|
20
|
-
},
|
|
21
|
-
include_suggestions: {
|
|
22
|
-
type: 'boolean',
|
|
23
|
-
description: 'Include specific improvement suggestions (default: true)',
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
required: ['path'],
|
|
27
|
-
additionalProperties: false,
|
|
28
|
-
},
|
|
29
|
-
handler: async (args) => {
|
|
30
|
-
const filePath = resolveFilePath(workingDir, args['path']);
|
|
31
|
-
const includeSuggestions = args['include_suggestions'] ?? true;
|
|
32
|
-
if (!existsSync(filePath)) {
|
|
33
|
-
return `Error: File not found: ${filePath}`;
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
37
|
-
const analysis = analyzeFileQuality(content, filePath);
|
|
38
|
-
let result = `đ Code Quality Analysis for ${filePath}\n\n`;
|
|
39
|
-
result += `đ Complexity Metrics:\n`;
|
|
40
|
-
result += ` âĸ Cyclomatic Complexity: ${analysis.cyclomaticComplexity}\n`;
|
|
41
|
-
result += ` âĸ Cognitive Complexity: ${analysis.cognitiveComplexity}\n`;
|
|
42
|
-
result += ` âĸ Maintainability Index: ${analysis.maintainabilityIndex}/100\n`;
|
|
43
|
-
result += ` âĸ Lines of Code: ${analysis.linesOfCode}\n`;
|
|
44
|
-
result += ` âĸ Functions: ${analysis.functionCount}\n\n`;
|
|
45
|
-
if (analysis.issues.length > 0) {
|
|
46
|
-
result += `â ī¸ Quality Issues:\n`;
|
|
47
|
-
analysis.issues.forEach(issue => {
|
|
48
|
-
result += ` âĸ ${issue.severity}: ${issue.message} (line ${issue.line})\n`;
|
|
49
|
-
});
|
|
50
|
-
result += `\n`;
|
|
51
|
-
}
|
|
52
|
-
if (includeSuggestions && analysis.suggestions.length > 0) {
|
|
53
|
-
result += `đĄ Improvement Suggestions:\n`;
|
|
54
|
-
analysis.suggestions.forEach(suggestion => {
|
|
55
|
-
result += ` âĸ ${suggestion}\n`;
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
return `Error analyzing file: ${error instanceof Error ? error.message : error}`;
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: 'detect_code_smells',
|
|
67
|
-
description: 'Detect common code smells and anti-patterns in a file or directory.',
|
|
68
|
-
parameters: {
|
|
69
|
-
type: 'object',
|
|
70
|
-
properties: {
|
|
71
|
-
path: {
|
|
72
|
-
type: 'string',
|
|
73
|
-
description: 'The file or directory path to analyze',
|
|
74
|
-
minLength: 1,
|
|
75
|
-
},
|
|
76
|
-
patterns: {
|
|
77
|
-
type: 'array',
|
|
78
|
-
items: { type: 'string' },
|
|
79
|
-
description: 'Specific code smell patterns to detect (optional)',
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
required: ['path'],
|
|
83
|
-
additionalProperties: false,
|
|
84
|
-
},
|
|
85
|
-
handler: async (args) => {
|
|
86
|
-
const targetPath = resolveFilePath(workingDir, args['path']);
|
|
87
|
-
const patterns = args['patterns'] || [
|
|
88
|
-
'long_method',
|
|
89
|
-
'complex_conditional',
|
|
90
|
-
'duplicate_code',
|
|
91
|
-
'deep_nesting',
|
|
92
|
-
'too_many_parameters'
|
|
93
|
-
];
|
|
94
|
-
if (!existsSync(targetPath)) {
|
|
95
|
-
return `Error: Path not found: ${targetPath}`;
|
|
96
|
-
}
|
|
97
|
-
const stats = statSync(targetPath);
|
|
98
|
-
if (stats.isDirectory()) {
|
|
99
|
-
return analyzeDirectoryForSmells(targetPath, patterns);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
return analyzeFileForSmells(targetPath, patterns);
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
name: 'calculate_technical_debt',
|
|
108
|
-
description: 'Calculate technical debt metrics for the current project or specific files.',
|
|
109
|
-
parameters: {
|
|
110
|
-
type: 'object',
|
|
111
|
-
properties: {
|
|
112
|
-
scope: {
|
|
113
|
-
type: 'string',
|
|
114
|
-
enum: ['file', 'directory', 'project'],
|
|
115
|
-
description: 'Scope of analysis (default: project)',
|
|
116
|
-
},
|
|
117
|
-
path: {
|
|
118
|
-
type: 'string',
|
|
119
|
-
description: 'Specific path for file or directory analysis (required if scope is file or directory)',
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
additionalProperties: false,
|
|
123
|
-
},
|
|
124
|
-
handler: async (args) => {
|
|
125
|
-
const scope = args['scope'] || 'project';
|
|
126
|
-
const targetPath = args['path'] ? resolveFilePath(workingDir, args['path']) : workingDir;
|
|
127
|
-
return calculateTechnicalDebt(targetPath, scope);
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
];
|
|
131
|
-
}
|
|
132
|
-
// Helper functions
|
|
133
|
-
function resolveFilePath(workingDir, path) {
|
|
134
|
-
if (path.startsWith('/')) {
|
|
135
|
-
return path;
|
|
136
|
-
}
|
|
137
|
-
return join(workingDir, path);
|
|
138
|
-
}
|
|
139
|
-
function analyzeFileQuality(content, filePath) {
|
|
140
|
-
const lines = content.split('\n');
|
|
141
|
-
const issues = [];
|
|
142
|
-
const suggestions = [];
|
|
143
|
-
// Basic metrics
|
|
144
|
-
const linesOfCode = lines.length;
|
|
145
|
-
const functionCount = (content.match(/function\s+\w+|const\s+\w+\s*=\s*\(|class\s+\w+/g) || []).length;
|
|
146
|
-
// Complexity analysis (simplified)
|
|
147
|
-
const cyclomaticComplexity = calculateCyclomaticComplexity(content);
|
|
148
|
-
const cognitiveComplexity = calculateCognitiveComplexity(content);
|
|
149
|
-
const maintainabilityIndex = calculateMaintainabilityIndex(cyclomaticComplexity, linesOfCode, functionCount);
|
|
150
|
-
// Detect specific issues
|
|
151
|
-
detectLongFunctions(content, lines, issues);
|
|
152
|
-
detectComplexConditionals(content, lines, issues);
|
|
153
|
-
detectDeepNesting(content, lines, issues);
|
|
154
|
-
detectDuplicateCode(content, lines, issues);
|
|
155
|
-
// Generate suggestions
|
|
156
|
-
if (cyclomaticComplexity > 10) {
|
|
157
|
-
suggestions.push('Consider breaking down complex functions into smaller, focused functions');
|
|
158
|
-
}
|
|
159
|
-
if (cognitiveComplexity > 15) {
|
|
160
|
-
suggestions.push('Simplify complex logic by extracting helper functions or using early returns');
|
|
161
|
-
}
|
|
162
|
-
if (maintainabilityIndex < 65) {
|
|
163
|
-
suggestions.push('Focus on improving code readability and reducing complexity');
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
linesOfCode,
|
|
167
|
-
functionCount,
|
|
168
|
-
cyclomaticComplexity,
|
|
169
|
-
cognitiveComplexity,
|
|
170
|
-
maintainabilityIndex,
|
|
171
|
-
issues,
|
|
172
|
-
suggestions
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
function calculateCyclomaticComplexity(content) {
|
|
176
|
-
// Simplified cyclomatic complexity calculation
|
|
177
|
-
const decisionPoints = (content.match(/if\s*\(|else\s+if\s*\(|case\s+|\?\s*:|&&|\|\|/g) || []).length;
|
|
178
|
-
return Math.max(1, decisionPoints + 1);
|
|
179
|
-
}
|
|
180
|
-
function calculateCognitiveComplexity(content) {
|
|
181
|
-
// Simplified cognitive complexity calculation
|
|
182
|
-
let complexity = 0;
|
|
183
|
-
const lines = content.split('\n');
|
|
184
|
-
lines.forEach(line => {
|
|
185
|
-
// Increase complexity for nested structures
|
|
186
|
-
const nestingDepth = (line.match(/\{/g) || []).length - (line.match(/\}/g) || []).length;
|
|
187
|
-
complexity += nestingDepth;
|
|
188
|
-
// Increase for complex conditions
|
|
189
|
-
if (line.includes('if') || line.includes('else') || line.includes('case')) {
|
|
190
|
-
complexity += 1;
|
|
191
|
-
}
|
|
192
|
-
// Increase for logical operators
|
|
193
|
-
complexity += (line.match(/&&|\|\|/g) || []).length;
|
|
194
|
-
});
|
|
195
|
-
return Math.max(1, complexity);
|
|
196
|
-
}
|
|
197
|
-
function calculateMaintainabilityIndex(cyclomaticComplexity, linesOfCode, functionCount) {
|
|
198
|
-
// Simplified maintainability index calculation
|
|
199
|
-
const baseScore = 171;
|
|
200
|
-
const complexityPenalty = 5.2 * Math.log(cyclomaticComplexity);
|
|
201
|
-
const volumePenalty = 0.23 * linesOfCode;
|
|
202
|
-
const functionPenalty = 16.2 * Math.log(functionCount || 1);
|
|
203
|
-
const score = baseScore - complexityPenalty - volumePenalty - functionPenalty;
|
|
204
|
-
return Math.max(0, Math.min(100, Math.round(score)));
|
|
205
|
-
}
|
|
206
|
-
function detectLongFunctions(content, lines, issues) {
|
|
207
|
-
const functionMatches = content.matchAll(/function\s+(\w+)|const\s+(\w+)\s*=\s*\(/g);
|
|
208
|
-
for (const match of functionMatches) {
|
|
209
|
-
const functionName = match[1] || match[2];
|
|
210
|
-
// Simplified: count lines between function declaration and next function/end
|
|
211
|
-
const startLine = lines.findIndex(line => line.includes(functionName));
|
|
212
|
-
if (startLine !== -1) {
|
|
213
|
-
let endLine = lines.length;
|
|
214
|
-
for (let i = startLine + 1; i < lines.length; i++) {
|
|
215
|
-
if (lines[i].match(/^\s*(function|const|class)\s+\w/)) {
|
|
216
|
-
endLine = i;
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
const functionLength = endLine - startLine;
|
|
221
|
-
if (functionLength > 50) {
|
|
222
|
-
issues.push({
|
|
223
|
-
severity: 'WARNING',
|
|
224
|
-
message: `Function "${functionName}" is too long (${functionLength} lines)`,
|
|
225
|
-
line: startLine + 1
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
function detectComplexConditionals(content, lines, issues) {
|
|
232
|
-
lines.forEach((line, index) => {
|
|
233
|
-
if (line.includes('if') || line.includes('else if')) {
|
|
234
|
-
const conditionComplexity = (line.match(/&&|\|\|/g) || []).length;
|
|
235
|
-
if (conditionComplexity > 2) {
|
|
236
|
-
issues.push({
|
|
237
|
-
severity: 'WARNING',
|
|
238
|
-
message: `Complex conditional with ${conditionComplexity} logical operators`,
|
|
239
|
-
line: index + 1
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
function detectDeepNesting(content, lines, issues) {
|
|
246
|
-
let currentDepth = 0;
|
|
247
|
-
let maxDepth = 0;
|
|
248
|
-
let maxDepthLine = 0;
|
|
249
|
-
lines.forEach((line, index) => {
|
|
250
|
-
currentDepth += (line.match(/\{/g) || []).length;
|
|
251
|
-
currentDepth -= (line.match(/\}/g) || []).length;
|
|
252
|
-
if (currentDepth > maxDepth) {
|
|
253
|
-
maxDepth = currentDepth;
|
|
254
|
-
maxDepthLine = index + 1;
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
if (maxDepth > 4) {
|
|
258
|
-
issues.push({
|
|
259
|
-
severity: 'WARNING',
|
|
260
|
-
message: `Deep nesting detected (depth: ${maxDepth})`,
|
|
261
|
-
line: maxDepthLine
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
function detectDuplicateCode(content, lines, issues) {
|
|
266
|
-
// Simplified duplicate code detection
|
|
267
|
-
const codeBlocks = content.split(/\n\s*\n/);
|
|
268
|
-
const seenBlocks = new Map();
|
|
269
|
-
codeBlocks.forEach((block, index) => {
|
|
270
|
-
if (block.trim().length > 20) { // Only consider substantial blocks
|
|
271
|
-
const normalized = block.replace(/\s+/g, ' ').trim();
|
|
272
|
-
if (seenBlocks.has(normalized)) {
|
|
273
|
-
const firstOccurrence = seenBlocks.get(normalized);
|
|
274
|
-
issues.push({
|
|
275
|
-
severity: 'INFO',
|
|
276
|
-
message: `Potential duplicate code block (similar to line ${firstOccurrence})`,
|
|
277
|
-
line: index + 1
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
seenBlocks.set(normalized, index + 1);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
function analyzeFileForSmells(filePath, patterns) {
|
|
287
|
-
try {
|
|
288
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
289
|
-
const lines = content.split('\n');
|
|
290
|
-
const smells = [];
|
|
291
|
-
patterns.forEach(pattern => {
|
|
292
|
-
switch (pattern) {
|
|
293
|
-
case 'long_method':
|
|
294
|
-
detectLongFunctions(content, lines, smells);
|
|
295
|
-
break;
|
|
296
|
-
case 'complex_conditional':
|
|
297
|
-
detectComplexConditionals(content, lines, smells);
|
|
298
|
-
break;
|
|
299
|
-
case 'deep_nesting':
|
|
300
|
-
detectDeepNesting(content, lines, smells);
|
|
301
|
-
break;
|
|
302
|
-
case 'duplicate_code':
|
|
303
|
-
detectDuplicateCode(content, lines, smells);
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
});
|
|
307
|
-
if (smells.length === 0) {
|
|
308
|
-
return `â
No significant code smells detected in ${filePath}`;
|
|
309
|
-
}
|
|
310
|
-
let result = `đ Code Smell Analysis for ${filePath}\n\n`;
|
|
311
|
-
smells.forEach(smell => {
|
|
312
|
-
result += `${smell.severity === 'WARNING' ? 'â ī¸' : 'âšī¸'} ${smell.message}\n`;
|
|
313
|
-
});
|
|
314
|
-
return result;
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
return `Error analyzing file for smells: ${error instanceof Error ? error.message : error}`;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
function analyzeDirectoryForSmells(dirPath, patterns) {
|
|
321
|
-
// Simplified directory analysis
|
|
322
|
-
return `đ Directory analysis for ${dirPath} with patterns: ${patterns.join(', ')}\n` +
|
|
323
|
-
`Note: Full directory analysis requires additional implementation`;
|
|
324
|
-
}
|
|
325
|
-
function calculateTechnicalDebt(targetPath, scope) {
|
|
326
|
-
// Simplified technical debt calculation
|
|
327
|
-
const debtScore = Math.floor(Math.random() * 100); // Placeholder
|
|
328
|
-
const estimatedHours = Math.ceil(debtScore / 10);
|
|
329
|
-
return `đ° Technical Debt Analysis (${scope})\n\n` +
|
|
330
|
-
`đ Debt Score: ${debtScore}/100\n` +
|
|
331
|
-
`âąī¸ Estimated Remediation: ${estimatedHours} hours\n` +
|
|
332
|
-
`đ Priority: ${debtScore > 70 ? 'HIGH' : debtScore > 40 ? 'MEDIUM' : 'LOW'}\n\n` +
|
|
333
|
-
`đĄ Recommendations:\n` +
|
|
334
|
-
` âĸ Focus on high-complexity files first\n` +
|
|
335
|
-
` âĸ Add unit tests for critical paths\n` +
|
|
336
|
-
` âĸ Refactor long functions and complex conditionals`;
|
|
337
|
-
}
|
|
338
|
-
//# sourceMappingURL=softwareEngineeringTools.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"softwareEngineeringTools.js","sourceRoot":"","sources":["../../src/tools/softwareEngineeringTools.ts"],"names":[],"mappings":"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"}
|