Скрипт clang-format_all_tree.sh предназначен для автоматической проверки и форматирования исходных файлов на языке C (*.c, *.h) в текущей директории и всех её поддиректориях с помощью утилиты clang-format. Он также предоставляет возможность автоматического исправления форматирования при обнаружении несоответствий.
- Установленная утилита
clang-format. - Файл стиля
.clang-format(скрипт может скопировать его из указанного расположения, если файл отсутствует).
- Запустите скрипт в терминале:
./clang-format_all_tree.sh
-
Проверка наличия clang-format Скрипт проверяет, установлена ли утилита clang-format. Если нет, выводится сообщение об ошибке.
-
Проверка наличия файла .clang-format Если файл .clang-format отсутствует в текущей директории, скрипт пытается скопировать его из указанного исходного расположения (../materials/linters/.clang-format). Если исходный файл также отсутствует, скрипт завершается с ошибкой.
-
Поиск файлов для проверки Скрипт рекурсивно ищет все файлы с расширениями .c и .h в текущей директории и её поддиректориях.
-
Проверка форматирования Для каждого найденного файла выполняется проверка соответствия стилю, указанному в .clang-format, с помощью команды:
clang-format --style=file --dry-run --Werror "$file"Если файл не соответствует стилю, его имя выводится на экран.
- Автоматическое форматирование Если обнаружены файлы с несоответствующим форматированием, скрипт предлагает автоматически исправить их. Пользователь может выбрать: y/Y — исправить форматирование. n/N — пропустить исправление. Любой другой ввод — отмена форматирования.
Форматирование выполняется командой:
clang-format --style=file -i "$file"Проверка форматирования файлов с помощью clang-format...
Ошибка форматирования в файле: ./src/main.c
Ошибка форматирования в файле: ./include/utils.h
Найдены файлы, не соответствующие clang-format:
./src/main.c
./include/utils.h
Хотите автоматически отформатировать эти файлы? (y/n): y
Форматирование файлов...
Отформатирован: ./src/main.c
Отформатирован: ./include/utils.h
Форматирование завершено.
Скрипт tree_dir_and_file.sh предназначен для рекурсивного отображения структуры директорий и файлов в виде дерева. Результат сохраняется в указанный файл (по умолчанию tree.txt). Скрипт поддерживает ограничение глубины рекурсии для безопасной обработки глубоких структур каталогов.
./tree_dir_and_file.sh <директория> [выходной_файл] [максимальная_глубина]- <директория> — обязательный аргумент, путь к целевой директории
- [выходной_файл] — необязательный аргумент, имя файла для сохранения результата (по умолчанию tree.txt)
- [максимальная_глубина] — необязательный аргумент, ограничение глубины рекурсии (по умолчанию 20 уровней)
./tree_dir_and_file.sh . # Глубина по умолчанию (20)
./tree_dir_and_file.sh . my_tree.txt # Указание выходного файла
./tree_dir_and_file.sh . tree.txt 10 # Ограничение глубины 10 уровней
./tree_dir_and_file.sh /path/to/dir output.txt 5 # Полный формат-
Проверка аргументов
- Скрипт проверяет, передан ли путь к директории. Если нет, выводится сообщение об ошибке и пример использования.
- Если выходной файл не указан, используется имя tree.txt.
- Если глубина рекурсии не указана, используется значение по умолчанию 20.
-
Проверка существования директории
- Скрипт проверяет, существует ли указанная директория. Если нет, завершается с ошибкой.
-
Валидация параметров
- Проверяет, что максимальная глубина является положительным числом.
- Выводит понятное сообщение об ошибке при некорректном значении глубины.
-
Построение дерева каталогов с ограничением глубины
- Используется рекурсивная функция build_tree, которая обходит все поддиректории.
- Для визуализации структуры используются символы ├──, └── и отступы.
- При достижении максимальной глубины выводится сообщение [глубина ограничена: X уровней].
- Файлы и директории сортируются по именам.
-
Сохранение результата
- Результат записывается в указанный файл.
- В начало файла добавляется заголовок с указанием целевой директории, даты генерации и максимальной глубины.
Содержимое выходного файла (tree.txt):
Дерево каталогов для: ./example
Генерируется: Wed Jul 17 12:34:56 UTC 2024
Максимальная глубина: 10 уровней
├── file1.txt
├── dir1
│ ├── subfile1.txt
│ └── subdir1
│ └── subsubdir1
│ └── [глубина ограничена: 10 уровней]
└── dir2
└── file3.txt
- Поддержка кириллических и сложных имен файлов/директорий
- Корректная обработка скрытых файлов (начинающихся с точки)
- Читаемое форматирование с отступами и символами псевдографики
- Защита от бесконечной рекурсии через ограничение глубины
- Обратная совместимость со старыми форматами вызова
Скрипт tree_dir_and_file_bar.sh является расширенной версией базового скрипта для построения дерева каталогов с добавлением интерактивного прогресс-бара. Он предоставляет визуальную обратную связь в процессе генерации дерева, что особенно полезно при работе с большими директориями.
./tree_dir_and_file_bar.sh <директория> [выходной_файл] [максимальная_глубина]- <директория> — обязательный аргумент, путь к целевой директории
- [выходной_файл] — необязательный аргумент, имя файла для сохранения результата (по умолчанию tree.txt)
- [максимальная_глубина] — необязательный аргумент, ограничение глубины рекурсии (по умолчанию 20 уровней)
./tree_dir_and_file_bar.sh . # Глубина по умолчанию (20)
./tree_dir_and_file_bar.sh . my_tree.txt # Указание выходного файла
./tree_dir_and_file_bar.sh . tree.txt 10 # Ограничение глубины 10 уровней
./tree_dir_and_file_bar.sh /path/to/dir output.txt 5 # Полный формат-
Двухфазная обработка
- Фаза подсчета: Предварительный подсчет всех элементов в директории для точного отображения прогресса
- Фаза построения: Генерация дерева с визуальным отображением хода выполнения
-
Интерактивный прогресс-бар
- Визуализация прогресса в реальном времени с помощью ASCII-графики
- Отображение процента выполнения, текущего и общего количества элементов
- Прогресс отображается только для элементов верхнего уровня для плавной анимации
- Настраиваемая задержка анимации (0.1 секунды по умолчанию)
-
Расширенная информационная панель
- Отдельный подсчет элементов верхнего уровня для прогресс-бара
- Отображение общего количества элементов в директории
- Информация о задержке анимации
- Подробные статусные сообщения на каждом этапе
-
Улучшенная обработка ошибок
- Детальные сообщения об ошибках доступа к директориям
- Валидация всех входных параметров
- Корректная обработка проблем с правами доступа
Подсчет элементов в директории (максимальная глубина: 20)...
Найдено элементов: 1542
Подсчет элементов верхнего уровня...
Элементов верхнего уровня: 23
Задержка анимации: 0.1с
Генерация дерева каталогов (максимальная глубина: 20)...
Прогресс отображается по элементам верхнего уровня:
[============= ] 43% (10/23)
Особенности (дополнительные к базовой версии)
- Визуальная обратная связь - пользователь видит прогресс выполнения для больших директорий
- Плавная анимация - регулируемая задержка обеспечивает комфортное отображение прогресса
- Детальная статистика - информация об элементах верхнего уровня и общем количестве
- Оптимизированная производительность - прогресс-бар не замедляет основную работу скрипта
- Профессиональный интерфейс - интуитивно понятное отображение хода выполнения
Этот Makefile предназначен для сборки и управления проектом, включающим несколько модулей и тестовых программ.
- Поддержка модулей:
print_module(Quest_1)documentation_module(Quest_2)- Тесты для работы с BST (Quest_3-5):
- Создание узла (
bst_create_test) - Вставка (
bst_insert_test) - Обход (
bst_traverse_test)
- Создание узла (
- Используются строгие флаги компиляции:
Поддержка санитайзеров:
CFLAGS = -std=c11 -Wall -Werror -WextraSANITIZERS = -fsanitize=address -fsanitize=undefined -fsanitize=leak
Запуск тестов с санитайзерами:
make test # Все тесты
make test_print # Только print_moduleПроверка памяти через Valgrind:
make valgrind- Управление артефактами Автоматическое управление .gitignore:
make update_gitignore # Добавить правила
make restore_gitignore # Удалить правилаОчистка:
make clean # Полная очистка
make clean_print # Только print_module- Дополнительные инструменты Проверка стиля кода:
make format-check # Проверить
make format-fix # ИсправитьСтатический анализ:
make cppcheck- Пересборка
make rebuild # Полная пересборка
make rebuild_print # Только print_moduleСправка
make helpВыводит список всех доступных команд с описанием.
Примеры использования
make # Собрать всё
make test # Собрать и запустить тесты
make clean && make all # Полная пересборка
make print_module # Собрать только print_module