From 449e744c1443561d83a255c4954c7400fa0f4bf4 Mon Sep 17 00:00:00 2001 From: David Soria Parra <167242713+dsp-ant@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:58:26 +0100 Subject: [PATCH] context_servers: Normalize the line endings of context servers (#17112) Context servers might return CR characters, which are not acceptable in Zed and cause ranges to be invalidated. We need to normalize them. Closes #17109 Release Notes: - context_servers: Fixed an issue where context servers returning a carriage return character would result in a panic. --- .../src/slash_command/context_server_command.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/assistant/src/slash_command/context_server_command.rs b/crates/assistant/src/slash_command/context_server_command.rs index 7dc9b34cebeb5bab642728481dfd81d2b7fdf04e..027a6baf2bf898ae19e3d0aec2ece1ce9db58a17 100644 --- a/crates/assistant/src/slash_command/context_server_command.rs +++ b/crates/assistant/src/slash_command/context_server_command.rs @@ -12,6 +12,7 @@ use gpui::{Task, WeakView, WindowContext}; use language::{CodeLabel, LspAdapterDelegate}; use std::sync::atomic::AtomicBool; use std::sync::Arc; +use text::LineEnding; use ui::{IconName, SharedString}; use workspace::Workspace; @@ -127,10 +128,14 @@ impl SlashCommand for ContextServerSlashCommand { return Err(anyhow!("Context server not initialized")); }; let result = protocol.run_prompt(&prompt_name, prompt_args).await?; + let mut prompt = result.prompt; + + // We must normalize the line endings here, since servers might return CR characters. + LineEnding::normalize(&mut prompt); Ok(SlashCommandOutput { sections: vec![SlashCommandOutputSection { - range: 0..(result.prompt.len()), + range: 0..(prompt.len()), icon: IconName::ZedAssistant, label: SharedString::from( result @@ -138,7 +143,7 @@ impl SlashCommand for ContextServerSlashCommand { .unwrap_or(format!("Result from {}", prompt_name)), ), }], - text: result.prompt, + text: prompt, run_commands_in_text: false, }) })