UNPKG

agentsqripts

Version:

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

54 lines (47 loc) 1.91 kB
/** * @file Detect string concatenation in loops using AST * @description Single responsibility: Main orchestrator for detecting string concatenation in loops */ const { parseToAST, isInsideLoop, getNodeLine, getNodeSource, walk } = require('../../astParser'); const { PERFORMANCE_PATTERNS } = require('../../../performancePatterns'); const isStringOperation = require('../check/isStringOperation'); const isStringConcatenation = require('../check/isStringConcatenation'); const createIssue = require('../createIssue'); /** * Detect string concatenation in loops using AST * @param {string} content - File content * @param {string} filePath - File path * @returns {Array} Array of string concatenation issues */ function detectStringConcatInLoopsAST(content, filePath) { const issues = []; const ast = parseToAST(content, filePath); if (!ast) return []; const pattern = PERFORMANCE_PATTERNS['string_concat_loop']; // Find all assignment expressions walk.simple(ast, { AssignmentExpression(node) { // Check for += operator with string concatenation if (node.operator === '+=') { const loop = isInsideLoop(ast, node); if (loop) { // Check if right side contains string literal or string operation if (isStringOperation(node.right)) { issues.push(createIssue(node, loop, content, filePath, pattern)); } } } // Check for = operator with string concatenation (str = str + ...) else if (node.operator === '=' && node.right.type === 'BinaryExpression' && node.right.operator === '+') { const loop = isInsideLoop(ast, node); if (loop && isStringConcatenation(node)) { issues.push(createIssue(node, loop, content, filePath, pattern)); } } } }); return issues; } module.exports = detectStringConcatInLoopsAST;