UNPKG

agentsqripts

Version:

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

63 lines (56 loc) 2.98 kB
/** * @file Code block difference pattern analyzer for duplication characterization * @description Single responsibility: Analyze and aggregate difference patterns to characterize duplication types * * This analyzer performs comprehensive difference pattern analysis across multiple code blocks * to identify the nature and characteristics of code duplication. It evaluates structural, * logical, and parameteric differences to determine whether detected similarities represent * true duplication opportunities or coincidental pattern matches. * * Design rationale: * - Comprehensive difference analysis enables accurate duplication classification * - Pattern aggregation reveals systematic differences that indicate parameterizable variations * - Multi-dimensional similarity assessment provides holistic duplication characterization * - Confidence scoring helps prioritize refactoring opportunities based on analysis certainty * - Statistical aggregation identifies consistent patterns across multiple code blocks * * Analysis methodology: * - Base block comparison establishes reference point for difference pattern analysis * - Difference type categorization identifies specific areas of variation (variables, literals, structure) * - Pattern identification determines whether differences represent parameterizable variations * - Structural and logical similarity assessment provides comprehensive duplication characterization * - Confidence calculation weights analysis reliability for prioritization decisions */ const compareBlocks = require('./compareBlocks'); const analyzeDifferenceTypes = require('./analyzeDifferenceTypes'); const identifyPattern = require('./identifyPattern'); const calculateStructuralSimilarity = require('./calculateStructuralSimilarity'); const calculateLogicalSimilarity = require('./calculateLogicalSimilarity'); const calculateConfidence = require('./calculateConfidence'); /** * Analyze the patterns of differences between blocks */ function analyzeDifferencePatterns(blocks) { const differences = []; const baseBlock = blocks[0]; // Compare each block to the base for (let i = 1; i < blocks.length; i++) { const diff = compareBlocks(baseBlock, blocks[i]); differences.push(diff); } // Aggregate difference patterns const totalDiffs = differences.reduce((sum, d) => sum + d.totalDifferences, 0); const avgDiffs = totalDiffs / differences.length; // Check what types of differences exist const diffTypes = analyzeDifferenceTypes(differences); return { totalDifferences: totalDiffs, averageDifferences: avgDiffs, pattern: identifyPattern(diffTypes), parameterizableVariations: diffTypes.variableNames / (diffTypes.total || 1), structuralSimilarity: calculateStructuralSimilarity(blocks), logicalSimilarity: calculateLogicalSimilarity(blocks), confidence: calculateConfidence(diffTypes, avgDiffs) }; } module.exports = analyzeDifferencePatterns;