use std::sync::Arc; use std::sync::atomic::AtomicBool; use anyhow::Result; use assistant_slash_command::{ ArgumentCompletion, SlashCommand, SlashCommandOutput, SlashCommandOutputSection, SlashCommandResult, }; use chrono::Local; use gpui::{Task, WeakEntity}; use language::{BufferSnapshot, LspAdapterDelegate}; use ui::prelude::*; use workspace::Workspace; pub struct NowSlashCommand; impl SlashCommand for NowSlashCommand { fn name(&self) -> String { "now".into() } fn description(&self) -> String { "Insert current date and time".into() } fn menu_text(&self) -> String { self.description() } fn requires_argument(&self) -> bool { false } fn complete_argument( self: Arc, _arguments: &[String], _cancel: Arc, _workspace: Option>, _window: &mut Window, _cx: &mut App, ) -> Task>> { Task::ready(Ok(Vec::new())) } fn run( self: Arc, _arguments: &[String], _context_slash_command_output_sections: &[SlashCommandOutputSection], _context_buffer: BufferSnapshot, _workspace: WeakEntity, _delegate: Option>, _window: &mut Window, _cx: &mut App, ) -> Task { let now = Local::now(); let text = format!("Today is {now}.", now = now.to_rfc2822()); let range = 0..text.len(); Task::ready(Ok(SlashCommandOutput { text, sections: vec![SlashCommandOutputSection { range, icon: IconName::CountdownTimer, label: now.to_rfc2822().into(), metadata: None, }], run_commands_in_text: false, } .to_event_stream())) } }