Skip to main content

diskforge_core/rules/
known_paths.rs

1use std::path::PathBuf;
2
3use super::KnownPathRule;
4use crate::types::{Category, Risk};
5
6/// Generate all known-path rules for macOS.
7/// These are paths we check directly (no filesystem walk needed).
8pub fn all_known_path_rules(home: &str) -> Vec<KnownPathRule> {
9    let h = |p: &str| -> PathBuf { PathBuf::from(format!("{home}/{p}")) };
10
11    vec![
12        // ── Package Manager Caches ──────────────────────────────────────
13        KnownPathRule {
14            path: h(".npm"),
15            category: Category::PackageManager("npm".into()),
16            description: "npm cache".into(),
17            risk: Risk::None,
18            regenerates: true,
19            regeneration_hint: Some("npm cache clean --force".into()),
20        },
21        KnownPathRule {
22            path: h(".pub-cache"),
23            category: Category::PackageManager("pub".into()),
24            description: "Dart pub cache".into(),
25            risk: Risk::None,
26            regenerates: true,
27            regeneration_hint: Some("dart pub cache repair".into()),
28        },
29        KnownPathRule {
30            path: h(".cargo/registry"),
31            category: Category::PackageManager("cargo".into()),
32            description: "Cargo registry cache".into(),
33            risk: Risk::None,
34            regenerates: true,
35            regeneration_hint: Some("cargo fetch".into()),
36        },
37        KnownPathRule {
38            path: h(".cargo/git"),
39            category: Category::PackageManager("cargo".into()),
40            description: "Cargo git dependency cache".into(),
41            risk: Risk::None,
42            regenerates: true,
43            regeneration_hint: Some("cargo fetch".into()),
44        },
45        KnownPathRule {
46            path: h(".rustup/downloads"),
47            category: Category::PackageManager("rustup".into()),
48            description: "Rustup downloads cache".into(),
49            risk: Risk::None,
50            regenerates: true,
51            regeneration_hint: None,
52        },
53        KnownPathRule {
54            path: h(".gradle/caches"),
55            category: Category::PackageManager("gradle".into()),
56            description: "Gradle build cache".into(),
57            risk: Risk::Low,
58            regenerates: true,
59            regeneration_hint: Some("gradle build (slow re-download)".into()),
60        },
61        KnownPathRule {
62            path: h(".bun/install/cache"),
63            category: Category::PackageManager("bun".into()),
64            description: "Bun package cache".into(),
65            risk: Risk::None,
66            regenerates: true,
67            regeneration_hint: Some("bun install".into()),
68        },
69        KnownPathRule {
70            path: h("Library/Caches/CocoaPods"),
71            category: Category::PackageManager("cocoapods".into()),
72            description: "CocoaPods spec cache".into(),
73            risk: Risk::None,
74            regenerates: true,
75            regeneration_hint: Some("pod install".into()),
76        },
77        KnownPathRule {
78            path: h("Library/Caches/Yarn"),
79            category: Category::PackageManager("yarn".into()),
80            description: "Yarn package cache".into(),
81            risk: Risk::None,
82            regenerates: true,
83            regeneration_hint: Some("yarn cache clean".into()),
84        },
85        KnownPathRule {
86            path: h("Library/Caches/Homebrew"),
87            category: Category::PackageManager("homebrew".into()),
88            description: "Homebrew download cache".into(),
89            risk: Risk::None,
90            regenerates: true,
91            regeneration_hint: Some("brew cleanup".into()),
92        },
93        // ── IDE Caches ──────────────────────────────────────────────────
94        KnownPathRule {
95            path: h("Library/Developer/Xcode/DerivedData"),
96            category: Category::IdeCache("Xcode".into()),
97            description: "Xcode DerivedData (build cache)".into(),
98            risk: Risk::Low,
99            regenerates: true,
100            regeneration_hint: Some("Xcode rebuilds on next open".into()),
101        },
102        KnownPathRule {
103            path: h("Library/Developer/Xcode/Archives"),
104            category: Category::IdeCache("Xcode".into()),
105            description: "Xcode Archives".into(),
106            risk: Risk::Medium,
107            regenerates: false,
108            regeneration_hint: None,
109        },
110        KnownPathRule {
111            path: h("Library/Application Support/Code/CachedData"),
112            category: Category::IdeCache("VS Code".into()),
113            description: "VS Code cached data".into(),
114            risk: Risk::None,
115            regenerates: true,
116            regeneration_hint: None,
117        },
118        KnownPathRule {
119            path: h("Library/Application Support/Cursor/CachedData"),
120            category: Category::IdeCache("Cursor".into()),
121            description: "Cursor cached data".into(),
122            risk: Risk::None,
123            regenerates: true,
124            regeneration_hint: None,
125        },
126        KnownPathRule {
127            path: h("Library/Application Support/Cursor/User/workspaceStorage"),
128            category: Category::IdeCache("Cursor".into()),
129            description: "Cursor workspace storage".into(),
130            risk: Risk::Low,
131            regenerates: true,
132            regeneration_hint: None,
133        },
134        // ── Browser Caches ──────────────────────────────────────────────
135        KnownPathRule {
136            path: h("Library/Application Support/Google/Chrome/Default/Service Worker"),
137            category: Category::BrowserCache("Chrome".into()),
138            description: "Chrome Service Worker cache".into(),
139            risk: Risk::None,
140            regenerates: true,
141            regeneration_hint: None,
142        },
143        KnownPathRule {
144            path: h("Library/Application Support/Google/Chrome/OptGuideOnDeviceModel"),
145            category: Category::BrowserCache("Chrome".into()),
146            description: "Chrome AI model (~4 GB, re-downloads automatically)".into(),
147            risk: Risk::None,
148            regenerates: true,
149            regeneration_hint: None,
150        },
151        KnownPathRule {
152            path: h("Library/Caches/Google/Chrome"),
153            category: Category::BrowserCache("Chrome".into()),
154            description: "Chrome disk cache".into(),
155            risk: Risk::None,
156            regenerates: true,
157            regeneration_hint: None,
158        },
159        KnownPathRule {
160            path: h("Library/Application Support/Microsoft Edge/Default/Service Worker"),
161            category: Category::BrowserCache("Edge".into()),
162            description: "Edge Service Worker cache".into(),
163            risk: Risk::None,
164            regenerates: true,
165            regeneration_hint: None,
166        },
167        KnownPathRule {
168            path: h("Library/Caches/BraveSoftware"),
169            category: Category::BrowserCache("Brave".into()),
170            description: "Brave browser cache".into(),
171            risk: Risk::None,
172            regenerates: true,
173            regeneration_hint: None,
174        },
175        // ── App Caches ──────────────────────────────────────────────────
176        KnownPathRule {
177            path: h("Library/Application Support/Figma/CachedData"),
178            category: Category::AppCache("Figma".into()),
179            description: "Figma cached data".into(),
180            risk: Risk::None,
181            regenerates: true,
182            regeneration_hint: None,
183        },
184        KnownPathRule {
185            path: h("Library/Application Support/Slack/Cache"),
186            category: Category::AppCache("Slack".into()),
187            description: "Slack cache".into(),
188            risk: Risk::None,
189            regenerates: true,
190            regeneration_hint: None,
191        },
192        // ── System Caches ───────────────────────────────────────────────
193        KnownPathRule {
194            path: h("Library/Logs"),
195            category: Category::SystemCache,
196            description: "User application logs".into(),
197            risk: Risk::Low,
198            regenerates: true,
199            regeneration_hint: None,
200        },
201        // ── Personal ────────────────────────────────────────────────────
202        KnownPathRule {
203            path: h(".Trash"),
204            category: Category::Personal("Trash".into()),
205            description: "Trash (already deleted files)".into(),
206            risk: Risk::Low,
207            regenerates: false,
208            regeneration_hint: None,
209        },
210        KnownPathRule {
211            path: h("Downloads"),
212            category: Category::Personal("Downloads".into()),
213            description: "Downloads folder".into(),
214            risk: Risk::High,
215            regenerates: false,
216            regeneration_hint: None,
217        },
218        KnownPathRule {
219            path: h("Movies"),
220            category: Category::Personal("Movies".into()),
221            description: "Movies folder".into(),
222            risk: Risk::High,
223            regenerates: false,
224            regeneration_hint: None,
225        },
226    ]
227}