Flatten Rust
Высокопроизводительный инструмент для флаттенинга кодовой базы, написанный на Rust. Обеспечивает значительное ускорение обработки по сравнению с Python-версией, лучшую работу с памятью и параллельную обработку файлов.
🚀 Особенности
- ⚡ Высокая производительность: В десятки раз быстрее Python-версии благодаря оптимизированной работе с памятью
- 🔄 Параллельная обработка: Многопоточная обработка файлов с использованием Rayon
- 💾 Эффективная работа с памятью: Использование memory mapping для больших файлов
- 📊 Прогресс-бары: Визуальный отслеживание прогресса обработки
- 🎯 Умное пропускание: Гибкая настройка исключений папок и файлов
- 🔍 Авто-детекция проектов: Автоматическая настройка исключений для разных языков
- 📈 Статистика: Подробная статистика обработки
- 🌍 Кросс-платформенность: Работает на Linux, Windows, macOS
- 📏 Оптимизированный размер: Минимальный размер бинарного файла
- 🔧 Идиоматический код: Полная совместимость с clippy и стандартами Rust
📦 Установка
Из crates.io (рекомендуется)
Требования
- Rust 1.70+ (рекомендуется использовать rustup)
Сборка из исходников
Готовый бинарный файл будет находиться в target/release/flatten-rust.
Загрузка готовых бинарников
Скачайте готовый бинарный файл из Releases:
- Linux x86_64:
flatten-rust-linux-x86_64 - Windows x86_64:
flatten-rust-windows-x86_64.exe - macOS x86_64:
flatten-rust-macos-x86_64 - macOS ARM64:
flatten-rust-macos-aarch64
🎯 Использование
Базовый синтаксис
Легко запоминаемые шорткоманды
| Длинная опция | Короткая | Описание | Легко запомнить |
|---|---|---|---|
--folders |
-f |
Папки для обработки | folders |
--skip-folders |
-s |
Папки для пропуска | skip |
--output |
-o |
Выходной файл | output |
--auto-detect |
-a |
Авто-детекция проекта | auto |
--threads |
-t |
Параллельные потоки | threads |
--max-file-size |
-m |
Макс. размер файла | max |
--dry-run |
-d |
Тестовый запуск | dry |
--stats |
-S |
Статистика | Stats |
--show-skipped |
-k |
Показать пропущенные | keep |
--list-templates |
-l |
Список шаблонов | list |
--enable-template |
-e |
Включить шаблон | enable |
--disable-template |
-D |
Отключить шаблон | Disable |
--force-update |
-u |
Обновить шаблоны | update |
--check-internet |
-n |
Проверить интернет | network |
Примеры использования
Обработка одной папки
Обработка с авто-детекцией проекта
Обработка с статистикой
Dry run - просмотр что будет обработано
Обработка нескольких папок с пропуском node_modules
Показ пропущенных папок в дереве
Настройка потоков обработки
Ограничение размера файлов
Управление шаблонами
# Список доступных шаблонов
# Включить шаблоны для Rust и Node.js
# Принудительное обновление шаблонов
# Отключить проверку интернета
⚙️ Опции командной строки
Обязательные
-f, --folders <папки...>: Базовые папки для обработки (минимум одна)
Основные опции
-a, --auto-detect: Авто-детекция типа проекта и настройка исключений-s, --skip-folders <папки...>: Папки для пропуска (поддерживаются glob паттерны)-x, --skip-extensions <расширения...>: Расширения бинарных файлов для пропуска-k, --show-skipped: Показывать пропущенные папки в дереве--include-hidden: Включать скрытые файлы и папки--max-depth <число>: Максимальная глубина обхода директорий (0 = без ограничений)-o, --output <файл>: Имя выходного файла (по умолчанию: codebase.md)-t, --threads <число>: Количество потоков обработки (0 = авто)-m, --max-file-size <байты>: Максимальный размер файла для обработки (0 = без ограничений)-S, --stats: Показать детальную статистику после обработки-d, --dry-run: Показать что будет обработано без создания выходного файла
Управление шаблонами
-l, --list-templates: Список доступных gitignore шаблонов-e, --enable-template <шаблон>: Включить конкретный шаблон-D, --disable-template <шаблон>: Отключить конкретный шаблон-u, --force-update: Принудительное обновление шаблонов из API-n, --check-internet <bool>: Включить/отключить проверку интернета--show-enabled: Показать включенные шаблоны
Устаревшие
-i, --system_instructions: Устаревшая опция (скрыта)
🔍 Авто-детекция проектов
Утилита автоматически определяет типы проектов и настраивает соответствующие исключения:
Rust проекты
- Пропускает:
target/,Cargo.lock - Расширения:
rlib,rmeta
Node.js проекты
- Пропускает:
node_modules/,.npm/,.yarn/,dist/,build/,.next/,.nuxt/,.angular/,coverage/
Python проекты
- Пропускает:
__pycache__/,.pytest_cache/,.mypy_cache/,.tox/,venv/,.venv/,site-packages/ - Расширения:
pyc,pyo,pyd,egg,whl
Java проекты
- Пропускает:
target/,build/,.gradle/,.idea/,out/ - Расширения:
class,jar,war,ear
Go проекты
- Пропускает:
vendor/
C# проекты
- Пропускает:
bin/,obj/,packages/,.vs/,.vscode/,Properties/ - Расширения:
exe,dll,pdb,cache,user
Angular проекты
- Пропускает:
.angular/,dist/,coverage/,.coverage/ - Расширения:
js.map,css.map,ngsummary.json,ngfactory,ngstyle,ngtemplate
C/C++ проекты
- Пропускает:
cmake-build-debug/,cmake-build-release/,build/,obj/,bin/,Debug/,Release/ - Расширения:
o,obj,exe,dll,so,dylib,a,lib
Ruby проекты
- Пропускает:
vendor/,.bundle/
PHP проекты
- Пропускает:
vendor/
📊 Производительность и качество кода
Сравнение с Python-версией
- Скорость: В 10-50 раз быстрее в зависимости от размера проекта
- Память: В 3-5 раз меньше потребление памяти
- Параллелизм: Автоматическая многопоточная обработка
- Большие файлы: Эффективная обработка через memory mapping
Бенчмарки
На проекте с 10,000 файлов (общий размер 2GB):
- Python версия: ~5 минут, 1.2GB RAM
- Rust версия: ~30 секунд, 400MB RAM
Качество кода
- ✅ Clippy-clean: Полное соответствие стандартам Rust
- ✅ Идиоматический код: Соблюдение лучших практик Rust
- ✅ Безопасность: Отсутствие
unwrap()в основной логике - ✅ Обработка ошибок: Использование
Result<T, E>и?оператора - ✅ Документация: Полное покрытие
rustdocкомментариями - ✅ Тесты: Полное покрытие unit и integration тестами
- ✅ Производительность: Оптимизированные алгоритмы и структуры данных
🏗️ Архитектура
Основные компоненты
- Парсер аргументов: Использует
clapдля CLI - Обход файловой системы:
walkdirс фильтрацией - Параллельная обработка:
rayonдля многопоточности - Чтение файлов:
memmap2для эффективного доступа - Прогресс:
indicatifдля визуализации
Оптимизации
- Memory mapping для больших файлов
- Параллельная обработка с настраиваемым числом потоков
- Буферизированный вывод
- Ранняя фильтрация ненужных файлов
- Безопасная обработка ошибок без паники
- LTO и агрессивная оптимизация размера
⚙️ Конфигурация
Переменные окружения
RAYON_NUM_THREADS: Количество потоков для обработки
Оптимизации сборки
[]
= true # Link Time Optimization
= 1 # Одна единица генерации кода
= "abort" # Уменьшает размер
= true # Удаление отладочных символов
= "z" # Оптимизация по размеру
= false # Отключение проверок переполнения
🧪 Тестирование
# Запуск тестов
# Запуск бенчмарков
# Проверка кода
# Проверка безопасности
🤝 Вклад в проект
- Fork проекта
- Создание feature branch (
git checkout -b feature/amazing-feature) - Commit изменений (
git commit -m 'Add amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Создание Pull Request
📄 Лицензия
MIT License - см. файл LICENSE для деталей.
🆘 Поддержка
При возникновении проблем:
- Проверьте существующие issues
- Создайте новый issue с описанием проблемы
- Укажите версию ОС, Rust и пример команды
🙏 Благодарности
- Python-версия flatten.py как основа для функциональности
- Сообществу Rust за отличные библиотеки