#![cfg(feature = "cli")]
use crate::cli::Cli;
use clap::CommandFactory;
use clap_complete::{Shell, generate};
use std::io::Write;
pub fn emit_completions<W: Write>(shell: Shell, writer: &mut W) -> std::io::Result<()> {
let mut cmd = Cli::command();
let bin_name = cmd.get_name().to_string();
generate(shell, &mut cmd, bin_name, writer);
writer.flush()
}
#[cfg(test)]
mod tests {
use super::*;
use clap_complete::Shell;
#[test]
fn bash_completion_script_is_non_empty() {
let mut buf = Vec::new();
emit_completions(Shell::Bash, &mut buf).expect("emit ok");
let s = String::from_utf8(buf).expect("utf-8");
assert!(s.contains("rusty-ts"));
assert!(!s.is_empty());
}
#[test]
fn all_four_shells_emit_non_empty() {
for shell in [Shell::Bash, Shell::Zsh, Shell::Fish, Shell::PowerShell] {
let mut buf = Vec::new();
emit_completions(shell, &mut buf).expect("emit ok");
assert!(!buf.is_empty(), "shell {shell:?} produced empty output");
}
}
}