https://github.com/user-attachments/assets/c5723950-7628-4073-bf03-f0a7473e984e Release Notes: - N/A
Unified · Split
| @@ -1,5 +1,5 @@ | ||
| 1 | 1 | use super::{diagnostics_command::write_single_file_diagnostics, SlashCommand, SlashCommandOutput}; |
| 2 | −use anyhow::{anyhow, Result}; | |
| 2 | +use anyhow::{anyhow, Context as _, Result}; | |
| 3 | 3 | use assistant_slash_command::{ArgumentCompletion, SlashCommandOutputSection}; |
| 4 | 4 | use fuzzy::PathMatch; |
| 5 | 5 | use gpui::{AppContext, Model, Task, View, WeakView}; |
| @@ -164,7 +164,7 @@ impl SlashCommand for FileSlashCommand { · 158 unmodified lines | ||
| 164 | 164 | Some(ArgumentCompletion { |
| 165 | 165 | label, |
| 166 | 166 | new_text: text, |
| 167 | − run_command: true, | |
| 167 | + run_command: false, | |
| 168 | 168 | }) |
| 169 | 169 | }) |
| 170 | 170 | .collect()) |
| @@ -182,11 +182,11 @@ impl SlashCommand for FileSlashCommand { · 11 unmodified lines | ||
| 182 | 182 | return Task::ready(Err(anyhow!("workspace was dropped"))); |
| 183 | 183 | }; |
| 184 | 184 | |
| 185 | − let Some(argument) = arguments.first() else { | |
| 185 | + if arguments.is_empty() { | |
| 186 | 186 | return Task::ready(Err(anyhow!("missing path"))); |
| 187 | 187 | }; |
| 188 | 188 | |
| 189 | − let task = collect_files(workspace.read(cx).project().clone(), argument, cx); | |
| 189 | + let task = collect_files(workspace.read(cx).project().clone(), arguments, cx); | |
| 190 | 190 | |
| 191 | 191 | cx.foreground_executor().spawn(async move { |
| 192 | 192 | let (text, ranges) = task.await?; |
| @@ -217,10 +217,17 @@ enum EntryType { · 24 unmodified lines | ||
| 217 | 217 | |
| 218 | 218 | fn collect_files( |
| 219 | 219 | project: Model<Project>, |
| 220 | − glob_input: &str, | |
| 220 | + glob_inputs: &[String], | |
| 221 | 221 | cx: &mut AppContext, |
| 222 | 222 | ) -> Task<Result<(String, Vec<(Range<usize>, PathBuf, EntryType)>)>> { |
| 223 | − let Ok(matcher) = PathMatcher::new(&[glob_input.to_owned()]) else { | |
| 223 | + let Ok(matchers) = glob_inputs | |
| 224 | + .into_iter() | |
| 225 | + .map(|glob_input| { | |
| 226 | + PathMatcher::new(&[glob_input.to_owned()]) | |
| 227 | + .with_context(|| format!("invalid path {glob_input}")) | |
| 228 | + }) | |
| 229 | + .collect::<anyhow::Result<Vec<PathMatcher>>>() | |
| 230 | + else { | |
| 224 | 231 | return Task::ready(Err(anyhow!("invalid path"))); |
| 225 | 232 | }; |
| 226 | 233 | |
| @@ -242,7 +249,10 @@ fn collect_files( · 15 unmodified lines | ||
| 242 | 249 | let mut path_including_worktree_name = PathBuf::new(); |
| 243 | 250 | path_including_worktree_name.push(snapshot.root_name()); |
| 244 | 251 | path_including_worktree_name.push(&entry.path); |
| 245 | − if !matcher.is_match(&path_including_worktree_name) { | |
| 252 | + if !matchers | |
| 253 | + .iter() | |
| 254 | + .any(|matcher| matcher.is_match(&path_including_worktree_name)) | |
| 255 | + { | |
| 246 | 256 | continue; |
| 247 | 257 | } |
| 248 | 258 | |