use crate::ported::exec_hooks::dispatch_function_call;
use crate::ported::params::getsparam;
use crate::ported::zle::complete::bin_compadd;
use crate::ported::zsh_h::{options, MAX_OPS};
fn make_ops() -> options {
options {
ind: [0u8; MAX_OPS],
args: Vec::new(),
argscount: 0,
argsalloc: 0,
}
}
pub fn _read_comp() -> i32 {
let cached = getsparam("_read_comp").unwrap_or_default();
if cached.is_empty() {
return 1;
}
if cached.starts_with('_') {
dispatch_function_call(&cached, &[]).unwrap_or(1)
} else {
let parts: Vec<String> = cached.split_whitespace().map(|s| s.to_string()).collect();
bin_compadd("compadd", &parts, &make_ops(), 0)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn returns_one_without_cached() {
let _g = crate::test_util::global_state_lock();
let _ = crate::ported::params::setsparam("_read_comp", "");
assert_eq!(_read_comp(), 1);
}
}