UNPKG

agentsqripts

Version:

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

37 lines (33 loc) 2.02 kB
/** * @file Function naming pattern detector for systematic duplication identification * @description Single responsibility: Detect systematic naming patterns that indicate intentional function series * * This detector identifies functions that follow consistent naming conventions, which often * indicates systematic code duplication where developers have created multiple similar * functions with predictable name variations. Such patterns frequently represent excellent * candidates for refactoring into parameterized implementations. * * Design rationale: * - Naming pattern detection identifies systematic duplication beyond coincidental similarities * - Prefix-based analysis recognizes common function series patterns (e.g., handleUserLogin, handleAdminLogin) * - Coverage threshold ensures pattern detection focuses on significant similarities * - Regular expression analysis captures systematic naming conventions reliably * - Conservative pattern matching prevents false positives from coincidental name similarities * * Pattern detection methodology: * - Anonymous function filtering focuses analysis on meaningful named functions * - Coverage threshold (80%) ensures patterns represent majority of analyzed functions * - Prefix extraction identifies systematic naming conventions using regex matching * - Unique prefix analysis determines whether functions follow consistent naming pattern * - Boolean result enables simple integration with duplication assessment workflows */ function areSimilarlyNamedFunctions(blocks) { const names = blocks.map(b => b.name).filter(n => n && n !== 'anonymous'); if (names.length < blocks.length * 0.8) return false; // Check for common prefixes const prefixes = names.map(n => n.match(/^[a-z]+/i)?.[0]).filter(Boolean); const uniquePrefixes = new Set(prefixes); // If all have the same prefix, it's a pattern return uniquePrefixes.size === 1 && prefixes.length === names.length; } module.exports = areSimilarlyNamedFunctions;