magi-code 0.63.4

Repository-aware CLI coding agent for terminal work
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct BashModePrompt<'a> {
    pub(crate) original: &'a str,
    pub(crate) command: &'a str,
}

pub(crate) fn parse_bash_mode_prompt(prompt: &str) -> Option<BashModePrompt<'_>> {
    prompt.strip_prefix('!').map(|command| BashModePrompt {
        original: prompt,
        command,
    })
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn bash_mode_parse_bang_prefixed_prompt() {
        let parsed = parse_bash_mode_prompt("!git status").unwrap();

        assert_eq!(parsed.original, "!git status");
        assert_eq!(parsed.command, "git status");
    }

    #[test]
    fn bash_mode_parse_bare_bang_as_empty_command() {
        let parsed = parse_bash_mode_prompt("!").unwrap();

        assert_eq!(parsed.command, "");
    }

    #[test]
    fn bash_mode_parse_only_first_character() {
        assert!(parse_bash_mode_prompt("hello !git status").is_none());
        assert!(parse_bash_mode_prompt("/help").is_none());
    }

    #[test]
    fn bash_mode_preserves_command_remainder() {
        let parsed = parse_bash_mode_prompt("! cat file.md\n").unwrap();

        assert_eq!(parsed.command, " cat file.md\n");
    }
}