luaur-repl-cli 0.1.3

Interactive Luau REPL (Rust).
Documentation
use alloc::string::String;

use luaur_cli_lib::functions::join_paths_file_utils::join_paths_basic_string_ch_ch_ch;

// Faithful rustyline analog of Repl.cpp's `loadHistory`.
//
// C++ resolved the history file path from $HOME (falling back to $USERPROFILE)
// joined with `name`, then handed it to isocline via `ic_set_history(path, -1)`,
// where -1 selected isocline's default entry count (= 200). isocline then loaded
// the file and automatically saved history on process exit.
//
// rustyline manages history through the `Editor` rather than a global call, so
// this returns the resolved path; `run_repl_impl` loads it, caps it at the
// default 200 entries, and saves it when the loop ends.
pub fn load_history(name: &str) -> Option<String> {
    let mut path = String::new();

    if let Ok(home) = std::env::var("HOME") {
        join_paths_basic_string_ch_ch_ch(&mut path, &home, name);
    } else if let Ok(user_profile) = std::env::var("USERPROFILE") {
        join_paths_basic_string_ch_ch_ch(&mut path, &user_profile, name);
    }

    if path.is_empty() {
        None
    } else {
        Some(path)
    }
}

// isocline's default history entry count, selected by passing -1 to ic_set_history.
pub const DEFAULT_HISTORY_ENTRIES: usize = 200;