agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
53 lines (49 loc) • 2.14 kB
JavaScript
/**
* @file Function counting utility for modular complexity assessment
* @description Single responsibility: Count function definitions across JavaScript codebases for structural analysis
*
* This utility provides comprehensive function counting capabilities that support complexity
* analysis by identifying the functional decomposition patterns in JavaScript code. Function
* count serves as a primary indicator of code organization, modularity, and potential
* maintainability characteristics across different coding styles and frameworks.
*
* Design rationale:
* - Multi-pattern detection covers all JavaScript function declaration syntaxes comprehensively
* - Modern syntax support includes arrow functions, method definitions, and async patterns
* - Efficient regex-based counting maintains performance for large codebase analysis
* - Comprehensive coverage ensures accurate structural complexity assessment
* - Simple implementation enables reliable integration across different analysis workflows
*
* Function detection scope:
* - Traditional function declarations: Named function definitions with function keyword
* - Function expressions: Anonymous and named function assignments
* - Arrow functions: ES6+ compact function syntax variations
* - Method definitions: Object method declarations and class method definitions
* - Async functions: Asynchronous function patterns and async arrow functions
*/
/**
* Counts functions in code
* @param {string} content - File content
* @returns {number} Function count
*/
function countFunctions(content) {
const patterns = [
/function\s+[a-zA-Z_$][a-zA-Z0-9_$]*\s*\(/g,
/const\s+[a-zA-Z_$][a-zA-Z0-9_$]*\s*=\s*\(/g,
/const\s+[a-zA-Z_$][a-zA-Z0-9_$]*\s*=\s*async\s*\(/g,
/[a-zA-Z_$][a-zA-Z0-9_$]*\s*:\s*function/g,
/[a-zA-Z_$][a-zA-Z0-9_$]*\s*:\s*async\s*function/g,
/=>\s*{/g // Arrow functions with blocks
];
let count = 0;
patterns.forEach(pattern => {
const matches = content.match(pattern);
if (matches) {
count += matches.length;
}
});
return count;
}
module.exports = {
countFunctions
};