unused_code_cleaner 1.0.1+hotfix.1
unused_code_cleaner: ^1.0.1+hotfix.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 #
π¨ CRITICAL SAFETY UPDATE - v1.0.1+hotfix
ALL USERS MUST UPDATE IMMEDIATELY
Previous versions (1.0.0 and earlier) contained a critical bug that could delete entire projects.
Use only version 1.0.1+hotfix or later for safe operation.
A powerful Dart CLI tool to identify and remove unused assets, functions, packages, and files from your Flutter and Dart projects, keeping your codebase clean and optimized with beautiful colored logging.
π Features
- πΌοΈ Asset Analysis: Detects unused images, fonts, JSON files, and other assets declared in
pubspec.yaml. - β‘ Function Analysis: Identifies unused functions and methods using Dart's AST (Abstract Syntax Tree).
- π¦ Package Analysis: Finds unused dependencies listed in
pubspec.yaml. - π File Analysis: Locates unused Dart files not imported anywhere in the project.
- π¨ Colored Logging: Provides clear, emoji-enhanced, colored console output for easy debugging.
- π§ Interactive Mode: Prompts for confirmation before removing unused items.
- π Detailed Reports: Generates comprehensive analysis reports with file sizes and descriptions.
- π Customizable: Supports exclude patterns, include paths, and configuration via
unused_code_cleaner.yaml. - β Cross-Platform: Works seamlessly with Flutter and Dart projects on all platforms.
π¦ Installation
β οΈ IMPORTANT: Always use version 1.0.1+hotfix or later for safety.
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 for project-specific use:
dev_dependencies:
unused_code_cleaner: ^1.0.1 # Always use 1.0.1+hotfix or later
Then, fetch the dependencies:
dart pub get
οΏ½οΈ Safety Features #
Version 1.0.1+hotfix includes critical safety improvements:
- β Self-Protection: Cannot analyze the unused_code_cleaner package itself
- β System Directory Protection: Prevents analysis of critical system directories
- β Enhanced Confirmations: Multi-level confirmation dialogs with detailed file lists
- β Pattern Safety: Uses specific path matching instead of broad substring matching
- β Default Exclusions: Automatically excludes generated files, git, build artifacts
- β Cross-Platform Safety: Robust path normalization and validation
Always backup your project before running cleanup operations!
οΏ½π§ Usage #
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.