Skip to content

Commit

Permalink
feat(fancy): Add option to change the link display text (#335)
Browse files Browse the repository at this point in the history
This option allows to globally change the default `(link)` display text with any other text provider by users.
  • Loading branch information
calavera authored Feb 5, 2024
1 parent cf2d8c0 commit c7144ee
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/handlers/graphical.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ pub struct GraphicalReportHandler {
pub(crate) word_separator: Option<textwrap::WordSeparator>,
pub(crate) word_splitter: Option<textwrap::WordSplitter>,
pub(crate) highlighter: MietteHighlighter,
pub(crate) link_display_text: Option<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
Expand All @@ -62,6 +63,7 @@ impl GraphicalReportHandler {
word_separator: None,
word_splitter: None,
highlighter: MietteHighlighter::default(),
link_display_text: None,
}
}

Expand All @@ -80,6 +82,7 @@ impl GraphicalReportHandler {
word_separator: None,
word_splitter: None,
highlighter: MietteHighlighter::default(),
link_display_text: None,
}
}

Expand Down Expand Up @@ -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<String>) -> Self {
self.link_display_text = Some(text.into());
self
}
}

impl Default for GraphicalReportHandler {
Expand Down Expand Up @@ -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)?;
Expand Down
22 changes: 22 additions & 0 deletions tests/graphical.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down

0 comments on commit c7144ee

Please sign in to comment.