diff --git a/clap_complete/src/shells/fish.rs b/clap_complete/src/shells/fish.rs index b08292ce602..d08e94792e6 100644 --- a/clap_complete/src/shells/fish.rs +++ b/clap_complete/src/shells/fish.rs @@ -67,22 +67,19 @@ fn gen_fish_inner( basic_template.push_str(" -n \"__fish_use_subcommand\""); } } else { - basic_template.push_str( - format!( - " -n \"{}\"", - parent_commands - .iter() - .map(|command| format!("__fish_seen_subcommand_from {command}")) - .chain( - cmd.get_subcommands() - .flat_map(Command::get_name_and_visible_aliases) - .map(|name| format!("not __fish_seen_subcommand_from {name}")) - ) - .collect::>() - .join("; and ") - ) - .as_str(), - ); + let mut out = String::new(); + for &command in parent_commands { + out.push_str("__fish_seen_subcommand_from "); + out.push_str(command); + } + for name in cmd + .get_subcommands() + .flat_map(Command::get_name_and_visible_aliases) + { + out.push_str("; and not __fish_seen_subcommand_from "); + out.push_str(name); + } + basic_template.push_str(format!(" -n \"{out}\"").as_str()); } debug!("gen_fish_inner: parent_commands={parent_commands:?}");