UNPKG

eslint-plugin-green

Version:

ESLint plugin for evaluating and promoting green coding practices

99 lines (98 loc) 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatScore = exports.calculateScore = void 0; const SCORE_CATEGORIES = [ { name: 'Performance', weight: 0.3, rules: [ 'no-inefficient-loops', 'prefer-array-methods', 'optimize-animations', 'optimize-data-structures' ] }, { name: 'DOM', weight: 0.2, rules: [ 'optimize-dom-operations', 'optimize-css-selectors' ] }, { name: 'Memory', weight: 0.2, rules: [ 'avoid-memory-leaks' ] }, { name: 'Media', weight: 0.15, rules: [ 'optimize-image-loading' ] }, { name: 'Network', weight: 0.15, rules: [ 'optimize-network-requests' ] } ]; const calculateScore = (messages) => { const result = { total: 0, categories: {}, issues: messages }; // Initialize categories SCORE_CATEGORIES.forEach(category => { result.categories[category.name] = { score: 0, weight: category.weight, issues: 0 }; }); // Count issues per category messages.forEach(message => { const ruleName = message.ruleId.replace('green/', ''); SCORE_CATEGORIES.forEach(category => { if (category.rules.includes(ruleName)) { result.categories[category.name].issues++; } }); }); // Calculate scores per category Object.keys(result.categories).forEach(categoryName => { const category = result.categories[categoryName]; const maxIssues = 10; // Maximum issues before score reaches 0 const issues = Math.min(category.issues, maxIssues); category.score = Math.max(0, 100 - (issues * 10)) * category.weight; result.total += category.score; }); return result; }; exports.calculateScore = calculateScore; const formatScore = (score) => { const lines = [ 'Green Code Score Report', '=====================', `Total Score: ${score.total.toFixed(1)}/100`, '', 'Category Breakdown:' ]; Object.entries(score.categories).forEach(([category, data]) => { lines.push(`${category}:`, ` Score: ${data.score.toFixed(1)}`, ` Weight: ${(data.weight * 100).toFixed(0)}%`, ` Issues: ${data.issues}`); }); if (score.issues.length > 0) { lines.push('', 'Issues Found:'); score.issues.forEach(issue => { lines.push(` - ${issue.message} (${issue.ruleId})`); }); } return lines.join('\n'); }; exports.formatScore = formatScore;