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