sfcoe-ailabs
Version:
AI-powered code review tool with static analysis integration for comprehensive code quality assessment.
94 lines (93 loc) • 3.62 kB
JavaScript
import { FileUtils } from './fileUtils.js';
import { CodeAnalysisUtils } from './codeAnalysisUtils.js';
import { RuleUtils } from './ruleUtils.js';
import { DOCUSIGN_SPECIFIC_ISSUES } from './constants.js';
/**
* Utility class for Docusign-specific code analysis rules
*/
export class DocuSignRuleUtils {
/**
* Check if file uses old test framework
*
* @param content - The file content to analyze
* @returns True if the file uses old test framework patterns
*/
static hasOldTestFramework(content) {
return CodeAnalysisUtils.hasOldTestFramework(content);
}
/**
* Check if file uses Schema.getGlobalDescribe()
*
* @param content - The file content to analyze
* @returns Array of Docusign issues found related to Schema.getGlobalDescribe() usage
*/
static hasGlobalDescribeUsage(content) {
const issues = [];
if (content?.toLowerCase().includes('getglobaldescribe()')) {
const lines = content.split('\n');
for (let i = 0; i < lines.length; i++) {
if (lines[i]?.toLocaleLowerCase().includes('getglobaldescribe()')) {
issues.push({
lineNumber: i + 1,
ruleType: DOCUSIGN_SPECIFIC_ISSUES.GLOBAL_DESCRIBE_USAGE.ruleType,
issue: DOCUSIGN_SPECIFIC_ISSUES.GLOBAL_DESCRIBE_USAGE.issue.replace('$line_number', (i + 1).toString()),
});
break; // Only show first occurrence
}
}
}
return issues;
}
/**
* Get Docusign issues for a specific file
*
* @param filePath - The path of the file being analyzed
* @param content - The content of the file to analyze
* @returns Array of Docusign-specific issues found in the file
*/
static getDocuSignIssuesForFile(filePath, content) {
const issues = [];
// Test framework check
if (FileUtils.isTestFile(filePath, content) &&
this.hasOldTestFramework(content)) {
issues.push({
lineNumber: 1,
ruleType: DOCUSIGN_SPECIFIC_ISSUES.TEST_FRAMEWORK.ruleType,
issue: DOCUSIGN_SPECIFIC_ISSUES.TEST_FRAMEWORK.issue,
});
}
// Schema.getGlobalDescribe check
issues.push(...this.hasGlobalDescribeUsage(content));
return issues;
}
/**
* Create JavaScript-specific table entries for common issues
*
* @param fileName - The name of the JavaScript file being analyzed
* @param content - The content of the file to analyze
* @param addedEntries - Set of already processed entry keys to avoid duplicates
* @returns Array of table entries for JavaScript-specific issues found
*/
static createJavaScriptTableEntries(fileName, content, addedEntries) {
return CodeAnalysisUtils.analyzeJavaScriptContent(fileName, content, addedEntries);
}
/**
* Extract rule type from hint ruleId
*
* @param ruleId - The rule identifier to extract type from
* @returns The rule type category
*/
static extractRuleType(ruleId) {
return RuleUtils.extractRuleType(ruleId);
}
/**
* Get suggested fix for JavaScript rules
*
* @param ruleId - The rule identifier to get fix for
* @param message - The rule message for context
* @returns Suggested fix description for the rule
*/
static getSuggestedFixForJavaScript(ruleId, message) {
return RuleUtils.getSuggestedFix(ruleId, message);
}
}