/** * Code Smell Detector Service * * Detects common code smells and anti-patterns using AST analysis and graph queries. * Provides actionable insights and refactoring suggestions. * * Supported Code Smells: * 1. God Functions (high complexity) * 2. Deep Nesting (>4 levels) * 3. Long Parameter Lists (>5 parameters) * 4. Long Functions (>50 lines) * 5. Dead Code (unused functions) * 6. Magic Numbers * 7. Duplicated Code Patterns */ import type { QueryService, CodeEntityInfo } from '../domain/query/queryService.js'; /** * Severity levels for code smells */ export type SmellSeverity = 'INFO' | 'WARNING' | 'ERROR'; /** * Types of code smells */ export type SmellType = 'god-function' | 'deep-nesting' | 'long-parameters' | 'long-function' | 'dead-code' | 'magic-number' | 'duplicated-code'; /** * Code smell detection result */ export interface CodeSmell { type: SmellType; severity: SmellSeverity; entity: CodeEntityInfo; location: { file: string; line: number; column?: number; }; message: string; explanation: string; suggestion: string; metrics?: { complexity?: number; nestingDepth?: number; parameterCount?: number; lineCount?: number; referenceCount?: number; }; } /** * Input for code smell detection */ export interface DetectSmellsInput { projectPath: string; symbols: string[]; severityThreshold?: SmellSeverity; smellTypes?: SmellType[]; config?: SmellDetectionConfig; } /** * Configuration for smell detection */ export interface SmellDetectionConfig { maxComplexity?: number; maxNestingDepth?: number; maxParameters?: number; maxFunctionLines?: number; includeDead?: boolean; detectMagicNumbers?: boolean; allowedNumbers?: number[]; detectDuplication?: boolean; minDuplicationTokens?: number; } /** * Result of code smell detection */ export interface DetectSmellsResult { projectPath: string; smells: CodeSmell[]; summary: { totalSmells: number; byType: Record; bySeverity: Record; }; stats: { filesAnalyzed: number; entitiesAnalyzed: number; detectionTimeMs: number; }; } /** * Service for detecting code smells */ export declare class CodeSmellDetector { private readonly deps; constructor(deps: { queryService: QueryService; }); /** * Detect code smells in a project */ detectSmells(input: DetectSmellsInput): Promise; /** * Detect God Function (high complexity) */ private detectGodFunction; /** * Detect Long Function */ private detectLongFunction; /** * Detect Long Parameter List */ private detectLongParameters; /** * Detect Dead Code (unused function) */ private detectDeadCode; /** * Check if severity meets threshold */ private meetsThreshold; /** * Generate summary statistics */ private generateSummary; }