flatten-rust 0.1.0

High-performance codebase flattening tool in Rust
Documentation

Flatten Rust

CI Crates.io License: MIT Rust Platform Last Commit Issues PRs Welcome Downloads

Высокопроизводительный инструмент для флаттенинга кодовой базы, написанный на Rust. Обеспечивает значительное ускорение обработки по сравнению с Python-версией, лучшую работу с памятью и параллельную обработку файлов.

🚀 Особенности

  • Высокая производительность: В десятки раз быстрее Python-версии благодаря оптимизированной работе с памятью
  • 🔄 Параллельная обработка: Многопоточная обработка файлов с использованием Rayon
  • 💾 Эффективная работа с памятью: Использование memory mapping для больших файлов
  • 📊 Прогресс-бары: Визуальный отслеживание прогресса обработки
  • 🎯 Умное пропуска: Гибкая настройка исключений папок и файлов
  • 🔍 Авто-детекция проектов: Автоматическая настройка исключений для разных языков
  • 📈 Статистика: Подробная статистика обработки
  • 🔒 Безопасность: Проверка размеров файлов и безопасная обработка ошибок
  • 🌍 Кросс-платформенность: Работает на Linux, Windows, macOS
  • 📏 Оптимизированный размер: Всего 816KB бинарный файл
  • 🛡️ Безопасная обработка: Обработка ошибок без паники

📦 Установка

Из crates.io (рекомендуется)

cargo install flatten-rust

Требования

  • Rust 1.70+ (рекомендуется использовать rustup)

Сборка из исходников

git clone https://github.com/An0nX/flatten-rust.git
cd flatten-rust
cargo build --release

Готовый бинарный файл будет находиться в target/release/flatten-rust.

Загрузка готовых бинарников

Скачайте готовый бинарный файл из Releases:

  • Linux x86_64: flatten-rust-linux-x86_64.gz
  • Linux ARM64: flatten-rust-linux-aarch64.gz
  • Windows x86_64: flatten-rust-windows-x86_64.exe.zip
  • macOS x86_64: flatten-rust-macos-x86_64.gz
  • macOS ARM64: flatten-rust-macos-aarch64.gz

🎯 Использование

Базовый синтаксис

flatten-rust --folders <папка1> [папка2] ... [опции]

Примеры использования

Обработка одной папки

flatten-rust --folders ./src --output project.md

Обработка с авто-детекцией проекта

flatten-rust --folders ./src --auto-detect --output project.md

Обработка с статистикой

flatten-rust --folders ./src --stats --output project.md

Dry run - просмотр что будет обработано

flatten-rust --folders ./src --dry-run --max-depth 3

Обработка нескольких папок с пропуском node_modules

flatten-rust --folders ./src ./tests --skip-folders node_modules .git --output full-project.md

Показ пропущенных папок в дереве

flatten-rust --folders ./src --show-skipped --output with-skipped.md

Настройка потоков обработки

flatten-rust --folders ./src --threads 8 --output fast.md

Ограничение размера файлов

flatten-rust --folders ./src --max-file-size 52428800 --output limited.md  # 50MB max

⚙️ Опции командной строки

Обязательные

  • --folders <папки...>: Базовые папки для обработки (минимум одна)

Опциональные

  • --auto-detect: Авто-детекция типа проекта и настройка исключений
  • --skip-folders <папки...>: Папки для пропуска (поддерживаются glob паттерны)
  • --skip-extensions <расширения...>: Расширения бинарных файлов для пропуска
  • --show-skipped: Показывать пропущенные папки в дереве
  • --include-hidden: Включать скрытые файлы и папки
  • --max-depth <число>: Максимальная глубина обхода директорий (0 = без ограничений)
  • --output <файл>: Имя выходного файла (по умолчанию: codebase.md)
  • --threads <число>: Количество потоков обработки (0 = авто)
  • --max-file-size <байты>: Максимальный размер файла для обработки (0 = без ограничений)
  • --stats: Показать детальную статистику после обработки
  • --dry-run: Показать что будет обработано без создания выходного файла
  • --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

Размер бинарного файла

  • Оптимизированный: 816KB
  • Без оптимизации: 1.8MB
  • Экономия: 55% уменьшение размера

🏗️ Архитектура

Основные компоненты

  1. Парсер аргументов: Использует clap для CLI
  2. Обход файловой системы: walkdir с фильтрацией
  3. Параллельная обработка: rayon для многопоточности
  4. Чтение файлов: memmap2 для эффективного доступа
  5. Прогресс: indicatif для визуализации

Оптимизации

  • Memory mapping для больших файлов
  • Параллельная обработка с настраиваемым числом потоков
  • Буферизированный вывод
  • Ранняя фильтрация ненужных файлов
  • Безопасная обработка ошибок без паники
  • LTO и агрессивная оптимизация размера

⚙️ Конфигурация

Переменные окружения

  • RAYON_NUM_THREADS: Количество потоков для обработки

Оптимизации сборки

[profile.release]
lto = true              # Link Time Optimization
codegen-units = 1       # Одна единица генерации кода
panic = "abort"         # Уменьшает размер
strip = true            # Удаление отладочных символов
opt-level = "z"         # Оптимизация по размеру
overflow-checks = false # Отключение проверок переполнения

🧪 Тестирование

# Запуск тестов
cargo test

# Запуск бенчмарков
cargo bench

# Проверка кода
cargo clippy
cargo fmt --check

# Проверка безопасности
cargo audit

🤝 Вклад в проект

  1. Fork проекта
  2. Создание feature branch (git checkout -b feature/amazing-feature)
  3. Commit изменений (git commit -m 'Add amazing feature')
  4. Push в branch (git push origin feature/amazing-feature)
  5. Создание Pull Request

📄 Лицензия

MIT License - см. файл LICENSE для деталей.

🔧 Совместимость

  • ОС: Linux, Windows, macOS
  • Архитектуры: x86_64, ARM64, другие поддерживаемые Rust
  • Версия Rust: 1.70+

📚 История версий

v0.2.0

  • Добавлена авто-детекция проектов
  • Расширены списки исключений для популярных языков
  • Добавлена статистика обработки
  • Добавлен dry-run режим
  • Улучшенная обработка скрытых файлов
  • Оптимизация производительности
  • Уменьшение размера бинарного файла до 816KB

v0.1.0

  • Первоначальный релиз
  • Базовая функциональность флаттенинга
  • Параллельная обработка
  • Прогресс-бары
  • Кросс-платформенность

🆘 Поддержка

При возникновении проблем:

  1. Проверьте Issues
  2. Создайте новый issue с подробным описанием
  3. Укажите версию ОС, Rust и размер проекта

🙏 Благодарности

  • Python-версия flatten.py как основа для функциональности
  • Сообществу Rust за отличные библиотеки
  • Пользователям за фидбэк и предложения

GitHub stars GitHub forks GitHub watchers