Stop automatically running /file command afer file suggestions (#16222)

https://github.com/user-attachments/assets/c5723950-7628-4073-bf03-f0a7473e984e

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2024-08-14 17:47:03 +03:00 committed by GitHub
parent aa31f9ded0
commit 8d9dcf1e78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,5 +1,5 @@
use super::{diagnostics_command::write_single_file_diagnostics, SlashCommand, SlashCommandOutput};
use anyhow::{anyhow, Result};
use anyhow::{anyhow, Context as _, Result};
use assistant_slash_command::{ArgumentCompletion, SlashCommandOutputSection};
use fuzzy::PathMatch;
use gpui::{AppContext, Model, Task, View, WeakView};
@ -164,7 +164,7 @@ impl SlashCommand for FileSlashCommand {
Some(ArgumentCompletion {
label,
new_text: text,
run_command: true,
run_command: false,
})
})
.collect())
@ -182,11 +182,11 @@ impl SlashCommand for FileSlashCommand {
return Task::ready(Err(anyhow!("workspace was dropped")));
};
let Some(argument) = arguments.first() else {
if arguments.is_empty() {
return Task::ready(Err(anyhow!("missing path")));
};
let task = collect_files(workspace.read(cx).project().clone(), argument, cx);
let task = collect_files(workspace.read(cx).project().clone(), arguments, cx);
cx.foreground_executor().spawn(async move {
let (text, ranges) = task.await?;
@ -217,10 +217,17 @@ enum EntryType {
fn collect_files(
project: Model<Project>,
glob_input: &str,
glob_inputs: &[String],
cx: &mut AppContext,
) -> Task<Result<(String, Vec<(Range<usize>, PathBuf, EntryType)>)>> {
let Ok(matcher) = PathMatcher::new(&[glob_input.to_owned()]) else {
let Ok(matchers) = glob_inputs
.into_iter()
.map(|glob_input| {
PathMatcher::new(&[glob_input.to_owned()])
.with_context(|| format!("invalid path {glob_input}"))
})
.collect::<anyhow::Result<Vec<PathMatcher>>>()
else {
return Task::ready(Err(anyhow!("invalid path")));
};
@ -242,7 +249,10 @@ fn collect_files(
let mut path_including_worktree_name = PathBuf::new();
path_including_worktree_name.push(snapshot.root_name());
path_including_worktree_name.push(&entry.path);
if !matcher.is_match(&path_including_worktree_name) {
if !matchers
.iter()
.any(|matcher| matcher.is_match(&path_including_worktree_name))
{
continue;
}