agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
62 lines (53 loc) • 2.13 kB
JavaScript
/**
* @file Generate base class extraction recommendation
* @description Single responsibility: Create recommendation for extracting base classes
*/
const extractClassNames = require('./extractClassNames');
const findCommonMethods = require('./findCommonMethods');
const findCommonPrefix = require('./findCommonPrefix');
const determineBestLocation = require('./determineBestLocation');
const calculateLinesReduced = require('./calculateLinesReduced');
const estimateRefactoringEffort = require('./estimateRefactoringEffort');
const generateBaseClassCode = require('./generateBaseClassCode');
const generateInheritanceExamples = require('./generateInheritanceExamples');
/**
* Generate base class extraction recommendation
*/
function generateBaseClassRecommendation(group, projectContext) {
const { blocks } = group;
const classNames = extractClassNames(blocks);
const commonMethods = findCommonMethods(blocks);
const suggestedClassName = `Base${findCommonPrefix(classNames)}`;
const suggestedLocation = determineBestLocation(blocks, projectContext, 'class');
return {
type: 'EXTRACT_BASE_CLASS',
title: `Extract base class: ${suggestedClassName}`,
description: `${blocks.length} classes share common method implementations`,
impact: {
linesReduced: calculateLinesReduced(blocks),
filesAffected: new Set(blocks.map(b => b.file)).size,
maintainability: 'HIGH',
effort: estimateRefactoringEffort(blocks, 'EXTRACT_BASE_CLASS')
},
implementation: {
suggestedName: suggestedClassName,
suggestedLocation,
step1: {
action: 'Create base class',
location: suggestedLocation,
code: generateBaseClassCode(commonMethods, suggestedClassName)
},
step2: {
action: 'Extend from base class',
examples: generateInheritanceExamples(classNames, suggestedClassName)
}
},
benefits: [
'Follows DRY principle',
'Enables polymorphism',
'Centralizes shared behavior',
'Simplifies testing'
]
};
}
module.exports = generateBaseClassRecommendation;