agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
38 lines (34 loc) • 1.96 kB
JavaScript
/**
* @file Cyclomatic complexity similarity calculator for algorithmic pattern matching
* @description Single responsibility: Assess code block similarity based on algorithmic complexity patterns
*
* This calculator evaluates the similarity between code blocks by comparing their cyclomatic
* complexity scores. Blocks with similar complexity often represent similar algorithmic
* approaches and decision-making patterns, making complexity a valuable dimension for
* detecting semantically equivalent code implementations.
*
* Design rationale:
* - Complexity-based similarity identifies functionally equivalent algorithms with different implementations
* - Ratio-based scoring provides normalized similarity regardless of absolute complexity values
* - Perfect complexity matches indicate likely algorithmic similarity worthy of investigation
* - Conservative default complexity prevents division by zero and handles edge cases gracefully
* - Linear ratio calculation provides intuitive similarity interpretation (0.0 to 1.0 scale)
*
* Complexity similarity methodology:
* - Identical complexity scores yield perfect similarity (1.0) indicating likely algorithmic equivalence
* - Ratio calculation normalizes similarity regardless of absolute complexity magnitude
* - Minimum/maximum ratio prevents bias toward lower or higher complexity implementations
* - Default complexity value (1) handles blocks without computed complexity metrics
* - Conservative approach ensures meaningful similarity assessment for deduplication decisions
*/
/**
* Calculate complexity similarity
*/
function calculateComplexitySimilarity(block1, block2) {
const complexity1 = block1.complexity || 1;
const complexity2 = block2.complexity || 1;
if (complexity1 === complexity2) return 1.0;
const ratio = Math.min(complexity1, complexity2) / Math.max(complexity1, complexity2);
return ratio;
}
module.exports = calculateComplexitySimilarity;