UNPKG

agentsqripts

Version:

Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems

49 lines (43 loc) 2.33 kB
/** * @file Function parameter similarity calculator for signature pattern analysis * @description Single responsibility: Assess code block similarity based on function parameter patterns and signatures * * This calculator evaluates similarity between code blocks by analyzing their function * parameter patterns, including parameter count, destructuring usage, and signature complexity. * Similar parameter patterns often indicate functionally equivalent interfaces and comparable * algorithmic approaches, making parameter analysis crucial for detecting refactorable code. * * Design rationale: * - Parameter signature analysis identifies functionally equivalent interfaces with different implementations * - Destructuring pattern detection recognizes modern JavaScript parameter usage patterns * - Parameter count comparison reveals implementation complexity and functional scope * - Graduated similarity scoring provides nuanced assessment of parameter compatibility * - Conservative penalty for parameter count differences prevents false positive matches * * Parameter similarity methodology: * - Identical parameter counts enable high similarity assessment with pattern analysis * - Destructuring pattern matching identifies equivalent complex parameter structures * - High similarity (0.9) for matching destructuring patterns indicating equivalent interfaces * - Medium similarity (0.7) for same parameter count with different patterns * - Graduated penalty (0.2 per parameter difference) for mismatched parameter counts */ /** * Calculate parameter similarity */ function calculateParameterSimilarity(block1, block2) { const params1 = block1.parameters || []; const params2 = block2.parameters || []; // Same number of parameters if (params1.length === params2.length) { if (params1.length === 0) return 1.0; // Check for similar parameter patterns (even if names differ) const hasDestructuring1 = params1.includes('destructured'); const hasDestructuring2 = params2.includes('destructured'); if (hasDestructuring1 === hasDestructuring2) return 0.9; return 0.7; } // Different number of parameters const diff = Math.abs(params1.length - params2.length); return Math.max(0, 1 - (diff * 0.2)); } module.exports = calculateParameterSimilarity;