Files
hakorune/src/config/env/using_flags.rs

87 lines
2.9 KiB
Rust
Raw Normal View History

2025-12-28 13:55:04 +09:00
//! Using/namespace-related environment flags
//!
//! This module groups all `using` system and namespace flags.
//! Use this for IDE autocomplete to discover using/namespace flags easily.
2025-12-28 14:01:10 +09:00
use super::env_bool;
2025-12-28 13:55:04 +09:00
use super::warn_alias_once;
pub fn enable_using() -> bool {
// Phase 15: デフォルトONusing systemはメイン機能
// NYASH_ENABLE_USING=0 で明示的に無効化可能。HAKO_ENABLE_USING は互換のため受理(警告)。
match std::env::var("NYASH_ENABLE_USING").ok().as_deref() {
Some("0") | Some("false") | Some("off") => return false,
Some(_) => return true,
None => {}
}
// Fallback to alias
if let Some(v) = std::env::var("HAKO_ENABLE_USING").ok() {
warn_alias_once("HAKO_ENABLE_USING", "NYASH_ENABLE_USING");
let lv = v.to_ascii_lowercase();
return !(lv == "0" || lv == "false" || lv == "off");
}
true // default ON
}
// ---- Using profiles (dev|ci|prod) ----
/// Return using profile string; default is "dev".
pub fn using_profile() -> String {
std::env::var("NYASH_USING_PROFILE").unwrap_or_else(|_| "dev".to_string())
}
/// True when using profile is prod (disables some dev-only behaviors).
pub fn using_is_prod() -> bool {
using_profile().eq_ignore_ascii_case("prod")
}
/// True when using profile is ci.
pub fn using_is_ci() -> bool {
using_profile().eq_ignore_ascii_case("ci")
}
/// True when using profile is dev (default).
pub fn using_is_dev() -> bool {
using_profile().eq_ignore_ascii_case("dev")
}
/// Allow `using "path"` statements in source (dev-only by default).
pub fn allow_using_file() -> bool {
// SSOT 徹底: 全プロファイルで既定禁止nyash.toml を唯一の真実に)
// 明示オーバーライドでのみ許可(開発用緊急時)
match std::env::var("NYASH_ALLOW_USING_FILE").ok().as_deref() {
Some("1") | Some("true") | Some("on") => true,
_ => false,
}
}
/// Determine whether AST prelude merge for `using` is enabled.
/// Precedence:
/// 1) Explicit env `NYASH_USING_AST` = 1/true/on → enabled, = 0/false/off → disabled
/// 2) Default by profile: dev/ci → ON, prod → OFF
pub fn using_ast_enabled() -> bool {
match std::env::var("NYASH_USING_AST")
.ok()
.as_deref()
.map(|v| v.to_ascii_lowercase())
{
Some(ref s) if s == "1" || s == "true" || s == "on" => true,
Some(ref s) if s == "0" || s == "false" || s == "off" => false,
_ => !using_is_prod(), // dev/ci → true, prod → false
}
}
2025-12-28 14:01:10 +09:00
// ---- Using/resolve diagnostics ----
pub fn resolve_trace() -> bool {
env_bool("NYASH_RESOLVE_TRACE")
}
pub fn resolve_seam_debug() -> bool {
env_bool("NYASH_RESOLVE_SEAM_DEBUG")
}
pub fn resolve_dump_merged_path() -> Option<String> {
std::env::var("NYASH_RESOLVE_DUMP_MERGED")
.ok()
.filter(|s| !s.is_empty())
}