agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
46 lines (36 loc) • 1.27 kB
JavaScript
/**
* @file Find semantic duplicates within a set of blocks
* @description Single responsibility: Find similar code blocks within a single file
*/
const { calculateSemanticSimilarity, identifyDuplicationPattern } = require('../../ast/semanticSimilarityCalculator');
const calculateAverageSimilarity = require('../metrics/calculateAverageSimilarity');
/**
* Find semantic duplicates within a set of blocks
*/
function findSemanticDuplicates(blocks, context) {
if (blocks.length < 2) return [];
const groups = [];
const processed = new Set();
for (let i = 0; i < blocks.length; i++) {
if (processed.has(i)) continue;
const group = [blocks[i]];
processed.add(i);
for (let j = i + 1; j < blocks.length; j++) {
if (processed.has(j)) continue;
const similarity = calculateSemanticSimilarity(blocks[i], blocks[j]);
if (similarity >= context.rules.similarityThreshold) {
group.push(blocks[j]);
processed.add(j);
}
}
if (group.length > 1) {
groups.push({
blocks: group,
similarity: calculateAverageSimilarity(group),
pattern: identifyDuplicationPattern(group)
});
}
}
return groups;
}
module.exports = findSemanticDuplicates;