From 4d77dc88c6cb4fe8bf71fed6ad16b41c2de7f413 Mon Sep 17 00:00:00 2001 From: Shunsuke Shibayama Date: Sun, 10 Sep 2023 01:05:52 +0900 Subject: [PATCH] Update env.rs --- crates/erg_common/env.rs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/crates/erg_common/env.rs b/crates/erg_common/env.rs index 294d2cdd..5fab2049 100644 --- a/crates/erg_common/env.rs +++ b/crates/erg_common/env.rs @@ -7,11 +7,19 @@ use crate::python_util::get_sys_path; use crate::style::colors::*; use crate::style::RESET; +fn fallback_erg_path() -> PathBuf { + #[allow(deprecated)] + std::env::home_dir().map_or(PathBuf::from(".erg"), |path| path.join(".erg")) +} + fn _erg_path() -> PathBuf { let path = var("ERG_PATH").unwrap_or_else(|_| env!("CARGO_ERG_PATH").to_string()); PathBuf::from(path).canonicalize().unwrap_or_else(|_| { - eprintln!("{RED}[ERR] ERG_PATH not found{RESET}"); - PathBuf::from(".") + let fallback = fallback_erg_path(); + if !fallback.exists() { + eprintln!("{RED}[ERR] ERG_PATH not found{RESET}"); + } + fallback }) } fn _erg_std_path() -> PathBuf { @@ -21,7 +29,7 @@ fn _erg_std_path() -> PathBuf { .canonicalize() .unwrap_or_else(|_| { eprintln!("{RED}[ERR] ERG_PATH/lib/std not found{RESET}"); - PathBuf::from("lib/std/") + fallback_erg_path().join("lib/std") }) } fn _erg_std_decl_path() -> PathBuf { @@ -31,7 +39,7 @@ fn _erg_std_decl_path() -> PathBuf { .canonicalize() .unwrap_or_else(|_| { eprintln!("{RED}[ERR] ERG_PATH/lib/std.d not found {RESET}"); - PathBuf::from("lib/std.d/") + fallback_erg_path().join("lib/std.d") }) } fn _erg_pystd_path() -> PathBuf { @@ -41,7 +49,7 @@ fn _erg_pystd_path() -> PathBuf { .canonicalize() .unwrap_or_else(|_| { eprintln!("{RED}[ERR] ERG_PATH/lib/pystd not found {RESET}"); - PathBuf::from("lib/pystd/") + fallback_erg_path().join("lib/pystd") }) } fn _erg_external_lib_path() -> PathBuf { @@ -51,7 +59,7 @@ fn _erg_external_lib_path() -> PathBuf { .canonicalize() .unwrap_or_else(|_| { eprintln!("{RED}[ERR] ERG_PATH/lib/external not found {RESET}"); - PathBuf::from("lib/external/") + fallback_erg_path().join("lib/external") }) } fn _python_site_packages() -> impl Iterator { @@ -62,7 +70,7 @@ fn _python_site_packages() -> impl Iterator { .map(|p| { p.canonicalize().unwrap_or_else(|_| { eprintln!("{RED}[ERR] ERG_PATH/lib/external not found {RESET}"); - PathBuf::from("lib/external/") + fallback_erg_path().join("lib/external") }) }) } @@ -74,27 +82,27 @@ pub static ERG_PYSTD_PATH: OnceLock = OnceLock::new(); pub static ERG_EXTERNAL_LIB_PATH: OnceLock = OnceLock::new(); pub static PYTHON_SITE_PACKAGES: OnceLock> = OnceLock::new(); -/// == `Path::new(".")` if ERG_PATH is not set +/// == `Path::new("~/.erg")` if ERG_PATH is not set pub fn erg_path() -> &'static PathBuf { ERG_PATH.get_or_init(|| normalize_path(_erg_path())) // .with(|s| s.clone()) } -/// == `Path::new("lib/std")` if ERG_PATH is not set +/// == `Path::new("~/.erg/lib/std")` if ERG_PATH is not set pub fn erg_std_path() -> &'static PathBuf { ERG_STD_PATH.get_or_init(|| normalize_path(_erg_std_path())) } -/// == `Path::new("lib/std.d")` if ERG_PATH is not set +/// == `Path::new("~/.erg/lib/std.d")` if ERG_PATH is not set pub fn erg_std_decl_path() -> &'static PathBuf { ERG_STD_DECL_PATH.get_or_init(|| normalize_path(_erg_std_decl_path())) } -/// == `Path::new("lib/pystd")` if ERG_PATH is not set +/// == `Path::new("~/.erg/lib/pystd")` if ERG_PATH is not set pub fn erg_pystd_path() -> &'static PathBuf { ERG_PYSTD_PATH.get_or_init(|| normalize_path(_erg_pystd_path())) } -/// == `Path::new("lib/external")` if ERG_PATH is not set +/// == `Path::new("~/.erg/lib/external")` if ERG_PATH is not set pub fn erg_py_external_lib_path() -> &'static PathBuf { ERG_EXTERNAL_LIB_PATH.get_or_init(|| normalize_path(_erg_external_lib_path())) }