UNPKG

agentsqripts

Version:

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

74 lines (64 loc) 2.31 kB
/** * @file SRP project analyzer * @description Analyzes directory for SRP violations */ /** * Analyze directory for SRP violations * @param {string} dirPath - Directory path to analyze * @param {Object} options - Analysis options * @returns {Object} Analysis results */ async function analyzeSRPViolations(dirPath, options = {}) { const { getAllFiles } = require('./srpFileCollector'); const { DEFAULT_KEYWORD_CLUSTERS } = require('./srpFileScorer'); const localVars = require('../../config/localVars'); const { analyzeSingleFile } = require('./srpSingleFileAnalyzer'); const { generateProjectSRPRecommendations } = require('./srpProjectRecommendationGenerator'); const { extensions = localVars.DEFAULT_EXTENSIONS, keywordClusters = DEFAULT_KEYWORD_CLUSTERS, minScore = 3, // Raised from 1 to 3 to focus on meaningful violations includeDetails = true } = options; const startTime = Date.now(); const files = await getAllFiles(dirPath, extensions); const results = []; for (const file of files) { const analysis = await analyzeSingleFile(file, { keywordClusters }); if (analysis && analysis.score >= minScore) { if (!includeDetails) { delete analysis.details; } results.push(analysis); } } // Sort by score (highest violations first) results.sort((a, b) => b.score - a.score); const analysisTime = Date.now() - startTime; // Calculate summary statistics const totalFiles = files.length; const violatingFiles = results.length; const criticalViolations = results.filter(r => r.severity === 'CRITICAL').length; const highViolations = results.filter(r => r.severity === 'HIGH').length; const averageScore = results.length > 0 ? results.reduce((sum, r) => sum + r.score, 0) / results.length : 0; return { timestamp: new Date().toISOString(), summary: { totalFiles, violatingFiles, violationRate: Math.round((violatingFiles / totalFiles) * 100), criticalViolations, highViolations, averageScore: Math.round(averageScore * 10) / 10 }, violations: results, recommendations: generateProjectSRPRecommendations(results), analysisTime }; } module.exports = { analyzeSRPViolations, analyzeProjectSRP: analyzeSRPViolations };