UNPKG

@re-shell/cli

Version:

Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja

335 lines (334 loc) 9 kB
import { EventEmitter } from 'events'; export interface CodeQualityConfig { sonarQube?: SonarQubeConfig; eslint?: ESLintConfig; customRules?: CustomRule[]; thresholds?: QualityThresholds; excludePatterns?: string[]; includePatterns?: string[]; generateReport?: boolean; outputPath?: string; integrations?: QualityIntegration[]; } export interface SonarQubeConfig { serverUrl: string; token?: string; projectKey: string; projectName?: string; sources?: string[]; exclusions?: string[]; qualityGate?: string; profile?: string; properties?: Record<string, string>; } export interface ESLintConfig { configPath?: string; rules?: Record<string, any>; extends?: string[]; plugins?: string[]; parser?: string; parserOptions?: any; env?: Record<string, boolean>; } export interface CustomRule { id: string; name: string; description: string; severity: 'info' | 'minor' | 'major' | 'critical' | 'blocker'; type: 'bug' | 'vulnerability' | 'code_smell' | 'security_hotspot'; pattern?: RegExp; check: (file: FileAnalysis) => RuleViolation[]; autoFix?: (content: string, violations: RuleViolation[]) => string; } export interface QualityThresholds { bugs: number; vulnerabilities: number; codeSmells: number; coverage: number; duplicatedLines: number; maintainabilityRating: 'A' | 'B' | 'C' | 'D' | 'E'; reliabilityRating: 'A' | 'B' | 'C' | 'D' | 'E'; securityRating: 'A' | 'B' | 'C' | 'D' | 'E'; } export interface QualityIntegration { type: 'github' | 'gitlab' | 'slack' | 'jira' | 'custom'; config: any; events: string[]; } export interface FileAnalysis { path: string; content: string; lines: number; complexity: number; maintainabilityIndex: number; dependencies: string[]; exports: string[]; imports: string[]; functions: FunctionInfo[]; classes: ClassInfo[]; issues: Issue[]; } export interface FunctionInfo { name: string; startLine: number; endLine: number; complexity: number; parameters: number; returns: string; documented: boolean; } export interface ClassInfo { name: string; startLine: number; endLine: number; methods: number; properties: number; extends?: string; implements?: string[]; documented: boolean; } export interface Issue { rule: string; severity: 'info' | 'minor' | 'major' | 'critical' | 'blocker'; type: 'bug' | 'vulnerability' | 'code_smell' | 'security_hotspot'; message: string; line: number; column?: number; effort?: string; debt?: string; tags?: string[]; } export interface RuleViolation { line: number; column?: number; message: string; severity: Issue['severity']; suggestion?: string; autoFixable?: boolean; } export interface QualityAnalysisResult { project: string; timestamp: Date; summary: QualitySummary; files: FileAnalysis[]; metrics: QualityMetrics; issues: Issue[]; sonarQube?: SonarQubeResult; trends?: QualityTrend[]; recommendations: string[]; } export interface QualitySummary { totalFiles: number; totalLines: number; totalIssues: number; bugCount: number; vulnerabilityCount: number; codeSmellCount: number; duplicatedLines: number; technicalDebt: string; maintainabilityRating: string; reliabilityRating: string; securityRating: string; } export interface QualityMetrics { complexity: ComplexityMetrics; maintainability: MaintainabilityMetrics; reliability: ReliabilityMetrics; security: SecurityMetrics; coverage: CoverageMetrics; duplication: DuplicationMetrics; } export interface ComplexityMetrics { average: number; maximum: number; distribution: Record<string, number>; hotspots: ComplexityHotspot[]; } export interface ComplexityHotspot { file: string; function: string; complexity: number; line: number; suggestion: string; } export interface MaintainabilityMetrics { index: number; rating: string; factors: MaintainabilityFactor[]; debt: string; } export interface MaintainabilityFactor { factor: string; impact: number; description: string; } export interface ReliabilityMetrics { rating: string; bugs: number; effort: string; issues: Issue[]; } export interface SecurityMetrics { rating: string; vulnerabilities: number; hotspots: number; effort: string; issues: Issue[]; } export interface CoverageMetrics { lines: number; branches: number; functions: number; overall: number; } export interface DuplicationMetrics { lines: number; blocks: number; files: number; percentage: number; duplicatedFiles: DuplicatedFile[]; } export interface DuplicatedFile { file: string; duplicatedLines: number; duplicates: DuplicateBlock[]; } export interface DuplicateBlock { startLine: number; endLine: number; duplicatedIn: string[]; } export interface SonarQubeResult { qualityGate: QualityGateResult; measures: SonarMeasure[]; issues: SonarIssue[]; hotspots: SecurityHotspot[]; } export interface QualityGateResult { status: 'OK' | 'WARN' | 'ERROR'; conditions: QualityGateCondition[]; } export interface QualityGateCondition { metric: string; operator: string; value: string; actual: string; status: 'OK' | 'WARN' | 'ERROR'; } export interface SonarMeasure { metric: string; value: string; component: string; } export interface SonarIssue { key: string; rule: string; severity: string; component: string; line?: number; message: string; effort?: string; debt?: string; status: string; type: string; } export interface SecurityHotspot { key: string; component: string; line?: number; message: string; status: string; vulnerabilityProbability: 'HIGH' | 'MEDIUM' | 'LOW'; securityCategory: string; } export interface QualityTrend { date: Date; metric: string; value: number; change: number; direction: 'improving' | 'degrading' | 'stable'; } export interface QualityReport { summary: QualityReportSummary; analysis: QualityAnalysisResult; comparison?: QualityComparison; actionPlan: ActionItem[]; timestamp: Date; } export interface QualityReportSummary { overallRating: string; totalIssues: number; criticalIssues: number; technicalDebt: string; coverage: number; maintainabilityTrend: 'improving' | 'degrading' | 'stable'; } export interface QualityComparison { baseline: Date; changes: QualityChange[]; improvements: string[]; regressions: string[]; } export interface QualityChange { metric: string; before: number; after: number; change: number; percentage: number; } export interface ActionItem { priority: 'high' | 'medium' | 'low'; category: 'bug' | 'vulnerability' | 'maintainability' | 'coverage'; title: string; description: string; effort: string; impact: string; files?: string[]; } export declare class CodeQualityAnalyzer extends EventEmitter { private config; constructor(config: CodeQualityConfig); analyze(projectPath: string): Promise<QualityAnalysisResult>; private findSourceFiles; private analyzeFile; private calculateComplexity; private calculateMaintainabilityIndex; private extractDependencies; private extractExports; private extractImports; private extractFunctions; private extractClasses; private findFunctionEnd; private findClassEnd; private calculateFunctionComplexity; private countParameters; private countMethods; private countProperties; private isFunctionDocumented; private isClassDocumented; private analyzeForIssues; private runESLintAnalysis; private generateESLintConfig; private mapESLintSeverity; private runSonarQubeAnalysis; private generateSonarProperties; private fetchSonarQubeResults; private applyCustomRules; private calculateMetrics; private calculateComplexityDistribution; private identifyComplexityHotspots; private calculateMaintainabilityRating; private identifyMaintainabilityFactors; private calculateTechnicalDebt; private generateSummary; private generateRecommendations; private calculateTrends; generateReport(analysisResult: QualityAnalysisResult): Promise<QualityReport>; private generateActionPlan; private saveReport; private generateHtmlReport; private createEmptySummary; private createEmptyMetrics; } export declare function createCustomRule(id: string, name: string, check: (file: FileAnalysis) => RuleViolation[]): CustomRule; export declare function analyzeCodeQuality(projectPath: string, config?: Partial<CodeQualityConfig>): Promise<QualityReport>;