From e24bf9452daaf4046702796a046b3f89d5f4275f Mon Sep 17 00:00:00 2001 From: OnlyYu1996 <1158673577@qq.com> Date: Sun, 17 May 2026 08:41:57 +0800 Subject: [PATCH] fix(cli): indent multiline alias descriptions --- src/cortex-cli/src/agent_cmd/tests.rs | 5 +-- src/cortex-cli/src/alias_cmd.rs | 55 +++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/cortex-cli/src/agent_cmd/tests.rs b/src/cortex-cli/src/agent_cmd/tests.rs index e2ff07f9f..18f7ba753 100644 --- a/src/cortex-cli/src/agent_cmd/tests.rs +++ b/src/cortex-cli/src/agent_cmd/tests.rs @@ -3,10 +3,9 @@ #[cfg(test)] mod tests { use crate::agent_cmd::cli::{CopyArgs, ExportArgs}; - use crate::agent_cmd::loader::{ - load_builtin_agents, parse_frontmatter, read_file_with_encoding, - }; + use crate::agent_cmd::loader::{load_builtin_agents, parse_frontmatter}; use crate::agent_cmd::types::AgentMode; + use crate::utils::file::read_file_with_encoding; #[test] fn test_read_file_with_utf8() { diff --git a/src/cortex-cli/src/alias_cmd.rs b/src/cortex-cli/src/alias_cmd.rs index f1df82c72..d9edf9f44 100644 --- a/src/cortex-cli/src/alias_cmd.rs +++ b/src/cortex-cli/src/alias_cmd.rs @@ -172,7 +172,7 @@ async fn run_set(args: AliasSetArgs) -> Result<()> { println!("Alias '{}' set to: {}", args.name, args.command); if let Some(desc) = &args.description { - println!(" Description: {}", desc); + print_multiline_description(" Description: ", " ", desc); } Ok(()) @@ -203,7 +203,7 @@ async fn run_list(args: AliasListArgs) -> Result<()> { for alias in aliases { println!(" {} = {}", alias.name, alias.command); if let Some(desc) = &alias.description { - println!(" {}", desc); + print_multiline_description(" ", " ", desc); } } @@ -265,12 +265,42 @@ async fn run_show(args: AliasShowArgs) -> Result<()> { println!("{}", "-".repeat(40)); println!(" Command: {}", alias.command); if let Some(desc) = &alias.description { - println!(" Description: {}", desc); + print_multiline_description(" Description: ", " ", desc); } Ok(()) } +fn format_multiline_description( + first_prefix: &str, + continuation_prefix: &str, + desc: &str, +) -> String { + let mut output = String::new(); + + for (index, line) in desc.lines().enumerate() { + if index > 0 { + output.push('\n'); + } + + if index == 0 { + output.push_str(first_prefix); + } else { + output.push_str(continuation_prefix); + } + output.push_str(line); + } + + output +} + +fn print_multiline_description(first_prefix: &str, continuation_prefix: &str, desc: &str) { + println!( + "{}", + format_multiline_description(first_prefix, continuation_prefix, desc) + ); +} + #[cfg(test)] mod tests { use super::*; @@ -299,6 +329,25 @@ mod tests { ); } + #[test] + fn test_format_multiline_description_indents_every_line() { + let formatted = + format_multiline_description(" ", " ", "First line\nSecond line\nThird line"); + + assert_eq!( + formatted, + " First line\n Second line\n Third line" + ); + } + + #[test] + fn test_format_multiline_description_uses_continuation_prefix() { + let formatted = + format_multiline_description(" Description: ", " ", "First\nSecond"); + + assert_eq!(formatted, " Description: First\n Second"); + } + #[test] fn test_alias_definition_without_description_json_roundtrip() { let alias = AliasDefinition {