sicua
Version:
A tool for analyzing project structure and dependencies
132 lines (131 loc) • 5.03 kB
TypeScript
/**
* Updated component scoring analyzer with enhanced pattern detection
* and support for new metrics (accessibility, performance)
*/
import { ComponentRelation, DependencyAnalysisDetailedResult, ErrorHandlingCompleteAnalysis, ComplexityAnalysisResult, TypeAnalysisResult, SEOAnalysisResult, TranslationAnalysisResult, ComponentSimilarity } from "../../types";
import { ScoringWeights, ScoringMultipliers, SCORE_RANGES } from "./ScoringCriteria";
import { ScoringResult } from "./ScoringAggregator";
import { GeneralAnalysisResult } from "../general/types/generalAnalyzer.types";
import { ComponentFlowAnalysisResult } from "../componentFlow/types";
export interface ScoredComponentRelation extends ComponentRelation {
score: number;
}
export interface ComponentScoringOptions {
weights?: ScoringWeights;
multipliers?: ScoringMultipliers;
includeScoreBreakdown?: boolean;
minimumScore?: number;
excludeFileTypes?: string[];
}
export interface AnalyzerResults {
generalAnalysis?: GeneralAnalysisResult;
dependencyAnalysis?: DependencyAnalysisDetailedResult;
errorHandlingAnalysis?: ErrorHandlingCompleteAnalysis;
complexityAnalysis?: ComplexityAnalysisResult;
typeAnalysis?: TypeAnalysisResult;
seoAnalysis?: SEOAnalysisResult;
translationAnalysis?: TranslationAnalysisResult;
componentFlowAnalysis?: ComponentFlowAnalysisResult;
deduplicationAnalysis?: ComponentSimilarity[];
}
export interface ComponentScoringReport {
topComponents: ScoredComponentRelation[];
scoringStatistics: {
totalComponents: number;
averageScore: number;
scoreDistribution: Record<keyof typeof SCORE_RANGES, number>;
highestScore: number;
lowestScore: number;
fileTypeDistribution: Record<string, {
count: number;
averageScore: number;
}>;
};
categoryBreakdown: {
criticalIssues: number;
highPriorityIssues: number;
mediumPriorityIssues: number;
lowPriorityIssues: number;
minimalIssues: number;
};
detailedResults?: Map<string, ScoringResult>;
excludedComponents?: {
constants: number;
configs: number;
types: number;
total: number;
};
}
export declare class ComponentScoringAnalyzer {
private scoringAggregator;
private options;
constructor(options?: ComponentScoringOptions);
/**
* Calculate top scoring (most problematic) components with component filtering
*/
calculateTopScoringComponents(components: ComponentRelation[], analyzerResults: AnalyzerResults, topCount?: number): Promise<ScoredComponentRelation[]>;
/**
* Generate a comprehensive scoring report with relative normalization
*/
generateScoringReport(components: ComponentRelation[], analyzerResults: AnalyzerResults): Promise<ComponentScoringReport>;
/**
* Apply relative normalization to create meaningful comparative scores
*/
private applyRelativeNormalization;
/**
* Enhanced summary report that explains the normalization
*/
generateSummaryReport(report: ComponentScoringReport): string;
/**
* Get detailed scoring breakdown for a specific component with filtering
*/
getComponentScoreBreakdown(component: ComponentRelation, analyzerResults: AnalyzerResults): Promise<string>;
/**
* Calculate scoring statistics with file type breakdown
*/
private calculateStatistics;
/**
* Calculate category breakdown for reporting
*/
private calculateCategoryBreakdown;
/**
* Filter components by score range
*/
filterComponentsByScoreRange(scoredComponents: ScoredComponentRelation[], range: keyof typeof SCORE_RANGES): ScoredComponentRelation[];
/**
* Get components with specific problematic patterns - ENHANCED
*/
getComponentsWithPattern(scoredComponents: ScoredComponentRelation[], analyzerResults: AnalyzerResults, pattern: "circular-dependencies" | "missing-error-handling" | "high-complexity" | "type-issues" | "seo-issues" | "accessibility-issues" | "performance-issues"): ScoredComponentRelation[];
/**
* Check if component has circular dependencies
*/
private hasCircularDependencies;
/**
* Check if component has missing error handling
*/
private hasMissingErrorHandling;
/**
* Check if component has high complexity
*/
private hasHighComplexity;
/**
* Check if component has type issues
*/
private hasTypeIssues;
/**
* NEW: Check if component has SEO issues
*/
private hasSEOIssues;
/**
* NEW: Check if component has accessibility issues
*/
private hasAccessibilityIssues;
/**
* NEW: Check if component has performance issues
*/
private hasPerformanceIssues;
/**
* Get components by file type
*/
getComponentsByFileType(scoredComponents: ScoredComponentRelation[], fileType: string): ScoredComponentRelation[];
}