use crate::ported::exec::dispatch_function_call;
use crate::ported::params::{getsparam, setsparam};
pub fn _complete_help_generic() -> i32 {
let _fn_scope = crate::compsys::ported::shared::FnScope::enter("_complete_help_generic");
let widget = getsparam("WIDGET").unwrap_or_default();
let trace = if widget.contains("debug") {
"_complete_debug"
} else {
"_complete_help"
};
let _ = setsparam("ZSH_TRACE_GENERIC_WIDGET", trace);
if !widget.contains("noread") {
if let Some(rc) = dispatch_function_call("zle", &["read-command".to_string()]) {
if rc == 0 {
let reply = getsparam("REPLY").unwrap_or_default();
let _ = dispatch_function_call("zle", &[reply, "-w".to_string()]);
}
}
}
0
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sets_trace_widget_to_help_by_default() {
let _g = crate::test_util::global_state_lock();
let _ = setsparam("WIDGET", "some-widget");
let _ = _complete_help_generic();
assert_eq!(
getsparam("ZSH_TRACE_GENERIC_WIDGET").as_deref(),
Some("_complete_help")
);
}
#[test]
fn sets_trace_widget_to_debug_when_name_contains_debug() {
let _g = crate::test_util::global_state_lock();
let _ = setsparam("WIDGET", "complete-debug-something");
let _ = _complete_help_generic();
assert_eq!(
getsparam("ZSH_TRACE_GENERIC_WIDGET").as_deref(),
Some("_complete_debug")
);
}
}