UNPKG

agentsqripts

Version:

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

41 lines (37 loc) 2.13 kB
/** * @file AST-based structural similarity calculator for syntactic pattern analysis * @description Single responsibility: Assess code block similarity through Abstract Syntax Tree node type comparison * * This calculator evaluates similarity between code blocks by analyzing their AST node types, * providing fundamental structural similarity assessment based on syntactic patterns. AST-based * comparison enables detection of functionally equivalent code that might use different surface * syntax but share underlying structural patterns. * * Design rationale: * - AST node type comparison provides syntax-agnostic structural similarity assessment * - Function type equivalence recognizes different function declaration styles as structurally similar * - High similarity for exact AST matches indicates strong structural equivalence * - Medium similarity for function type variations accommodates different declaration styles * - Conservative baseline similarity ensures meaningful assessment for diverse code patterns * * Structural similarity methodology: * - Perfect AST node matches yield high similarity (0.9) indicating strong structural equivalence * - Function type equivalence provides medium similarity (0.7) for different function declaration styles * - ArrowFunctionExpression, FunctionDeclaration, and FunctionExpression treated as equivalent patterns * - Conservative baseline similarity (0.3) for structurally different node types * - Systematic classification enables consistent structural pattern recognition */ /** * Calculate structural similarity based on AST node types */ function calculateStructureSimilarity(block1, block2) { // If both have the same AST node type, high similarity if (block1.astNode === block2.astNode) return 0.9; // If both are functions (different types), medium similarity const functionTypes = ['FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression']; if (functionTypes.includes(block1.astNode) && functionTypes.includes(block2.astNode)) { return 0.7; } return 0.3; } module.exports = calculateStructureSimilarity;