From 4bc74f7e9006fc7f182c9dc6ea309ea83c5bb4f9 Mon Sep 17 00:00:00 2001 From: sigoden Date: Tue, 8 Oct 2024 12:38:31 +0800 Subject: refactor: NO_COLOR, highlight and render_error (#915) - If NO_COLOR is enabled, AIChat will not output any ANSI color codes. - `config.highlight` will only affect rendering markdown - improve rendering error --- src/repl/highlighter.rs | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) (limited to 'src/repl/highlighter.rs') diff --git a/src/repl/highlighter.rs b/src/repl/highlighter.rs index 65cb1cc..ab6174c 100644 --- a/src/repl/highlighter.rs +++ b/src/repl/highlighter.rs @@ -1,34 +1,28 @@ use super::REPL_COMMANDS; -use crate::config::GlobalConfig; +use crate::{config::GlobalConfig, utils::NO_COLOR}; use nu_ansi_term::{Color, Style}; use reedline::{Highlighter, StyledText}; -pub struct ReplHighlighter { - config: GlobalConfig, -} +const DEFAULT_COLOR: Color = Color::Default; +const MATCH_COLOR: Color = Color::Green; + +pub struct ReplHighlighter; impl ReplHighlighter { - pub fn new(config: &GlobalConfig) -> Self { - Self { - config: config.clone(), - } + pub fn new(_config: &GlobalConfig) -> Self { + Self } } impl Highlighter for ReplHighlighter { fn highlight(&self, line: &str, _cursor: usize) -> StyledText { - let color = Color::Default; - let match_color = if self.config.read().highlight { - Color::Green - } else { - color - }; - let mut styled_text = StyledText::new(); - if REPL_COMMANDS.iter().any(|cmd| line.contains(cmd.name)) { + if *NO_COLOR { + styled_text.push((Style::default(), line.to_string())); + } else if REPL_COMMANDS.iter().any(|cmd| line.contains(cmd.name)) { let matches: Vec<&str> = REPL_COMMANDS .iter() .filter(|cmd| line.contains(cmd.name)) @@ -43,11 +37,11 @@ impl Highlighter for ReplHighlighter { }); let buffer_split: Vec<&str> = line.splitn(2, &longest_match).collect(); - styled_text.push((Style::new().fg(color), buffer_split[0].to_string())); - styled_text.push((Style::new().fg(match_color), longest_match)); - styled_text.push((Style::new().fg(color), buffer_split[1].to_string())); + styled_text.push((Style::new().fg(DEFAULT_COLOR), buffer_split[0].to_string())); + styled_text.push((Style::new().fg(MATCH_COLOR), longest_match)); + styled_text.push((Style::new().fg(DEFAULT_COLOR), buffer_split[1].to_string())); } else { - styled_text.push((Style::new().fg(color), line.to_string())); + styled_text.push((Style::new().fg(DEFAULT_COLOR), line.to_string())); } styled_text -- cgit v1.2.3