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