agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
35 lines (28 loc) • 1.43 kB
JavaScript
/**
* @file Maintainability index calculation
* @description Calculates maintainability index for code quality assessment
*/
/**
* Calculate maintainability index based on various metrics
* @param {number} linesOfCode - Total lines of code
* @param {number} cyclomaticComplexity - Cyclomatic complexity score
* @param {number} halsteadVolume - Halstead volume (optional, defaults to simple estimate)
* @returns {number} Maintainability index (0-100, higher is better)
*/
function calculateMaintainabilityIndex(linesOfCode, cyclomaticComplexity, halsteadVolume = null) {
// If Halstead volume not provided, estimate based on code length
const volume = halsteadVolume || Math.log2(linesOfCode || 1) * 10;
// Standard maintainability index formula (simplified)
// MI = 171 - 5.2 * ln(V) - 0.23 * G - 16.2 * ln(LOC)
// Where V = Halstead Volume, G = Cyclomatic Complexity, LOC = Lines of Code
const volumeComponent = volume > 0 ? 5.2 * Math.log(volume) : 0;
const complexityComponent = 0.23 * (cyclomaticComplexity || 1);
const locComponent = linesOfCode > 0 ? 16.2 * Math.log(linesOfCode) : 0;
let maintainabilityIndex = 171 - volumeComponent - complexityComponent - locComponent;
// Normalize to 0-100 scale
maintainabilityIndex = Math.max(0, Math.min(100, maintainabilityIndex));
return Math.round(maintainabilityIndex);
}
module.exports = {
calculateMaintainabilityIndex
};