@@ -317,15 +317,28 @@ fn get_jdtls_data_path(worktree: &Worktree) -> zed::Result<PathBuf> {
317317 // we fall back to the the extension's workdir, which may never get cleaned up.
318318 // In future we may want to deliberately manage caches to be able to force-clean them.
319319
320- let mut env_iter = worktree. shell_env ( ) . into_iter ( ) ;
320+ let env = worktree. shell_env ( ) ;
321321 let base_cachedir = match current_platform ( ) . 0 {
322- Os :: Mac => env_iter
323- . find ( |( k, _) | k == "HOME" )
324- . map ( |( _, v) | PathBuf :: from ( v) . join ( "Library" ) . join ( "Caches" ) ) ,
325- Os :: Linux => env_iter
326- . find ( |( k, _) | k == "HOME" )
327- . map ( |( _, v) | PathBuf :: from ( v) . join ( ".cache" ) ) ,
328- Os :: Windows => env_iter
322+ Os :: Mac => env
323+ . iter ( )
324+ . find ( |( k, _) | k == "XDG_CACHE_HOME" )
325+ . map ( |( _, v) | PathBuf :: from ( v) )
326+ . or_else ( || {
327+ env. iter ( )
328+ . find ( |( k, _) | k == "HOME" )
329+ . map ( |( _, v) | PathBuf :: from ( v) . join ( "Library" ) . join ( "Caches" ) )
330+ } ) ,
331+ Os :: Linux => env
332+ . iter ( )
333+ . find ( |( k, _) | k == "XDG_CACHE_HOME" )
334+ . map ( |( _, v) | PathBuf :: from ( v) )
335+ . or_else ( || {
336+ env. iter ( )
337+ . find ( |( k, _) | k == "HOME" )
338+ . map ( |( _, v) | PathBuf :: from ( v) . join ( ".cache" ) )
339+ } ) ,
340+ Os :: Windows => env
341+ . iter ( )
329342 . find ( |( k, _) | k == "APPDATA" )
330343 . map ( |( _, v) | PathBuf :: from ( v) ) ,
331344 }
0 commit comments