mirror of
https://github.com/tw93/Mole.git
synced 2026-03-22 17:55:08 +00:00
138 lines
3.4 KiB
Bash
138 lines
3.4 KiB
Bash
#!/bin/bash
|
|
# Shared purge configuration and helpers (side-effect free).
|
|
|
|
set -euo pipefail
|
|
|
|
if [[ -n "${MOLE_PURGE_SHARED_LOADED:-}" ]]; then
|
|
return 0
|
|
fi
|
|
readonly MOLE_PURGE_SHARED_LOADED=1
|
|
|
|
# Canonical purge targets (heavy project build artifacts).
|
|
readonly MOLE_PURGE_TARGETS=(
|
|
"node_modules"
|
|
"target" # Rust, Maven
|
|
"build" # Gradle, various
|
|
"dist" # JS builds
|
|
"venv" # Python
|
|
".venv" # Python
|
|
".pytest_cache" # Python (pytest)
|
|
".mypy_cache" # Python (mypy)
|
|
".tox" # Python (tox virtualenvs)
|
|
".nox" # Python (nox virtualenvs)
|
|
".ruff_cache" # Python (ruff)
|
|
".gradle" # Gradle local
|
|
"__pycache__" # Python
|
|
".next" # Next.js
|
|
".nuxt" # Nuxt.js
|
|
".output" # Nuxt.js
|
|
"vendor" # PHP Composer
|
|
"bin" # .NET build output (guarded; see is_protected_purge_artifact)
|
|
"obj" # C# / Unity
|
|
".turbo" # Turborepo cache
|
|
".parcel-cache" # Parcel bundler
|
|
".dart_tool" # Flutter/Dart build cache
|
|
".zig-cache" # Zig
|
|
"zig-out" # Zig
|
|
".angular" # Angular
|
|
".svelte-kit" # SvelteKit
|
|
".astro" # Astro
|
|
"coverage" # Code coverage reports
|
|
"DerivedData" # Xcode
|
|
"Pods" # CocoaPods
|
|
".cxx" # React Native Android NDK build cache
|
|
".expo" # Expo
|
|
)
|
|
|
|
readonly MOLE_PURGE_DEFAULT_SEARCH_PATHS=(
|
|
"$HOME/www"
|
|
"$HOME/dev"
|
|
"$HOME/Projects"
|
|
"$HOME/GitHub"
|
|
"$HOME/Code"
|
|
"$HOME/Workspace"
|
|
"$HOME/Repos"
|
|
"$HOME/Development"
|
|
)
|
|
|
|
readonly MOLE_PURGE_MONOREPO_INDICATORS=(
|
|
"lerna.json"
|
|
"pnpm-workspace.yaml"
|
|
"nx.json"
|
|
"rush.json"
|
|
)
|
|
|
|
readonly MOLE_PURGE_PROJECT_INDICATORS=(
|
|
"package.json"
|
|
"Cargo.toml"
|
|
"go.mod"
|
|
"pyproject.toml"
|
|
"requirements.txt"
|
|
"pom.xml"
|
|
"build.gradle"
|
|
"Gemfile"
|
|
"composer.json"
|
|
"pubspec.yaml"
|
|
"Makefile"
|
|
"build.zig"
|
|
"build.zig.zon"
|
|
".git"
|
|
)
|
|
|
|
# High-noise targets intentionally excluded from quick hint scans in mo clean.
|
|
readonly MOLE_PURGE_QUICK_HINT_EXCLUDED_TARGETS=(
|
|
"bin"
|
|
"vendor"
|
|
)
|
|
|
|
mole_purge_is_project_root() {
|
|
local dir="$1"
|
|
local indicator
|
|
|
|
for indicator in "${MOLE_PURGE_MONOREPO_INDICATORS[@]}"; do
|
|
if [[ -e "$dir/$indicator" ]]; then
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
for indicator in "${MOLE_PURGE_PROJECT_INDICATORS[@]}"; do
|
|
if [[ -e "$dir/$indicator" ]]; then
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
mole_purge_quick_hint_target_names() {
|
|
local target
|
|
local excluded
|
|
local is_excluded
|
|
|
|
for target in "${MOLE_PURGE_TARGETS[@]}"; do
|
|
is_excluded=false
|
|
for excluded in "${MOLE_PURGE_QUICK_HINT_EXCLUDED_TARGETS[@]}"; do
|
|
if [[ "$target" == "$excluded" ]]; then
|
|
is_excluded=true
|
|
break
|
|
fi
|
|
done
|
|
[[ "$is_excluded" == "true" ]] && continue
|
|
printf '%s\n' "$target"
|
|
done
|
|
}
|
|
|
|
mole_purge_read_paths_config() {
|
|
local config_file="${1:-$HOME/.config/mole/purge_paths}"
|
|
[[ -f "$config_file" ]] || return 0
|
|
|
|
local line
|
|
while IFS= read -r line; do
|
|
line="${line#"${line%%[![:space:]]*}"}"
|
|
line="${line%"${line##*[![:space:]]}"}"
|
|
[[ -z "$line" || "$line" =~ ^# ]] && continue
|
|
line="${line/#\~/$HOME}"
|
|
printf '%s\n' "$line"
|
|
done < "$config_file"
|
|
}
|