diff --git a/assets/prompts/content_prompt.hbs b/assets/prompts/content_prompt.hbs
index cf4141349b..e944e230f5 100644
--- a/assets/prompts/content_prompt.hbs
+++ b/assets/prompts/content_prompt.hbs
@@ -47,6 +47,17 @@ And here's the section to rewrite based on that prompt again for reference:
{{{rewrite_section}}}
+
+{{#if diagnostic_errors}}
+{{#each diagnostic_errors}}
+
+ {{line_number}}
+ {{error_message}}
+ {{code_content}}
+
+{{/each}}
+{{/if}}
+
{{/if}}
Only make changes that are necessary to fulfill the prompt, leave everything else as-is. All surrounding {{content_type}} will be preserved.
diff --git a/crates/assistant/src/prompts.rs b/crates/assistant/src/prompts.rs
index ae2ab4787e..7d99a70d14 100644
--- a/crates/assistant/src/prompts.rs
+++ b/crates/assistant/src/prompts.rs
@@ -4,13 +4,20 @@ use fs::Fs;
use futures::StreamExt;
use gpui::AssetSource;
use handlebars::{Handlebars, RenderError};
-use language::{BufferSnapshot, LanguageName};
+use language::{BufferSnapshot, LanguageName, Point};
use parking_lot::Mutex;
use serde::Serialize;
use std::{ops::Range, path::PathBuf, sync::Arc, time::Duration};
use text::LineEnding;
use util::ResultExt;
+#[derive(Serialize)]
+pub struct ContentPromptDiagnosticContext {
+ pub line_number: usize,
+ pub error_message: String,
+ pub code_content: String,
+}
+
#[derive(Serialize)]
pub struct ContentPromptContext {
pub content_type: String,
@@ -20,6 +27,7 @@ pub struct ContentPromptContext {
pub document_content: String,
pub user_prompt: String,
pub rewrite_section: Option,
+ pub diagnostic_errors: Vec,
}
#[derive(Serialize)]
@@ -261,6 +269,17 @@ impl PromptBuilder {
} else {
None
};
+ let diagnostics = buffer.diagnostics_in_range::<_, Point>(range, false);
+ let diagnostic_errors: Vec = diagnostics
+ .map(|entry| {
+ let start = entry.range.start;
+ ContentPromptDiagnosticContext {
+ line_number: (start.row + 1) as usize,
+ error_message: entry.diagnostic.message.clone(),
+ code_content: buffer.text_for_range(entry.range.clone()).collect(),
+ }
+ })
+ .collect();
let context = ContentPromptContext {
content_type: content_type.to_string(),
@@ -270,8 +289,8 @@ impl PromptBuilder {
document_content,
user_prompt,
rewrite_section,
+ diagnostic_errors,
};
-
self.handlebars.lock().render("content_prompt", &context)
}