UNPKG

agentsqripts

Version:

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

192 lines (170 loc) โ€ข 5.86 kB
/** * @file Output formatter for problem-scope CLI * @description Formats and displays analysis results */ /** * Output analysis results in specified format * @param {Object} results - Analysis results * @param {string} format - Output format (json, summary, detailed) */ function outputResults(results, format = 'summary') { switch (format) { case 'json': outputJSON(results); break; case 'detailed': outputDetailed(results); break; case 'summary': default: outputSummary(results); break; } } /** * Output results as JSON * @param {Object} results - Analysis results */ function outputJSON(results) { console.log(JSON.stringify(results, null, 2)); } /** * Output summary format * @param {Object} results - Analysis results */ function outputSummary(results) { console.log('\n๐ŸŽฏ PROBLEM SCOPE ANALYSIS SUMMARY'); console.log('==============================================='); // Overall summary const riskIcon = getRiskIcon(results.summary.overallRiskLevel); console.log(`${riskIcon} Overall Risk Level: ${results.summary.overallRiskLevel}`); console.log(`๐Ÿ“Š Total Issues: ${results.summary.totalIssues}`); console.log(`๐Ÿšจ Critical Issues: ${results.summary.criticalIssues}`); console.log(`๐Ÿ’ก Recommendations: ${results.summary.recommendationsCount}`); console.log(`โฑ๏ธ Execution Time: ${results.metadata.executionTime}ms\n`); // Analysis breakdown console.log('๐Ÿ“‹ ANALYSIS BREAKDOWN'); console.log('==============================================='); Object.entries(results.analyses).forEach(([type, analysis]) => { const typeIcon = getAnalysisIcon(type); const severityIcon = getRiskIcon(analysis.severity || 'LOW'); if (analysis.error) { console.log(`${typeIcon} ${type.toUpperCase()}: โŒ Failed - ${analysis.error}`); } else { const issueCount = getIssueCount(analysis); console.log(`${typeIcon} ${type.toUpperCase()}: ${severityIcon} ${analysis.severity || 'LOW'} (${issueCount} issues)`); } }); // Priority areas if (results.summary.scopeAssessment.priorityAreas.length > 0) { console.log('\n๐ŸŽฏ PRIORITY AREAS'); console.log('==============================================='); results.summary.scopeAssessment.priorityAreas.forEach(area => { console.log(`โšก ${area.toUpperCase()}`); }); } console.log('\n'); } /** * Output detailed format * @param {Object} results - Analysis results */ function outputDetailed(results) { outputSummary(results); console.log('๐Ÿ” DETAILED ANALYSIS RESULTS'); console.log('===============================================\n'); Object.entries(results.analyses).forEach(([type, analysis]) => { console.log(`\n๐Ÿ“Š ${type.toUpperCase()} ANALYSIS`); console.log('-'.repeat(50)); if (analysis.error) { console.log(`โŒ Error: ${analysis.error}\n`); return; } console.log(`๐ŸŽฏ Severity: ${analysis.severity || 'LOW'}`); // Show vulnerabilities if (analysis.vulnerabilities && analysis.vulnerabilities.length > 0) { console.log(`\n๐Ÿ”’ Vulnerabilities (${analysis.vulnerabilities.length}):`); analysis.vulnerabilities.slice(0, 10).forEach((vuln, i) => { console.log(` ${i + 1}. [${vuln.severity}] ${vuln.title || vuln.description}`); if (vuln.file) console.log(` ๐Ÿ“„ ${vuln.file}:${vuln.line || '?'}`); }); if (analysis.vulnerabilities.length > 10) { console.log(` ... and ${analysis.vulnerabilities.length - 10} more`); } } // Show violations if (analysis.violations && analysis.violations.length > 0) { console.log(`\nโš ๏ธ Violations (${analysis.violations.length}):`); analysis.violations.slice(0, 10).forEach((violation, i) => { console.log(` ${i + 1}. [${violation.severity}] ${violation.description}`); if (violation.file) console.log(` ๐Ÿ“„ ${violation.file}:${violation.line || '?'}`); }); if (analysis.violations.length > 10) { console.log(` ... and ${analysis.violations.length - 10} more`); } } // Show opportunities if (analysis.opportunities && analysis.opportunities.length > 0) { console.log(`\n๐Ÿ’ก Opportunities (${analysis.opportunities.length}):`); analysis.opportunities.slice(0, 10).forEach((opp, i) => { console.log(` ${i + 1}. ${opp.description || opp.title}`); if (opp.file) console.log(` ๐Ÿ“„ ${opp.file}`); }); if (analysis.opportunities.length > 10) { console.log(` ... and ${analysis.opportunities.length - 10} more`); } } console.log(); }); } /** * Get risk level icon * @param {string} level - Risk level * @returns {string} Icon */ function getRiskIcon(level) { const icons = { CRITICAL: '๐Ÿ”ด', HIGH: '๐ŸŸ ', MEDIUM: '๐ŸŸก', LOW: '๐ŸŸข' }; return icons[level] || 'โšช'; } /** * Get analysis type icon * @param {string} type - Analysis type * @returns {string} Icon */ function getAnalysisIcon(type) { const icons = { dependencies: '๐Ÿ”—', complexity: '๐Ÿงฎ', security: '๐Ÿ”’', debt: '๐Ÿ’ธ', srp: '๐Ÿ“', cleanup: '๐Ÿงน', refactoring: '๐Ÿ”ง', performance: 'โšก', scalability: '๐Ÿ“ˆ' }; return icons[type] || '๐Ÿ“Š'; } /** * Get issue count from analysis * @param {Object} analysis - Analysis object * @returns {number} Issue count */ function getIssueCount(analysis) { let count = 0; if (analysis.vulnerabilities) count += analysis.vulnerabilities.length; if (analysis.violations) count += analysis.violations.length; if (analysis.opportunities) count += analysis.opportunities.length; return count; } module.exports = { outputResults, outputJSON, outputSummary, outputDetailed };