UNPKG

agentsqripts

Version:

Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems

102 lines (89 loc) 2.69 kB
/** * @file Performance analysis index * @description Export performance analysis functions */ const { calculatePerformanceScore } = require('../performance/performanceScoreCalculator'); const { generatePerformanceRecommendations } = require('../performance/performanceRecommendationGenerator'); /** * Analyze file for performance issues * @param {string} filePath - Path to file * @returns {Object} Analysis results */ async function analyzeFilePerformance(filePath) { const fs = require('fs').promises; try { const content = await fs.readFile(filePath, 'utf8'); // Basic performance issue detection const issues = []; // O(n²) pattern detection - improved patterns const nestedLoopPatterns = [ /for\s*\([^)]*\)\s*{[^}]*for\s*\([^)]*\)/gs, /for\s*\([^)]*\)[\s\S]*?for\s*\([^)]*\)/g, /\.forEach\([^)]*\)[\s\S]*?\.forEach\([^)]*\)/g ]; let hasNestedLoops = false; for (const pattern of nestedLoopPatterns) { if (pattern.test(content)) { hasNestedLoops = true; break; } } if (hasNestedLoops) { issues.push({ type: 'nested_loops', severity: 'HIGH', category: 'Algorithm', description: 'Nested loops detected - potential O(n²) complexity', effort: 3 }); } // String concatenation in loops - more comprehensive detection const stringConcatPatterns = [ /for\s*\([^)]*\)[\s\S]*?\w+\s*\+=\s*["'`]/g, /for\s*\([^)]*\)[\s\S]*?result\s*\+=\s*/g, /for\s*\([^)]*\)[\s\S]*?str\s*\+=\s*/g, /\.forEach\([^)]*\)[\s\S]*?\w+\s*\+=\s*/g ]; let hasStringConcat = false; for (const pattern of stringConcatPatterns) { if (pattern.test(content)) { hasStringConcat = true; break; } } if (hasStringConcat) { issues.push({ type: 'string_concat', severity: 'MEDIUM', category: 'Performance', description: 'String concatenation in loop detected', effort: 2 }); } return { file: filePath, issues, performanceScore: calculatePerformanceScore(issues) }; } catch (error) { return { file: filePath, issues: [], performanceScore: 100, error: error.message }; } } /** * Generate optimization recommendations * @param {Array} issues - Performance issues * @returns {Array} Recommendations */ function generateOptimizationRecommendations(issues) { return generatePerformanceRecommendations(issues, 0, 0); } module.exports = { analyzeFilePerformance, calculatePerformanceScore, generateOptimizationRecommendations };