diff --git a/examples/custom_level.svg b/examples/custom_level.svg
index eebff280..62dded57 100644
--- a/examples/custom_level.svg
+++ b/examples/custom_level.svg
@@ -41,7 +41,7 @@
╰╴
- suggestion: use `break` on its own without a value inside this `while` loop
+ suggestion: use `break` on its own without a value inside this `while` loop
╭╴
diff --git a/examples/footer.svg b/examples/footer.svg
index e24ba5f5..e55ee041 100644
--- a/examples/footer.svg
+++ b/examples/footer.svg
@@ -32,9 +32,9 @@
|
- note: expected type: `snippet::Annotation`
+ note: expected type: `snippet::Annotation`
- found type: `__&__snippet::Annotation`
+ found type: `__&__snippet::Annotation`
diff --git a/examples/highlight_title.svg b/examples/highlight_title.svg
index 24f1b364..c748a1de 100644
--- a/examples/highlight_title.svg
+++ b/examples/highlight_title.svg
@@ -41,7 +41,7 @@
found fn item `fn(Box<(dyn Any + Send + 'static)>) -> Pin<_> {wrapped_fn}`
- note: function defined here
+ note: function defined here
--> $DIR/highlighting.rs:10:4
diff --git a/src/level.rs b/src/level.rs
index 87d1a9f6..eaa95600 100644
--- a/src/level.rs
+++ b/src/level.rs
@@ -78,7 +78,6 @@ impl<'a> Level<'a> {
groups: vec![Group::new().element(Element::Title(Title {
level: self,
title: header,
- primary: true,
}))],
}
}
@@ -92,11 +91,7 @@ impl<'a> Level<'a> {
///
///
pub fn title(self, title: &'a str) -> Title<'a> {
- Title {
- level: self,
- title,
- primary: false,
- }
+ Title { level: self, title }
}
pub(crate) fn as_str(&self) -> &'a str {
diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs
index 24455add..6afe3183 100644
--- a/src/renderer/mod.rs
+++ b/src/renderer/mod.rs
@@ -315,12 +315,16 @@ impl Renderer {
let peek = message_iter.peek().map(|(_, s)| s).copied();
match §ion {
Element::Title(title) => {
+ let title_style = match (i == 0, g == 0) {
+ (true, true) => TitleStyle::MainHeader,
+ (true, false) => TitleStyle::Header,
+ (false, _) => TitleStyle::Secondary,
+ };
self.render_title(
&mut buffer,
title,
- peek,
max_line_num_len,
- if i == 0 { false } else { !title.primary },
+ title_style,
message.id.as_ref().and_then(|id| {
if g == 0 && i == 0 {
Some(id)
@@ -433,26 +437,14 @@ impl Renderer {
&self,
buffer: &mut StyledBuffer,
title: &Title<'_>,
- next_section: Option<&Element<'_>>,
max_line_num_len: usize,
- is_secondary: bool,
+ title_style: TitleStyle,
id: Option<&&str>,
is_cont: bool,
) {
let line_offset = buffer.num_lines();
- let (has_primary_spans, has_span_labels) =
- next_section.map_or((false, false), |s| match s {
- Element::Title(_) | Element::Padding(_) => (false, false),
- Element::Cause(cause) => (
- cause.markers.iter().any(|m| m.kind.is_primary()),
- cause.markers.iter().any(|m| m.label.is_some()),
- ),
- Element::Suggestion(_) => (true, false),
- Element::Origin(_) => (false, true),
- });
-
- if !has_primary_spans && !has_span_labels && is_secondary {
+ if title_style == TitleStyle::Secondary {
// This is a secondary message with no span info
for _ in 0..max_line_num_len {
buffer.prepend(line_offset, " ", ElementStyle::NoStyle);
@@ -503,10 +495,10 @@ impl Renderer {
buffer.append(line_offset, "]", ElementStyle::Level(title.level.level));
label_width += 2 + id.len();
}
- let header_style = if is_secondary {
- ElementStyle::HeaderMsg
- } else {
- ElementStyle::MainHeaderMsg
+ let header_style = match title_style {
+ TitleStyle::MainHeader => ElementStyle::MainHeaderMsg,
+ TitleStyle::Header => ElementStyle::HeaderMsg,
+ TitleStyle::Secondary => unreachable!(),
};
if title.level.name != Some(None) {
buffer.append(line_offset, ": ", header_style);
@@ -661,7 +653,14 @@ impl Renderer {
max_line_num_len + 1,
);
let title = Level::NOTE.title(label);
- self.render_title(buffer, &title, None, max_line_num_len, true, None, false);
+ self.render_title(
+ buffer,
+ &title,
+ max_line_num_len,
+ TitleStyle::Secondary,
+ None,
+ false,
+ );
}
}
@@ -2717,6 +2716,13 @@ pub enum OutputTheme {
Unicode,
}
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+enum TitleStyle {
+ MainHeader,
+ Header,
+ Secondary,
+}
+
#[cfg(test)]
mod test {
use super::OUTPUT_REPLACEMENTS;
diff --git a/src/snippet.rs b/src/snippet.rs
index 7226783d..d3f50104 100644
--- a/src/snippet.rs
+++ b/src/snippet.rs
@@ -159,14 +159,6 @@ pub struct Padding;
pub struct Title<'a> {
pub(crate) level: Level<'a>,
pub(crate) title: &'a str,
- pub(crate) primary: bool,
-}
-
-impl Title<'_> {
- pub fn primary(mut self, primary: bool) -> Self {
- self.primary = primary;
- self
- }
}
/// A source view [`Element`] in a [`Group`]
diff --git a/tests/formatter.rs b/tests/formatter.rs
index a0e4df87..4fd96ff2 100644
--- a/tests/formatter.rs
+++ b/tests/formatter.rs
@@ -1663,6 +1663,8 @@ zappy
let input_new = Level::ERROR
.header("the size for values of type `T` cannot be known at compilation time")
.id("E0277")
+ // We need an empty group here to ensure the HELP line is rendered correctly
+ .group(Group::new())
.group(
Group::new()
.element(Level::HELP.title(