Phase 25.1 完了成果: - ✅ LoopForm v2 テスト・ドキュメント・コメント完備 - 4ケース(A/B/C/D)完全テストカバレッジ - 最小再現ケース作成(SSAバグ調査用) - SSOT文書作成(loopform_ssot.md) - 全ソースに [LoopForm] コメントタグ追加 - ✅ Stage-1 CLI デバッグ環境構築 - stage1_cli.hako 実装 - stage1_bridge.rs ブリッジ実装 - デバッグツール作成(stage1_debug.sh/stage1_minimal.sh) - アーキテクチャ改善提案文書 - ✅ 環境変数削減計画策定 - 25変数の完全調査・分類 - 6段階削減ロードマップ(25→5、80%削減) - 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG) Phase 26-D からの累積変更: - PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等) - MIRビルダーリファクタリング - 型伝播・最適化パス改善 - その他約300ファイルの累積変更 🎯 技術的成果: - SSAバグ根本原因特定(条件分岐内loop変数変更) - Region+next_iパターン適用完了(UsingCollectorBox等) - LoopFormパターン文書化・テスト化完了 - セルフホスティング基盤強化 Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: ChatGPT <noreply@openai.com> Co-Authored-By: Task Assistant <task@anthropic.com>
115 lines
5.2 KiB
Rust
115 lines
5.2 KiB
Rust
/*!
|
||
* Runner plugin/registry initialization (extracted)
|
||
*/
|
||
|
||
use super::*;
|
||
|
||
impl NyashRunner {
|
||
/// Initialize global runtime registry and load configured plugins.
|
||
///
|
||
/// Behavior (Phase 21.4: Unified ENV Policy):
|
||
/// - Always initializes the unified type/box registry.
|
||
/// - Loads native BID plugins unless `NYASH_DISABLE_PLUGINS=1`.
|
||
/// - When `--load-ny-plugins` or `NYASH_LOAD_NY_PLUGINS=1` is set, best‑effort
|
||
/// loads Nyash scripts listed under `nyash.toml`'s `ny_plugins`.
|
||
///
|
||
/// ENV Policy:
|
||
/// - NYASH_DISABLE_PLUGINS=1: Skip all plugin initialization
|
||
/// - NYASH_BOX_FACTORY_POLICY: Control factory priority (builtin_first|strict_plugin_first|compat_plugin_first)
|
||
/// - NYASH_FILEBOX_MODE: FileBox provider selection (auto|core-ro|plugin-only)
|
||
///
|
||
/// Deprecated ENV (removed auto-setting):
|
||
/// - NYASH_USE_PLUGIN_BUILTINS: No longer auto-set (use policy instead)
|
||
/// - NYASH_PLUGIN_OVERRIDE_TYPES: No longer auto-set (use policy instead)
|
||
pub(crate) fn init_runtime_and_plugins(&self, groups: &crate::cli::CliGroups) {
|
||
// Check if plugins are disabled
|
||
let plugins_disabled = std::env::var("NYASH_DISABLE_PLUGINS").ok().as_deref() == Some("1");
|
||
|
||
// Unified registry (always initialize)
|
||
runtime::init_global_unified_registry();
|
||
|
||
// Plugins (guarded by NYASH_DISABLE_PLUGINS)
|
||
if !plugins_disabled {
|
||
runner_plugin_init::init_bid_plugins();
|
||
crate::runner::box_index::refresh_box_index();
|
||
} else {
|
||
eprintln!("[plugins] Skipping plugin initialization (NYASH_DISABLE_PLUGINS=1)");
|
||
}
|
||
|
||
// Deprecation warnings for old ENV variables
|
||
if std::env::var("NYASH_USE_PLUGIN_BUILTINS").is_ok() {
|
||
eprintln!("[warn] NYASH_USE_PLUGIN_BUILTINS is deprecated. Use NYASH_BOX_FACTORY_POLICY instead.");
|
||
}
|
||
if std::env::var("NYASH_PLUGIN_OVERRIDE_TYPES").is_ok() {
|
||
eprintln!("[warn] NYASH_PLUGIN_OVERRIDE_TYPES is deprecated. Use NYASH_BOX_FACTORY_POLICY instead.");
|
||
}
|
||
|
||
// Optional Ny script plugins loader (best-effort)
|
||
if groups.load_ny_plugins
|
||
|| std::env::var("NYASH_LOAD_NY_PLUGINS").ok().as_deref() == Some("1")
|
||
{
|
||
if let Ok(text) = std::fs::read_to_string("nyash.toml") {
|
||
if let Ok(doc) = toml::from_str::<toml::Value>(&text) {
|
||
if let Some(np) = doc.get("ny_plugins") {
|
||
let mut list: Vec<String> = Vec::new();
|
||
if let Some(arr) = np.as_array() {
|
||
for v in arr {
|
||
if let Some(s) = v.as_str() {
|
||
list.push(s.to_string());
|
||
}
|
||
}
|
||
} else if let Some(tbl) = np.as_table() {
|
||
for (_k, v) in tbl {
|
||
if let Some(s) = v.as_str() {
|
||
list.push(s.to_string());
|
||
} else if let Some(arr) = v.as_array() {
|
||
for e in arr {
|
||
if let Some(s) = e.as_str() {
|
||
list.push(s.to_string());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if !list.is_empty() {
|
||
let list_only =
|
||
std::env::var("NYASH_NY_PLUGINS_LIST_ONLY").ok().as_deref()
|
||
== Some("1");
|
||
println!("🧩 Ny script plugins ({}):", list.len());
|
||
for p in list {
|
||
if list_only {
|
||
println!(" • {}", p);
|
||
continue;
|
||
}
|
||
match std::fs::read_to_string(&p) {
|
||
Ok(_code) => {
|
||
// Legacy interpreter removed - ny_plugins execution disabled
|
||
println!(
|
||
"[ny_plugins] {}: SKIP (legacy interpreter removed)",
|
||
p
|
||
);
|
||
}
|
||
Err(e) => println!("[ny_plugins] {}: FAIL (read: {})", p, e),
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Provider verify (受け口): env で warn/strict のみ動作(未設定時は無処理)
|
||
match crate::runtime::provider_verify::verify_from_env() {
|
||
Ok(()) => {}
|
||
Err(e) => {
|
||
eprintln!("❌ {}", e);
|
||
std::process::exit(1);
|
||
}
|
||
}
|
||
|
||
// Provider Lock — lock after registry and plugins are initialized (受け口)
|
||
// Default: no-op behavior change. Exposed for future verify→lock sequencing.
|
||
crate::runtime::provider_lock::lock_providers();
|
||
}
|
||
}
|