UNPKG

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