UNPKG

sfcoe-ailabs

Version:

AI-powered code review tool with static analysis integration for comprehensive code quality assessment.

66 lines (65 loc) 2.27 kB
import { REVIEW_COMMAND_HINTS_DEFAULTS, RULE_TYPE_MAP, SUGGESTED_FIXES, } from './constants.js'; /** * Rule type mapping utility for various linting and analysis rules */ export class RuleUtils { /** * Extract rule type from rule ID * * @param ruleId - The rule identifier to extract type from * @returns The rule type category or 'General' if not found */ static extractRuleType(ruleId) { return RULE_TYPE_MAP[ruleId] || REVIEW_COMMAND_HINTS_DEFAULTS.RULE_TYPE; } /** * Get suggested fix for a rule ID * * @param ruleId - The rule identifier to get fix for * @param message - Optional rule message for context * @returns Suggested fix description for the rule */ static getSuggestedFix(ruleId, message) { return (SUGGESTED_FIXES[ruleId] || `Review and fix ${ruleId} violation${message !== undefined ? `: ${message}` : ''}`); } /** * Create a unique entry key for deduplication * * @param fileName - The file name * @param ruleId - The rule identifier * @param lineNumber - The line number where the issue occurs * @returns Unique key string for deduplication */ static createEntryKey(fileName, ruleId, lineNumber) { return `${fileName}-${ruleId}-${lineNumber}`; } /** * Check if a rule ID is a JavaScript/TypeScript rule * * @param ruleId - The rule identifier to check * @returns True if the rule is for JavaScript/TypeScript/LWC code */ static isJavaScriptRule(ruleId) { const ruleType = RULE_TYPE_MAP[ruleId]; if (!ruleType) { return false; } return (ruleId.startsWith('@typescript-eslint/') || ruleId.startsWith('@lwc/') || ruleType.includes('JavaScript') || ruleType.includes('TypeScript') || ruleType.includes('LWC')); } /** * Check if a rule ID is an Apex rule * * @param ruleId - The rule identifier to check * @returns True if the rule is for Apex code */ static isApexRule(ruleId) { return (RULE_TYPE_MAP[ruleId]?.includes('Apex') || ruleId.startsWith('Apex') || ruleId.includes('Apex')); } }