UNPKG

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