ds-sfcoe-ailabs
Version:
AI-powered code review tool with static analysis integration for comprehensive code quality assessment.
123 lines (122 loc) • 4.49 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
*
* Provides methods for extracting rule types, generating suggested fixes,
* creating unique keys for deduplication, and categorizing rules by
* language type (JavaScript/TypeScript vs Apex).
*
* @example
* ```typescript
* const ruleType = RuleUtils.extractRuleType('no-unused-vars');
* const fix = RuleUtils.getSuggestedFix('no-unused-vars');
* const isJs = RuleUtils.isJavaScriptRule('@typescript-eslint/no-unused-vars');
* ```
*/
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
* @example
* ```typescript
* const ruleType = RuleUtils.extractRuleType('no-unused-vars');
* console.log(ruleType); // 'JavaScript Best Practices'
*
* const apexType = RuleUtils.extractRuleType('ApexCRUDViolation');
* console.log(apexType); // 'Apex Security'
* ```
*/
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
* @example
* ```typescript
* const fix = RuleUtils.getSuggestedFix('no-unused-vars', 'Variable x is unused');
* console.log(fix); // 'Remove unused variable or prefix with underscore'
*
* const genericFix = RuleUtils.getSuggestedFix('unknown-rule');
* console.log(genericFix); // 'Review and fix unknown-rule violation'
* ```
*/
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
* @example
* ```typescript
* const key = RuleUtils.createEntryKey('file.js', 'no-unused-vars', 42);
* console.log(key); // 'file.js-no-unused-vars-42'
*
* const apexKey = RuleUtils.createEntryKey('MyClass.cls', 'ApexComplexity', 15);
* console.log(apexKey); // 'MyClass.cls-ApexComplexity-15'
* ```
*/
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
* @example
* ```typescript
* const isJs = RuleUtils.isJavaScriptRule('@typescript-eslint/no-unused-vars');
* console.log(isJs); // true
*
* const isLwc = RuleUtils.isJavaScriptRule('@lwc/no-api-reassignments');
* console.log(isLwc); // true
*
* const isApex = RuleUtils.isJavaScriptRule('ApexComplexity');
* console.log(isApex); // false
* ```
*/
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
* @example
* ```typescript
* const isApex = RuleUtils.isApexRule('ApexCRUDViolation');
* console.log(isApex); // true
*
* const isApexComplexity = RuleUtils.isApexRule('ApexComplexity');
* console.log(isApexComplexity); // true
*
* const isJs = RuleUtils.isApexRule('no-unused-vars');
* console.log(isJs); // false
* ```
*/
static isApexRule(ruleId) {
return (RULE_TYPE_MAP[ruleId]?.includes('Apex') ||
ruleId.startsWith('Apex') ||
ruleId.includes('Apex'));
}
}