UNPKG

agentsqripts

Version:

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

53 lines (46 loc) 1.59 kB
/** * @file Detect setState calls in render methods * @description Single responsibility: Detect setState calls within React render methods */ const walk = require('acorn-walk'); const { getLineNumber } = require('../../../utils/astParser'); /** * Detect setState calls in render methods * @param {Object} ast - AST tree * @param {string} filePath - File path * @returns {Array} Detected bugs */ function detectStateInRender(ast, filePath) { const bugs = []; let inRenderMethod = false; walk.simple(ast, { MethodDefinition(node) { if (node.key.name === 'render') { inRenderMethod = true; // Check for setState calls within render walk.simple(node.value.body, { CallExpression(innerNode) { if (innerNode.callee.type === 'MemberExpression' && innerNode.callee.property.name === 'setState') { bugs.push({ type: 'setstate_in_render', severity: 'HIGH', category: 'React', line: getLineNumber(innerNode), column: innerNode.loc ? innerNode.loc.start.column : 0, description: 'setState called in render method causes infinite loop', recommendation: 'Move setState to lifecycle methods or event handlers', effort: 2, impact: 'high', file: filePath }); } } }); inRenderMethod = false; } } }); return bugs; } module.exports = detectStateInRender;