UNPKG

agentsqripts

Version:

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

77 lines (69 loc) 2.4 kB
/** * @file Accessibility analysis * @description Analyzes UI code for accessibility issues */ /** * Analyze accessibility issues in UI code * @param {string} content - Code content to analyze * @param {string} filePath - File path for context * @returns {Array} Array of accessibility issues */ function analyzeAccessibilityIssues(content, filePath) { const issues = []; const lines = content.split('\n'); lines.forEach((line, index) => { const trimmed = line.trim(); // Check for missing alt text on images if (trimmed.includes('<img') && !trimmed.includes('alt=')) { issues.push({ type: 'missing_alt_text', line: index + 1, content: trimmed, severity: 'HIGH', description: 'Image missing alt text for screen readers', suggestion: 'Add descriptive alt text for all images' }); } // Check for poor color contrast patterns if (trimmed.includes('color:') && trimmed.includes('#fff')) { if (trimmed.includes('background') && trimmed.includes('#f') && trimmed.length < 20) { issues.push({ type: 'poor_color_contrast', line: index + 1, content: trimmed, severity: 'HIGH', description: 'Potential low color contrast detected', suggestion: 'Ensure color contrast meets WCAG AA standards' }); } } // Check for missing ARIA labels if (trimmed.includes('<button') && !trimmed.match(/aria-label|aria-labelledby/)) { if (trimmed.includes('onclick') || trimmed.includes('>{')) { issues.push({ type: 'missing_aria_labels', line: index + 1, content: trimmed, severity: 'MEDIUM', description: 'Interactive element missing ARIA labels', suggestion: 'Add aria-label or aria-labelledby for better accessibility' }); } } // Check for keyboard navigation issues if (trimmed.includes('onClick') && !trimmed.includes('onKeyDown')) { issues.push({ type: 'keyboard_navigation', line: index + 1, content: trimmed, severity: 'MEDIUM', description: 'Click handler without keyboard equivalent', suggestion: 'Add onKeyDown handler for keyboard accessibility' }); } }); return issues; } module.exports = { analyzeAccessibilityIssues };