UNPKG

sfcoe-ailabs

Version:

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

94 lines (93 loc) 3.62 kB
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); } }