From 51a38bbebaf60c70af65b0010e361c5405f7f7cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9A=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D1=81?= Date: Tue, 3 Mar 2026 18:12:39 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20projdump.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use TXT type. Fuck the MD (AI fucked up) --- projdump.sh | 59 +++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 36 deletions(-) diff --git a/projdump.sh b/projdump.sh index 9d99765..ca67345 100755 --- a/projdump.sh +++ b/projdump.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# projdump.sh - dump project structure and source code into a single Markdown file +# projdump.sh - дамп структуры и кода в один чистый .txt файл для ИИ set -euo pipefail @@ -8,9 +8,7 @@ usage() { Использование: $0 <директория> Создаёт один файл: - -dump.md — дерево проекта + содержимое файлов в Markdown - -Игнорирует типичные артефакты сборки, кэши, IDE-файлы и зависимости. + -dump.txt — дерево проекта + содержимое файлов (без MD-разметки) Параметры: -h, --help Показать эту справку @@ -33,10 +31,11 @@ TARGET_DIR="$(cd "$TARGET_DIR" && pwd)" BASENAME=$(basename "$TARGET_DIR") if ! command -v tree >/dev/null 2>&1; then - echo "Ошибка: требуется утилита 'tree'. Установите её (например, apt install tree)." >&2 + echo "Ошибка: требуется утилита 'tree'." >&2 exit 1 fi +# Список игнорирования (оставлен без изменений) IGNORE_LIST=( "third_party" "3rd_party" "3rdparty" ".git" ".svn" ".hg" "node_modules" "__pycache__" "*.pyc" ".venv" "venv" "env" ".env" ".idea" ".vscode" ".vs" @@ -53,7 +52,7 @@ IGNORE_LIST=( "*.log" "logs" "tmp" "temp" ".terraform" ".tfstate" ".tfstate.backup" "*.tfvars" ) -# === Подготовка find-аргументов === +# Подготовка аргументов для find FIND_IGNORE_ARGS=() for pat in "${IGNORE_LIST[@]}"; do if [[ "$pat" == */* ]]; then @@ -65,7 +64,7 @@ done FIND_CMD=(find "$TARGET_DIR" \( -false "${FIND_IGNORE_ARGS[@]}" \) -prune -o -type f -print0) -# === Подготовка шаблонов для tree === +# Подготовка шаблонов для tree TREE_IGNORE_PATTERNS="" for pat in "${IGNORE_LIST[@]}"; do base_pat="${pat%%/*}" @@ -76,41 +75,29 @@ for pat in "${IGNORE_LIST[@]}"; do fi done -OUTPUT_FILE="${BASENAME}-dump.md" +OUTPUT_FILE="${BASENAME}-dump.txt" { - echo "# PROJECT: $BASENAME" - echo "Generated on: $(date)" - echo -e "\n## PROJECT STRUCTURE" - echo '```text' + echo "===============================================================================" + echo "PROJECT NAME: $BASENAME" + echo "GENERATED ON: $(date)" + echo "===============================================================================" + echo -e "\n--- PROJECT STRUCTURE ---" tree -n -I "$TREE_IGNORE_PATTERNS" "$TARGET_DIR" - echo '```' - echo -e "\n---\n" + echo -e "\n===============================================================================" + echo "SOURCE CODE CONTENTS" + echo "===============================================================================" - echo "## SOURCE CODE CONTENTS" while IFS= read -r -d '' file; do - # Пропускаем явно бинарные файлы по расширению, если нужно - # Но пока просто оформляем контент - - ext="${file##*.}" - # Маппинг для расширений без которых ИИ грустит - case "$ext" in - h|hpp|c|cpp) lang="cpp" ;; - sh) lang="bash" ;; - py) lang="python" ;; - md) lang="markdown" ;; - *) lang="$ext" ;; - esac - - # Если расширения нет - if [[ "$ext" == "$file" ]]; then lang="text"; fi - - echo "### File: $file" - echo " \`\`\`$lang" + # Относительный путь для красоты + rel_path="${file#$TARGET_DIR/}" + + echo -e "\nFILE: $rel_path" + echo "-------------------------------------------------------------------------------" cat "$file" - echo -e "\n \`\`\`" - echo -e "\n---\n" + echo -e "\n-------------------------------------------------------------------------------" + echo "END OF FILE: $rel_path" done < <("${FIND_CMD[@]}") } > "$OUTPUT_FILE" -echo "Готово: $OUTPUT_FILE" +echo "Готово: $OUTPUT_FILE" \ No newline at end of file