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
JavaScript
/**
* @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
};