diff --git a/clap_complete/src/dynamic/fish.rs b/clap_complete/src/dynamic/fish.rs index 5328c22be893..5c4b0812aac8 100644 --- a/clap_complete/src/dynamic/fish.rs +++ b/clap_complete/src/dynamic/fish.rs @@ -12,7 +12,6 @@ use std::{ fmt::Display, io::{stdout, Write}, iter, - os::unix::prelude::OsStrExt, }; use clap::Args; @@ -86,7 +85,7 @@ impl Completer for Fish { // TODO display non option values, in case the arg allows values starting with `-` } else if let Some(value_for) = value_for { for (item, help) in completions_for_arg(value_for, ¤t)? { - add_completion(&mut completions, item.as_bytes(), help)?; + add_completion(&mut completions, item.as_raw_bytes(), help)?; } } else { for subcommand in subcommands { diff --git a/clap_complete/src/dynamic/mod.rs b/clap_complete/src/dynamic/mod.rs index 9fb2da48ca38..8f978111a4ca 100644 --- a/clap_complete/src/dynamic/mod.rs +++ b/clap_complete/src/dynamic/mod.rs @@ -346,7 +346,7 @@ fn is_some_and(option: Option, fun: impl Fn(T) -> bool) -> bool { fn completions_for_arg( arg: &Arg, value: &RawOsStr, -) -> io::Result)>> { +) -> io::Result)>> { // TODO take current token to complete subdirectories let mut values = Vec::new(); debug!("complete_arg_value: arg={:?}, value={:?}", arg, value); @@ -354,12 +354,8 @@ fn completions_for_arg( if let Some(possible_values) = crate::generator::utils::possible_values(arg) { values.extend(possible_values.into_iter().filter_map(|p| { let name = RawOsStr::from_str(p.get_name()); - name.starts_with_os(value).then(|| { - ( - name.to_os_str().to_os_string(), - p.get_help().map(ToOwned::to_owned), - ) - }) + name.starts_with_os(value) + .then(|| (name.to_owned(), p.get_help().map(ToOwned::to_owned))) })); } else { match arg.get_value_hint() { @@ -402,7 +398,7 @@ fn completions_for_arg( fn complete_path( path: &clap_lex::RawOsStr, is_wanted: impl Fn(&Path) -> bool, -) -> Vec<(OsString, Option)> { +) -> Vec<(RawOsString, Option)> { let mut completions = Vec::new(); // `/` on Unix and `/`+`\` on Windows @@ -449,12 +445,12 @@ fn complete_path( let path = entry.path(); let mut suggestion = pathdiff::diff_paths(&path, &root).unwrap_or(path); suggestion.push(""); // Ensure trailing `/` - completions.push((suggestion.as_os_str().to_owned(), None)); + completions.push((RawOsString::new(suggestion.as_os_str().to_owned()), None)); } else { let path = entry.path(); if is_wanted(&path) { let suggestion = pathdiff::diff_paths(&path, &root).unwrap_or(path); - completions.push((suggestion.as_os_str().to_owned(), None)); + completions.push((RawOsString::new(suggestion.as_os_str().to_owned()), None)); } } }