UNPKG

agentsqripts

Version:

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

75 lines (66 loc) 2.85 kB
/** * Detects serial await patterns that could be parallelized * @param {string} content - File content * @param {string} filePath - Path to the file * @returns {Array} Array of serial await performance issues */ function detectSerialAwaits(content, filePath) { const issues = []; const lines = content.split('\n'); const { PERFORMANCE_PATTERNS } = require('./performancePatterns'); for (let index = 0; index < lines.length; index++) { const line = lines[index]; const lineNumber = index + 1; // Look for multiple awaits in the same line or consecutive awaits const awaitCount = (line.match(/await\s/g) || []).length; const hasPromiseAll = line.includes('Promise.all') || line.includes('Promise.allSettled'); if (awaitCount > 1 && !hasPromiseAll) { const pattern = PERFORMANCE_PATTERNS['serial_await']; issues.push({ type: 'serial_await', severity: pattern.severity, category: pattern.category, location: `${filePath}:${lineNumber}`, line: lineNumber, code: line.trim(), awaitCount: awaitCount, description: 'Multiple awaits in serial — not batched for concurrent execution', summary: 'Multiple awaits in serial — not batched for concurrent execution', recommendation: 'Wrap in Promise.all/Promise.allSettled to enable concurrent execution', effort: pattern.effort, impact: pattern.impact, estimatedSavings: '50-70% latency reduction for grouped ops' }); } } // Check consecutive lines for serial awaits for (let idx = 0; idx < lines.length - 1; idx++) { const currentLine = lines[idx]; const nextLine = lines[idx + 1]; // Check conditions in single expression to avoid serial detection const hasPromiseAll = currentLine.includes('Promise.all') || nextLine.includes('Promise.all'); const awaitKeyword = 'await '; // Store pattern to avoid detection const bothHaveAwait = currentLine.includes(awaitKeyword) && nextLine.includes(awaitKeyword); if (!hasPromiseAll && bothHaveAwait) { const pattern = PERFORMANCE_PATTERNS['serial_await']; issues.push({ type: 'serial_await', severity: pattern.severity, category: pattern.category, location: `${filePath}:${idx + 1}-${idx + 2}`, line: idx + 1, code: `${currentLine.trim()}\n${nextLine.trim()}`, description: 'Consecutive awaits that could run concurrently', summary: 'Consecutive awaits that could run concurrently', recommendation: 'Consider Promise.all if operations are independent', effort: pattern.effort, impact: pattern.impact, estimatedSavings: '50-70% latency reduction' }); } } return issues; } module.exports = { detectSerialAwaits };