agent: Set message editor language to markdown (#52113)

Cameron Mcloughlin created

Change summary

crates/agent_ui/src/message_editor.rs | 37 +++++++++++++++++++++-------
1 file changed, 27 insertions(+), 10 deletions(-)

Detailed changes

crates/agent_ui/src/message_editor.rs 🔗

@@ -14,7 +14,6 @@ use acp_thread::MentionUri;
 use agent::ThreadStore;
 use agent_client_protocol as acp;
 use anyhow::{Result, anyhow};
-use collections::HashSet;
 use editor::{
     Addon, AnchorRangeExt, ContextMenuOptions, Editor, EditorElement, EditorEvent, EditorMode,
     EditorStyle, Inlay, MultiBuffer, MultiBufferOffset, MultiBufferSnapshot, ToOffset,
@@ -25,7 +24,7 @@ use gpui::{
     AppContext, ClipboardEntry, Context, Entity, EventEmitter, FocusHandle, Focusable, ImageFormat,
     KeyContext, SharedString, Subscription, Task, TextStyle, WeakEntity,
 };
-use language::{Buffer, Language, language_settings::InlayHintKind};
+use language::{Buffer, language_settings::InlayHintKind};
 use parking_lot::RwLock;
 use project::AgentId;
 use project::{CompletionIntent, InlayHint, InlayHintLabel, InlayId, Project, Worktree};
@@ -172,16 +171,18 @@ impl MessageEditor {
         window: &mut Window,
         cx: &mut Context<Self>,
     ) -> Self {
-        let language = Language::new(
-            language::LanguageConfig {
-                completion_query_characters: HashSet::from_iter(['.', '-', '_', '@']),
-                ..Default::default()
-            },
-            None,
-        );
+        let language_registry = project
+            .upgrade()
+            .map(|project| project.read(cx).languages().clone());
 
         let editor = cx.new(|cx| {
-            let buffer = cx.new(|cx| Buffer::local("", cx).with_language(Arc::new(language), cx));
+            let buffer = cx.new(|cx| {
+                let buffer = Buffer::local("", cx);
+                if let Some(language_registry) = language_registry.as_ref() {
+                    buffer.set_language_registry(language_registry.clone());
+                }
+                buffer
+            });
             let buffer = cx.new(|cx| MultiBuffer::singleton(buffer, cx));
 
             let mut editor = Editor::new(mode, buffer, None, window, cx);
@@ -287,6 +288,22 @@ impl MessageEditor {
             }
         }));
 
+        if let Some(language_registry) = language_registry {
+            let editor = editor.clone();
+            cx.spawn(async move |_, cx| {
+                let markdown = language_registry.language_for_name("Markdown").await?;
+                editor.update(cx, |editor, cx| {
+                    if let Some(buffer) = editor.buffer().read(cx).as_singleton() {
+                        buffer.update(cx, |buffer, cx| {
+                            buffer.set_language(Some(markdown), cx);
+                        });
+                    }
+                });
+                anyhow::Ok(())
+            })
+            .detach_and_log_err(cx);
+        }
+
         Self {
             editor,
             mention_set,