package main import ( "path/filepath" "strings" ) // isCleanableDir marks paths safe to delete manually (not handled by mo clean). func isCleanableDir(path string) bool { if path == "" { return false } // Exclude paths mo clean already handles. if isHandledByMoClean(path) { return false } baseName := filepath.Base(path) // Project dependencies and build outputs are safe. if projectDependencyDirs[baseName] { return true } return false } // isHandledByMoClean checks if a path is cleaned by mo clean. func isHandledByMoClean(path string) bool { cleanPaths := []string{ "/Library/Caches/", "/Library/Logs/", "/Library/Saved Application State/", "/.Trash/", "/Library/DiagnosticReports/", } for _, p := range cleanPaths { if strings.Contains(path, p) { return true } } return false } // Project dependency and build directories. var projectDependencyDirs = map[string]bool{ // JavaScript/Node. "node_modules": true, "bower_components": true, ".yarn": true, ".pnpm-store": true, // Python. "venv": true, ".venv": true, "virtualenv": true, "__pycache__": true, ".pytest_cache": true, ".mypy_cache": true, ".ruff_cache": true, ".tox": true, ".eggs": true, "htmlcov": true, ".ipynb_checkpoints": true, // Ruby. "vendor": true, ".bundle": true, // Java/Kotlin/Scala. ".gradle": true, "out": true, // Build outputs. "build": true, "dist": true, "target": true, ".next": true, ".nuxt": true, ".output": true, ".parcel-cache": true, ".turbo": true, ".vite": true, ".nx": true, "coverage": true, ".coverage": true, ".nyc_output": true, // Frontend framework outputs. ".angular": true, ".svelte-kit": true, ".astro": true, ".docusaurus": true, // Apple dev. "DerivedData": true, "Pods": true, ".build": true, "Carthage": true, ".dart_tool": true, // Other tools. ".terraform": true, }