From c7144ee513bf8f06c5f7d89c45436802994a51fc Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sun, 4 Feb 2024 16:54:18 -0800 Subject: [PATCH] feat(fancy): Add option to change the link display text (#335) This option allows to globally change the default `(link)` display text with any other text provider by users. --- src/handlers/graphical.rs | 13 ++++++++++++- tests/graphical.rs | 22 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/handlers/graphical.rs b/src/handlers/graphical.rs index d7e1883a..3f74227a 100644 --- a/src/handlers/graphical.rs +++ b/src/handlers/graphical.rs @@ -36,6 +36,7 @@ pub struct GraphicalReportHandler { pub(crate) word_separator: Option, pub(crate) word_splitter: Option, pub(crate) highlighter: MietteHighlighter, + pub(crate) link_display_text: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -62,6 +63,7 @@ impl GraphicalReportHandler { word_separator: None, word_splitter: None, highlighter: MietteHighlighter::default(), + link_display_text: None, } } @@ -80,6 +82,7 @@ impl GraphicalReportHandler { word_separator: None, word_splitter: None, highlighter: MietteHighlighter::default(), + link_display_text: None, } } @@ -190,6 +193,13 @@ impl GraphicalReportHandler { self.highlighter = MietteHighlighter::nocolor(); self } + + /// Sets the display text for links. + /// Miette displays `(link)` if this option is not set. + pub fn with_link_display_text(mut self, text: impl Into) -> Self { + self.link_display_text = Some(text.into()); + self + } } impl Default for GraphicalReportHandler { @@ -246,11 +256,12 @@ impl GraphicalReportHandler { } else { "".to_string() }; + let display_text = self.link_display_text.as_deref().unwrap_or("(link)"); let link = format!( "\u{1b}]8;;{}\u{1b}\\{}{}\u{1b}]8;;\u{1b}\\", url, code.style(severity_style), - "(link)".style(self.theme.styles.link) + display_text.style(self.theme.styles.link) ); write!(header, "{}", link)?; writeln!(f, "{}", header)?; diff --git a/tests/graphical.rs b/tests/graphical.rs index 32e3441a..7e5de785 100644 --- a/tests/graphical.rs +++ b/tests/graphical.rs @@ -1341,6 +1341,28 @@ fn disable_url_links() -> Result<(), MietteError> { Ok(()) } +#[test] +fn url_links_with_display_text() -> Result<(), MietteError> { + #[derive(Debug, Diagnostic, Error)] + #[error("oops!")] + #[diagnostic( + code(oops::my::bad), + help("try doing it better next time?"), + url("https://example.com") + )] + struct MyBad; + let err = MyBad; + let out = fmt_report_with_settings(err.into(), |handler| { + handler.with_link_display_text("Read the documentation") + }); + + println!("Error: {}", out); + assert!(out.contains("https://example.com")); + assert!(out.contains("Read the documentation")); + assert!(out.contains("oops::my::bad")); + Ok(()) +} + #[test] fn related() -> Result<(), MietteError> { #[derive(Debug, Diagnostic, Error)]