agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
51 lines (39 loc) • 2.18 kB
JavaScript
/**
* @file Analyze duplicate group and generate specific recommendation
* @description Single responsibility: Analyze group and route to appropriate recommendation generator
*/
const determineRefactoringStrategy = require('./determineRefactoringStrategy');
const generateUtilityFunctionRecommendation = require('./generateUtilityFunctionRecommendation');
const generateBaseClassRecommendation = require('./generateBaseClassRecommendation');
const generateSharedModuleRecommendation = require('./generateSharedModuleRecommendation');
const generateParameterizedFunctionRecommendation = require('./generateParameterizedFunctionRecommendation');
const generateConfigurationRecommendation = require('./generateConfigurationRecommendation');
const generateHigherOrderFunctionRecommendation = require('./generateHigherOrderFunctionRecommendation');
const generateGenericRecommendation = require('./generateGenericRecommendation');
/**
* Analyze a duplicate group and generate specific recommendation
*/
function analyzeGroupAndRecommend(group, projectContext) {
const { blocks, pattern, similarity } = group;
if (!blocks || blocks.length < 2) return null;
// Determine refactoring strategy based on pattern
const strategy = determineRefactoringStrategy(group);
// Generate recommendation based on strategy
switch (strategy) {
case 'EXTRACT_UTILITY_FUNCTION':
return generateUtilityFunctionRecommendation(group, projectContext);
case 'EXTRACT_BASE_CLASS':
return generateBaseClassRecommendation(group, projectContext);
case 'EXTRACT_SHARED_MODULE':
return generateSharedModuleRecommendation(group, projectContext);
case 'PARAMETERIZE_FUNCTION':
return generateParameterizedFunctionRecommendation(group, projectContext);
case 'EXTRACT_CONFIGURATION':
return generateConfigurationRecommendation(group, projectContext);
case 'USE_HIGHER_ORDER_FUNCTION':
return generateHigherOrderFunctionRecommendation(group, projectContext);
default:
return generateGenericRecommendation(group, projectContext);
}
}
module.exports = analyzeGroupAndRecommend;