1use std::path::PathBuf;
2
3use super::KnownPathRule;
4use crate::types::{Category, Risk};
5
6pub fn all_known_path_rules(home: &str) -> Vec<KnownPathRule> {
9 let h = |p: &str| -> PathBuf { PathBuf::from(format!("{home}/{p}")) };
10
11 vec![
12 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 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 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 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 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 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}