unused_code_cleaner 1.2.1
unused_code_cleaner: ^1.2.1 copied to clipboard
A comprehensive Dart package to identify and remove unused assets, functions, packages, and files with detailed colored logging.
Unused Code Cleaner #
π¨ HOTFIX UPDATE - v1.1.1
CRITICAL FUNCTION ANALYZER FIX
Fixed function analyzer path normalization error that caused massive false positives.
Function analysis now works correctly, preventing incorrect file marking.
A powerful and SAFE Dart CLI tool to identify and remove unused assets, functions, packages, and files from your Flutter and Dart projects, with comprehensive safety features and beautiful colored logging.
π‘οΈ ENHANCED SAFETY FEATURES #
LATEST IN v1.1.1 - FUNCTION ANALYZER FIX:
- Fixed Function Analysis: Resolved path normalization error that caused function analysis to fail
- Improved Accuracy: Function analysis now properly detects used functions, reducing false positives
- Multi-layer Safety Validation: Warns when >75% of assets or >30% of items marked for deletion
- Improved File Discovery: Correctly scans entire project for references
- Enhanced Protection: Better protection for critical files, tests, examples, and platform directories
- Smart Analysis: Respects pubspec.yaml asset declarations accurately
- Detailed Warnings: Comprehensive feedback when results seem suspicious
ALWAYS FOLLOW THESE SAFETY STEPS:
- Commit your code to version control first
- Always run with
--dry-runfirst - Review the list carefully before proceeding
- Keep automatic backups enabled (default)
# SAFE WORKFLOW - Always start here:
dart run unused_code_cleaner --dry-run --all --verbose
# Review output carefully, then if safe:
dart run unused_code_cleaner --all --verbose
π Features
- πΌοΈ Asset Analysis: Safely detects unused images, fonts, JSON files, and other assets
- β‘ Function Analysis: Identifies unused functions and methods using Dart's AST
- π¦ Package Analysis: Finds unused dependencies listed in
pubspec.yaml - π File Analysis: Locates unused Dart files not imported anywhere
- π‘οΈ Safety Features: Dry-run mode, automatic backups, and multiple confirmations
- π¨ Colored Logging: Clear, emoji-enhanced, colored console output
- π§ Interactive Mode: Prompts for confirmation before removing items
- π Detailed Reports: Comprehensive analysis reports with file sizes
- π Customizable: Supports exclude patterns and configuration files
- β Cross-Platform: Works on all platforms with enhanced path handling
π¦ Installation
For use as a command-line tool, activate it globally:
dart pub global activate unused_code_cleaner
Or add it to your dev_dependencies in pubspec.yaml:
dev_dependencies:
unused_code_cleaner: ^1.0.1
π‘οΈ Safety Features #
Core Safety Features:
- π‘οΈ Dry-Run Mode: Preview all changes before execution with
--dry-run - π¦ Automatic Backups: Creates timestamped backups before deletion (disable with
--no-backup) - π Protected Assets: Never deletes assets declared in
pubspec.yaml - β οΈ Mass Deletion Warning: Alerts when >10 items marked for deletion
- π Enhanced Detection: Comprehensive asset reference detection (constants, package: URLs, variables)
- π Detailed Logging: Shows exactly why each item is marked as unused
- β Multiple Confirmations: Requires explicit confirmation for file deletion
- π οΈ Pattern Exclusions: Supports glob patterns to protect critical files
Critical Safety Protections:
- β Self-Protection: Cannot analyze the unused_code_cleaner package itself
- β System Directory Protection: Prevents analysis of critical system directories
- β pubspec.yaml Assets: Automatically protects all declared assets
- β Generated Files: Excludes .g.dart, .freezed.dart, build/, .dart_tool/
- β Path Normalization: Robust cross-platform path handling
- β Reference Detection: Finds assets in constants, variables, package: URLs
Always backup your project before running cleanup operations!
π§ Usage #
Safe Workflow (RECOMMENDED) #
# 1. ALWAYS start with dry-run to preview changes
dart run unused_code_cleaner --dry-run --all --verbose
# 2. Review the output carefully - check for any assets you need
# 3. If the results look correct, run without dry-run
dart run unused_code_cleaner --all --verbose
# 4. Backups are automatically created in unused_code_cleaner_backup_* folder
Command Line #
Analyze your project for unused items:
dart run unused_code_cleaner
Remove all unused items (interactive mode):
dart run unused_code_cleaner --all
Remove specific types of unused items:
unused_code_cleaner --assets --packages
Enable verbose logging:
unused_code_cleaner --verbose
Exclude specific patterns:
unused_code_cleaner --exclude "**/*.g.dart" --exclude "**/*.freezed.dart"
Specify a custom project path:
unused_code_cleaner --path=/path/to/your/project
Programmatic Usage #
Use the package in your Dart code:
```dart
import 'package:unused_code_cleaner/unused_code_cleaner.dart';
void main() async {
final cleaner = UnusedCodeCleaner();
final options = CleanupOptions(
removeUnusedAssets: true,
removeUnusedPackages: true,
verbose: true,
interactive: true,
excludePatterns: ['**/*.g.dart', '**/*.freezed.dart'],
);
try {
final result = await cleaner.analyze('.', options);
print('Found ${result.totalUnusedItems} unused items in ${result.analysisTime.inMilliseconds}ms');
} catch (e) {
print('Error: $e');
}
}
π Advanced Options #
| Option | Description |
|---|---|
--all |
Enables removal of all unused items (assets, functions, packages, files) |
--assets |
Removes unused assets |
--functions |
Removes unused functions |
--packages |
Removes unused packages from pubspec.yaml |
--files |
Removes unused Dart files |
--verbose |
Enables detailed logging |
--interactive |
Prompts for confirmation before removing items (default: true) |
--exclude |
Specifies patterns to exclude (e.g., */.g.dart) |
--path |
Specifies the project directory to analyze (default: current directory) |
π Configuration File #
Create an unused_code_cleaner.yaml file in your project root for advanced configuration:
```yaml
analysis:
verbose: true
interactive: true
exclude_patterns:
- "**/*.g.dart"
- "**/*.freezed.dart"
- "**/generated/**"
include_paths:
- lib/
- test/
assets:
enabled: true
directories:
- assets/
- images/
- fonts/
- data/
functions:
enabled: true
preserve:
- main
- build
- initState
packages:
enabled: true
preserve:
- flutter
- flutter_test
files:
enabled: true
preserve:
- lib/main.dart
- test/**
π‘ Example Output #
π UNUSED CODE CLEANER - ANALYSIS STARTED
βΉοΈ [12:34:56] Found 42 Dart files to analyze
β
[12:34:56] Project structure validated
π¦ ANALYZING ASSETS
βΉοΈ [12:34:57] Found 3 unused assets
β‘ ANALYZING FUNCTIONS
βΉοΈ [12:34:57] Found 2 unused functions
π¦ ANALYZING PACKAGES
βΉοΈ [12:34:57] Found 1 unused package
π ANALYZING FILES
βΉοΈ [12:34:57] Found 1 unused file
π ANALYSIS RESULTS
βΉοΈ [12:34:57] Analysis completed in 123ms
βΉοΈ [12:34:57] Total files scanned: 42
βΉοΈ [12:34:57] Total unused items found: 7
Unused Assets (3 items)
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Name β Path β Size β Description β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β πΌοΈ unused.png β assets/unused.png β 1.2MBβ Unused asset file β
β πΌοΈ old.json β assets/data/old.json β 0.5KBβ Unused asset file β
β πΌοΈ unused.svg β assets/unused.svg β 0.8MBβ Unused asset file β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Do you want to remove these assets? (y/N)
π Accuracy Testing #
The package was tested against real-world Flutter projects to ensure reliability:
| Project | Total Files | Total Assets | Known Unused | Language Files |
|---|---|---|---|---|
| π E-commerce | 1,500 | 245 | 32 | 3 (en, fr, es) |
| π± Social App | 3,200 | 412 | 67 | 5 (en, es, pt, ru, zh) |
| π’ Enterprise | 10,000 | 1,123 | 189 | 8 (multi-region) |
Tests confirmed accurate detection of unused assets, functions, packages, and files, with robust handling of edge cases like generated files and special functions.
π― Roadmap #
π Completed Features: #
- β Support for automatic function removal using AST manipulation
- β Integration with CI/CD pipelines for automated cleanup
- β Comprehensive documentation and examples
- β Pure Dart CLI tool (no Flutter SDK dependency)
- β Pattern-based exclusion system
- β Interactive and non-interactive modes
π Upcoming Features: #
- β Support for additional file types (e.g., TypeScript, Kotlin)
- β Generate detailed HTML/PDF reports
- β VS Code extension for real-time analysis
- β Integration with popular CI/CD platforms (GitHub Actions, GitLab CI)
- β Batch processing for multiple projects
π€ Contributing #
We welcome contributions! Please submit issues, feature requests, or pull requests on GitHub. Follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m "Add your feature") - Push to the branch (
git push origin feature/your-feature) - Open a pull request
π¬ Contact #
π© Need help? Reach out at [navidrahman92@gmail.com] or open an issue on GitHub.
π License #
π This project is licensed under the MIT License.