ricecoder_refactoring/
lib.rs

1//! Ricecoder Refactoring Engine
2//!
3//! A safe, language-agnostic refactoring engine with impact analysis, preview, and rollback capabilities.
4//!
5//! # Architecture
6//!
7//! The refactoring engine follows a language-agnostic, configuration-driven architecture:
8//!
9//! - **Language-Agnostic Core**: Generic refactoring engine that works with any language
10//! - **Configuration-Driven**: Language-specific behavior defined in YAML/JSON configuration files
11//! - **Pluggable Providers**: Language-specific adapters for Rust, TypeScript, Python, and generic fallback
12//! - **Storage Integration**: Uses `ricecoder-storage` for configuration management
13//! - **Safe by Default**: Automatic backups, validation, and rollback capabilities
14//!
15//! # Provider Priority Chain
16//!
17//! The engine implements a provider priority chain for language support:
18//!
19//! 1. External LSP Servers (language-specific, maintained by language communities)
20//! 2. Configured Refactoring Rules (YAML/JSON configuration files)
21//! 3. Built-in Language-Specific Providers (Rust, TypeScript, Python)
22//! 4. Generic Text-Based Refactoring (fallback for any language)
23//!
24//! # Example
25//!
26//! ```ignore
27//! use ricecoder_refactoring::RefactoringEngine;
28//! use ricecoder_refactoring::config::ConfigManager;
29//!
30//! // Create configuration manager
31//! let config_manager = ConfigManager::new(storage);
32//!
33//! // Create refactoring engine
34//! let engine = RefactoringEngine::new(config_manager);
35//!
36//! // Perform refactoring
37//! let result = engine.refactor(code, language, refactoring_type)?;
38//! ```
39
40pub mod adapters;
41pub mod config;
42pub mod error;
43pub mod impact;
44pub mod patterns;
45pub mod preview;
46pub mod providers;
47pub mod safety;
48pub mod types;
49pub mod validation;
50
51// Re-export commonly used types
52pub use adapters::{
53    GenericRefactoringProvider, PythonRefactoringProvider, RustRefactoringProvider,
54    TypeScriptRefactoringProvider,
55};
56pub use config::{ConfigLoader, ConfigManager, LanguageConfig, StorageConfigLoader};
57pub use error::{RefactoringError, Result};
58pub use impact::{Dependency, DependencyGraph, DependencyType, ImpactAnalyzer, Symbol, SymbolType};
59pub use patterns::{
60    PatternApplication, PatternExporter, PatternMatcher, PatternParameter, PatternScope,
61    PatternStore, PatternValidator, RefactoringPattern,
62};
63pub use preview::{DiffHunk, PreviewGenerator, UnifiedDiff};
64pub use providers::{LspProvider, LspProviderRegistry, ProviderRegistry, RefactoringProvider};
65pub use safety::{RollbackHandler, SafetyChecker};
66pub use types::{
67    ChangeType, FileChange, Refactoring, RefactoringOptions, RefactoringResult, RefactoringTarget,
68    RefactoringType, ValidationResult,
69};
70pub use validation::ValidationEngine;
71
72/// The main refactoring engine
73pub struct RefactoringEngine {
74    config_manager: ConfigManager,
75    provider_registry: ProviderRegistry,
76    impact_analyzer: ImpactAnalyzer,
77    preview_generator: PreviewGenerator,
78    safety_checker: SafetyChecker,
79    validation_engine: ValidationEngine,
80}
81
82impl RefactoringEngine {
83    /// Create a new refactoring engine
84    pub fn new(config_manager: ConfigManager, provider_registry: ProviderRegistry) -> Self {
85        Self {
86            config_manager,
87            provider_registry,
88            impact_analyzer: ImpactAnalyzer::new(),
89            preview_generator: PreviewGenerator::new(),
90            safety_checker: SafetyChecker::new(),
91            validation_engine: ValidationEngine::new(),
92        }
93    }
94
95    /// Get the configuration manager
96    pub fn config_manager(&self) -> &ConfigManager {
97        &self.config_manager
98    }
99
100    /// Get the provider registry
101    pub fn provider_registry(&self) -> &ProviderRegistry {
102        &self.provider_registry
103    }
104
105    /// Get the impact analyzer
106    pub fn impact_analyzer(&self) -> &ImpactAnalyzer {
107        &self.impact_analyzer
108    }
109
110    /// Get the preview generator
111    pub fn preview_generator(&self) -> &PreviewGenerator {
112        &self.preview_generator
113    }
114
115    /// Get the safety checker
116    pub fn safety_checker(&self) -> &SafetyChecker {
117        &self.safety_checker
118    }
119
120    /// Get the validation engine
121    pub fn validation_engine(&self) -> &ValidationEngine {
122        &self.validation_engine
123    }
124}