mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-28 13:18:04 +00:00
assistant: Remove unwrap
s in RecentBuffersContext
(#11938)
This PR removes the `unwrap`s in the `RecentBuffersContext` when building the message. We can just make `build_message` return a `Result` to clean things up. Release Notes: - N/A
This commit is contained in:
parent
746223427e
commit
97691c1def
1 changed files with 35 additions and 35 deletions
|
@ -3,8 +3,10 @@ use std::iter;
|
|||
use std::path::PathBuf;
|
||||
use std::time::Duration;
|
||||
|
||||
use anyhow::Result;
|
||||
use gpui::{ModelContext, Subscription, Task, WeakModel};
|
||||
use language::{Buffer, BufferSnapshot, DiagnosticEntry, Point};
|
||||
use util::ResultExt;
|
||||
|
||||
use crate::ambient_context::ContextUpdated;
|
||||
use crate::assistant_panel::Conversation;
|
||||
|
@ -69,61 +71,60 @@ impl RecentBuffersContext {
|
|||
const DEBOUNCE_TIMEOUT: Duration = Duration::from_millis(100);
|
||||
cx.background_executor().timer(DEBOUNCE_TIMEOUT).await;
|
||||
|
||||
let message = cx
|
||||
let message_task = cx
|
||||
.background_executor()
|
||||
.spawn(async move { Self::build_message(&buffers) })
|
||||
.await;
|
||||
this.update(&mut cx, |conversation, cx| {
|
||||
conversation.ambient_context.recent_buffers.message = message;
|
||||
conversation.count_remaining_tokens(cx);
|
||||
cx.notify();
|
||||
})
|
||||
.ok();
|
||||
.spawn(async move { Self::build_message(&buffers) });
|
||||
|
||||
if let Some(message) = message_task.await.log_err() {
|
||||
this.update(&mut cx, |conversation, cx| {
|
||||
conversation.ambient_context.recent_buffers.message = message;
|
||||
conversation.count_remaining_tokens(cx);
|
||||
cx.notify();
|
||||
})
|
||||
.log_err();
|
||||
}
|
||||
}));
|
||||
|
||||
ContextUpdated::Updating
|
||||
}
|
||||
}
|
||||
|
||||
fn build_message(buffers: &[(Option<PathBuf>, BufferSnapshot)]) -> String {
|
||||
fn build_message(buffers: &[(Option<PathBuf>, BufferSnapshot)]) -> Result<String> {
|
||||
let mut message = String::new();
|
||||
writeln!(
|
||||
message,
|
||||
"The following is a list of recent buffers that the user has opened."
|
||||
)
|
||||
.unwrap();
|
||||
)?;
|
||||
writeln!(
|
||||
message,
|
||||
"For every line in the buffer, I will include a row number that line corresponds to."
|
||||
)
|
||||
.unwrap();
|
||||
)?;
|
||||
writeln!(
|
||||
message,
|
||||
"Lines that don't have a number correspond to errors and warnings. For example:"
|
||||
)
|
||||
.unwrap();
|
||||
writeln!(message, "path/to/file.md").unwrap();
|
||||
writeln!(message, "```markdown").unwrap();
|
||||
writeln!(message, "1 The quick brown fox").unwrap();
|
||||
writeln!(message, "2 jumps over one active").unwrap();
|
||||
writeln!(message, " --- error: should be 'the'").unwrap();
|
||||
writeln!(message, " ------ error: should be 'lazy'").unwrap();
|
||||
writeln!(message, "3 dog").unwrap();
|
||||
writeln!(message, "```").unwrap();
|
||||
)?;
|
||||
writeln!(message, "path/to/file.md")?;
|
||||
writeln!(message, "```markdown")?;
|
||||
writeln!(message, "1 The quick brown fox")?;
|
||||
writeln!(message, "2 jumps over one active")?;
|
||||
writeln!(message, " --- error: should be 'the'")?;
|
||||
writeln!(message, " ------ error: should be 'lazy'")?;
|
||||
writeln!(message, "3 dog")?;
|
||||
writeln!(message, "```")?;
|
||||
|
||||
message.push('\n');
|
||||
writeln!(message, "Here's the actual recent buffer list:").unwrap();
|
||||
writeln!(message, "Here's the actual recent buffer list:")?;
|
||||
for (path, buffer) in buffers {
|
||||
if let Some(path) = path {
|
||||
writeln!(message, "{}", path.display()).unwrap();
|
||||
writeln!(message, "{}", path.display())?;
|
||||
} else {
|
||||
writeln!(message, "untitled").unwrap();
|
||||
writeln!(message, "untitled")?;
|
||||
}
|
||||
|
||||
if let Some(language) = buffer.language() {
|
||||
writeln!(message, "```{}", language.name().to_lowercase()).unwrap();
|
||||
writeln!(message, "```{}", language.name().to_lowercase())?;
|
||||
} else {
|
||||
writeln!(message, "```").unwrap();
|
||||
writeln!(message, "```")?;
|
||||
}
|
||||
|
||||
let mut diagnostics = buffer
|
||||
|
@ -149,7 +150,7 @@ impl RecentBuffersContext {
|
|||
}
|
||||
|
||||
let row_width = (display_row as f32).log10() as usize + 1;
|
||||
write!(message, "{}", display_row).unwrap();
|
||||
write!(message, "{}", display_row)?;
|
||||
if row_width < gutter_width {
|
||||
message.extend(iter::repeat(' ').take(gutter_width - row_width));
|
||||
}
|
||||
|
@ -178,7 +179,7 @@ impl RecentBuffersContext {
|
|||
};
|
||||
|
||||
message.extend(iter::repeat('-').take((end_column - start_column) as usize));
|
||||
writeln!(message, " {}", diagnostic.diagnostic.message).unwrap();
|
||||
writeln!(message, " {}", diagnostic.diagnostic.message)?;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -188,14 +189,13 @@ impl RecentBuffersContext {
|
|||
writeln!(
|
||||
message,
|
||||
"When quoting the above code, mention which rows the code occurs at."
|
||||
)
|
||||
.unwrap();
|
||||
)?;
|
||||
writeln!(
|
||||
message,
|
||||
"Never include rows in the quoted code itself and only report lines that didn't start with a row number."
|
||||
)
|
||||
.unwrap();
|
||||
?;
|
||||
|
||||
message
|
||||
Ok(message)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue