refactor: decompose CLI into commands, fix clippy, improve error handling

- Decompose main.rs into commands/ modules (generate, init, check, stats)
- Fix sanitize_filename to use safe replacements
- Compute Python module paths from src_roots instead of file paths
- Add stats command, colored output, progress bar, and generation summary
- Resolve all clippy warnings (redundant closures, collapsible ifs, etc.)
- Replace last unwrap() with proper error handling
- Add target/ to .gitignore, remove target/ artifacts from git tracking
This commit is contained in:
2026-02-15 03:21:36 +03:00
parent 736909ac3d
commit 9f823d2a2a
16 changed files with 626 additions and 3400 deletions

View File

@@ -53,7 +53,7 @@ impl CacheManager {
// Read cache file
let content = fs::read_to_string(&cache_file)
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
let cache_entry: CacheEntry = serde_json::from_str(&content)
.map_err(|e| ArchDocError::AnalysisError(format!("Failed to deserialize cache entry: {}", e)))?;
@@ -73,10 +73,10 @@ impl CacheManager {
// Check if source file has been modified since caching
let metadata = fs::metadata(file_path)
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
let modified_time = metadata.modified()
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
let modified_time: DateTime<Utc> = modified_time.into();
@@ -100,10 +100,10 @@ impl CacheManager {
// Get file modification time
let metadata = fs::metadata(file_path)
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
let modified_time = metadata.modified()
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
let modified_time: DateTime<Utc> = modified_time.into();
@@ -117,7 +117,7 @@ impl CacheManager {
.map_err(|e| ArchDocError::AnalysisError(format!("Failed to serialize cache entry: {}", e)))?;
fs::write(&cache_file, content)
.map_err(|e| ArchDocError::Io(e))
.map_err(ArchDocError::Io)
}
/// Generate cache key for a file path
@@ -156,11 +156,11 @@ impl CacheManager {
pub fn clear_cache(&self) -> Result<(), ArchDocError> {
if Path::new(&self.cache_dir).exists() {
fs::remove_dir_all(&self.cache_dir)
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
// Recreate cache directory
fs::create_dir_all(&self.cache_dir)
.map_err(|e| ArchDocError::Io(e))?;
.map_err(ArchDocError::Io)?;
}
Ok(())