UNPKG

agentsqripts

Version:

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

48 lines (37 loc) 1.47 kB
/** * @file Identify duplication pattern type * @description Single responsibility: Identify the type of duplication pattern in code blocks */ const calculateSemanticSimilarity = require('../calculators/calculateSemanticSimilarity'); /** * Identify the type of duplication pattern */ function identifyDuplicationPattern(blocks) { if (!blocks || blocks.length < 2) return 'unique'; // Calculate average similarity across all blocks let totalSimilarity = 0; let comparisons = 0; for (let i = 0; i < blocks.length - 1; i++) { for (let j = i + 1; j < blocks.length; j++) { totalSimilarity += calculateSemanticSimilarity(blocks[i], blocks[j]); comparisons++; } } const avgSimilarity = comparisons > 0 ? totalSimilarity / comparisons : 0; // Check for exact duplicates const allExact = blocks.every(b => b.hash === blocks[0].hash); if (allExact) return 'exact_duplicate'; // Check for parameter variations const sameStructure = blocks.every(b => b.astNode === blocks[0].astNode); const similarComplexity = blocks.every(b => Math.abs(b.complexity - blocks[0].complexity) <= 2 ); if (sameStructure && similarComplexity && avgSimilarity > 0.8) { return 'parameterized_logic'; } // Check for similar patterns if (avgSimilarity > 0.7) return 'similar_pattern'; if (avgSimilarity > 0.5) return 'loose_pattern'; return 'weak_similarity'; } module.exports = identifyDuplicationPattern;