sfcoe-ailabs
Version:
AI-powered code review tool with static analysis integration for comprehensive code quality assessment.
66 lines (65 loc) • 2.27 kB
JavaScript
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'));
}
}