Fix fzf chooser preview with space-separated module paths (#2141)

This commit is contained in:
Casey Rodarmor 2024-06-09 03:01:24 +02:00 committed by GitHub
parent 0de971942a
commit 3236154d8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 34 additions and 14 deletions

View File

@ -11,14 +11,6 @@ const CHOOSE_HELP: &str = "Select one or more recipes to run using a binary choo
If `--chooser` is not passed the chooser defaults to the \ If `--chooser` is not passed the chooser defaults to the \
value of $JUST_CHOOSER, falling back to `fzf`"; value of $JUST_CHOOSER, falling back to `fzf`";
pub(crate) fn chooser_default(justfile: &Path) -> OsString {
let mut chooser = OsString::new();
chooser.push("fzf --multi --preview 'just --unstable --color always --justfile \"");
chooser.push(justfile);
chooser.push("\" --show {}'");
chooser
}
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub(crate) struct Config { pub(crate) struct Config {
pub(crate) check: bool, pub(crate) check: bool,
@ -568,15 +560,20 @@ impl Config {
} }
} }
fn parse_module_path(path: ValuesRef<String>) -> ConfigResult<ModulePath> { fn parse_module_path(values: ValuesRef<String>) -> ConfigResult<ModulePath> {
let path = values.clone().map(|s| (*s).as_str()).collect::<Vec<&str>>();
let path = if path.len() == 1 && path[0].contains(' ') {
path[0].split_whitespace().collect::<Vec<&str>>()
} else {
path
};
path path
.clone()
.map(|s| (*s).as_str())
.collect::<Vec<&str>>()
.as_slice() .as_slice()
.try_into() .try_into()
.map_err(|()| ConfigError::ModulePath { .map_err(|()| ConfigError::ModulePath {
path: path.cloned().collect(), path: values.cloned().collect(),
}) })
} }

View File

@ -231,7 +231,15 @@ impl Subcommand {
return Err(Error::NoChoosableRecipes); return Err(Error::NoChoosableRecipes);
} }
let chooser = chooser.map_or_else(|| config::chooser_default(&search.justfile), From::from); let chooser = if let Some(chooser) = chooser {
OsString::from(chooser)
} else {
let mut chooser = OsString::new();
chooser.push("fzf --multi --preview 'just --unstable --color always --justfile \"");
chooser.push(&search.justfile);
chooser.push("\" --show {}'");
chooser
};
let result = justfile let result = justfile
.settings .settings

View File

@ -124,3 +124,18 @@ fn show_invalid_path() {
.status(1) .status(1)
.run(); .run();
} }
#[test]
fn show_space_separated_path() {
Test::new()
.write("foo.just", "bar:\n @echo MODULE")
.justfile(
"
mod foo
",
)
.test_round_trip(false)
.args(["--unstable", "--show", "foo bar"])
.stdout("bar:\n @echo MODULE\n")
.run();
}