UNPKG

sicua

Version:

A tool for analyzing project structure and dependencies

132 lines (131 loc) 5.03 kB
/** * 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[]; }