UNPKG

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