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