This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a Tauri desktop application for macOS disk space management (macOS磁盘扫描工具). The application scans directories to find large files and folders, allowing users to identify and delete space-consuming items.
Architecture:
- Frontend: React 18 + TypeScript + Vite + Tailwind CSS
- Backend: Rust + Tauri 2.0
- Package Manager: pnpm
- Development Server: Port 1420
pnpm dev # Start development server (Vite)
pnpm build # Build frontend (TypeScript + Vite)
pnpm preview # Preview production buildpnpm tauri dev # Start Tauri development (frontend + backend)
pnpm tauri build # Build Tauri application for productioncargo build # Build Rust backend
cargo run # Run Rust application directly├── src/ # Frontend React application
│ ├── App.tsx # Main application component
│ ├── components/ # React components
│ │ ├── Scanner.tsx # Scanning controls UI
│ │ ├── FileList.tsx # Results display component
│ │ └── ConfirmDialog.tsx # Delete confirmation dialog
│ ├── types.ts # TypeScript type definitions
│ └── main.tsx # React entry point
│
├── src-tauri/ # Backend Rust application
│ ├── src/
│ │ ├── lib.rs # Tauri application setup
│ │ ├── commands.rs # Tauri command handlers
│ │ └── scanner.rs # Core disk scanning logic
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
│
├── package.json # Node.js dependencies and scripts
├── vite.config.ts # Vite build configuration
├── tailwind.config.js # Tailwind CSS configuration
└── tsconfig.json # TypeScript configuration
- Tauri Commands: Frontend calls Rust functions via
invoke()API - Commands (
src-tauri/src/commands.rs):scan_directory: Recursively scans directory, returns large files/foldersdelete_path: Deletes files/directories with safety checks
- Data Flow: User input → React component → Tauri command → Rust scanner → Results display
- Scanner Module (
src-tauri/src/scanner.rs): Useswalkdircrate for recursive traversal - Performance: Has TODO comment about poor performance - consider optimization
- Safety: Prevents deletion of system directories (
/system,/library,/usr, etc.) - Configuration: Minimum file size and result limit filters
- React State: Local component state in
App.tsx(files, loading, error, confirmDelete) - Type Safety: Strong TypeScript types defined in
src/types.ts - UI Components: Modular components with Tailwind CSS styling
- Path Validation: Backend validates all file paths before operations
- System Protection: Blocks deletion of critical macOS system directories
- User Confirmation: Frontend confirmation dialog for all deletions
- Error Handling: Comprehensive error handling in both frontend and backend
- The scanner has a TODO comment about poor performance in
scanner.rs - Consider optimizing directory traversal or adding progress indicators
- Current implementation uses
walkdircrate with configurable limits
- No test infrastructure currently exists
- Consider adding:
- Rust unit tests for scanner logic
- React component tests
- Integration tests for Tauri commands
- Frontend: Vite with React plugin, TypeScript, Tailwind CSS
- Backend: Tauri 2.0 with custom protocol feature enabled
- Development: DevTools automatically open in debug mode
.claude/settings.local.jsondefines allowed Bash commands for Claude Code- Includes permissions for Tauri development commands and package management
- Reduced metadata reads: Added
create_file_info_from_metadata()to avoid duplicatestd::fs::metadata()calls - Optimized directory size calculation: Thread-safe
Arc<Mutex<HashMap>>for directory size tracking - Depth limiting: Added
max_depth(100)to prevent excessive recursion - Batch updates:
update_parent_sizes_optimized()batches parent directory updates - Progress logging: Tracing debug logs every 1000 processed items
- Skip root directory:
min_depth(1)improves traversal efficiency
- Fixed-height file list:
calc(100vh - 280px)height with vertical scrolling - Separate header/body tables: Header remains fixed while body scrolls
- Better column width distribution: Name (60%), Type (8%), Size (16%), Modified (16%), Actions (8%)
- Improved file selector: Added dialog plugin configuration and error handling
- Enhanced error display: Visual error feedback for file selector failures
- Dialog plugin enabled: Added to
tauri.conf.jsonwith default path configuration - Error handling: User-friendly error messages for file system access issues
- Real-time progress: Add progress percentage display during scanning
- Cancel functionality: Allow users to cancel long-running scans
- Parallel processing: Consider
rayonfor concurrent directory traversal - Incremental results: Display large files as they're discovered
- Caching mechanism: Cache scan results for frequently accessed directories
- Define command in
src-tauri/src/commands.rs - Add handler to
invoke_handlerinsrc-tauri/src/lib.rs - Call from frontend using
invoke()API
- Create component in
src/components/ - Import and use in
App.tsxor other components - Follow existing patterns for TypeScript types and Tailwind styling
- Edit
src-tauri/src/scanner.rsfor core scanning logic - Update
ScanOptionsinsrc-tauri/src/commands.rsif needed - Adjust frontend UI in
src/components/Scanner.tsx
- Ensure pnpm is installed:
npm install -g pnpm - Rust toolchain:
rustup update - Tauri CLI:
cargo install tauri-cli
- Frontend runs on port 1420 by default (configured in
vite.config.ts) - Tauri dev mode opens native window with embedded webview
- DevTools automatically open in debug builds