Skip to content

Commit 06f12ea

Browse files
authored
Merge pull request #212 from Muscraft/first-title-primary
fix: Only bold the first title of a message
2 parents f835cca + f64b07d commit 06f12ea

File tree

7 files changed

+34
-39
lines changed

7 files changed

+34
-39
lines changed

examples/custom_level.svg

Lines changed: 1 addition & 1 deletion
Loading

examples/footer.svg

Lines changed: 2 additions & 2 deletions
Loading

examples/highlight_title.svg

Lines changed: 1 addition & 1 deletion
Loading

src/level.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ impl<'a> Level<'a> {
7878
groups: vec![Group::new().element(Element::Title(Title {
7979
level: self,
8080
title: header,
81-
primary: true,
8281
}))],
8382
}
8483
}
@@ -92,11 +91,7 @@ impl<'a> Level<'a> {
9291
///
9392
/// </div>
9493
pub fn title(self, title: &'a str) -> Title<'a> {
95-
Title {
96-
level: self,
97-
title,
98-
primary: false,
99-
}
94+
Title { level: self, title }
10095
}
10196

10297
pub(crate) fn as_str(&self) -> &'a str {

src/renderer/mod.rs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -315,12 +315,16 @@ impl Renderer {
315315
let peek = message_iter.peek().map(|(_, s)| s).copied();
316316
match &section {
317317
Element::Title(title) => {
318+
let title_style = match (i == 0, g == 0) {
319+
(true, true) => TitleStyle::MainHeader,
320+
(true, false) => TitleStyle::Header,
321+
(false, _) => TitleStyle::Secondary,
322+
};
318323
self.render_title(
319324
&mut buffer,
320325
title,
321-
peek,
322326
max_line_num_len,
323-
if i == 0 { false } else { !title.primary },
327+
title_style,
324328
message.id.as_ref().and_then(|id| {
325329
if g == 0 && i == 0 {
326330
Some(id)
@@ -433,26 +437,14 @@ impl Renderer {
433437
&self,
434438
buffer: &mut StyledBuffer,
435439
title: &Title<'_>,
436-
next_section: Option<&Element<'_>>,
437440
max_line_num_len: usize,
438-
is_secondary: bool,
441+
title_style: TitleStyle,
439442
id: Option<&&str>,
440443
is_cont: bool,
441444
) {
442445
let line_offset = buffer.num_lines();
443446

444-
let (has_primary_spans, has_span_labels) =
445-
next_section.map_or((false, false), |s| match s {
446-
Element::Title(_) | Element::Padding(_) => (false, false),
447-
Element::Cause(cause) => (
448-
cause.markers.iter().any(|m| m.kind.is_primary()),
449-
cause.markers.iter().any(|m| m.label.is_some()),
450-
),
451-
Element::Suggestion(_) => (true, false),
452-
Element::Origin(_) => (false, true),
453-
});
454-
455-
if !has_primary_spans && !has_span_labels && is_secondary {
447+
if title_style == TitleStyle::Secondary {
456448
// This is a secondary message with no span info
457449
for _ in 0..max_line_num_len {
458450
buffer.prepend(line_offset, " ", ElementStyle::NoStyle);
@@ -503,10 +495,10 @@ impl Renderer {
503495
buffer.append(line_offset, "]", ElementStyle::Level(title.level.level));
504496
label_width += 2 + id.len();
505497
}
506-
let header_style = if is_secondary {
507-
ElementStyle::HeaderMsg
508-
} else {
509-
ElementStyle::MainHeaderMsg
498+
let header_style = match title_style {
499+
TitleStyle::MainHeader => ElementStyle::MainHeaderMsg,
500+
TitleStyle::Header => ElementStyle::HeaderMsg,
501+
TitleStyle::Secondary => unreachable!(),
510502
};
511503
if title.level.name != Some(None) {
512504
buffer.append(line_offset, ": ", header_style);
@@ -661,7 +653,14 @@ impl Renderer {
661653
max_line_num_len + 1,
662654
);
663655
let title = Level::NOTE.title(label);
664-
self.render_title(buffer, &title, None, max_line_num_len, true, None, false);
656+
self.render_title(
657+
buffer,
658+
&title,
659+
max_line_num_len,
660+
TitleStyle::Secondary,
661+
None,
662+
false,
663+
);
665664
}
666665
}
667666

@@ -2717,6 +2716,13 @@ pub enum OutputTheme {
27172716
Unicode,
27182717
}
27192718

2719+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
2720+
enum TitleStyle {
2721+
MainHeader,
2722+
Header,
2723+
Secondary,
2724+
}
2725+
27202726
#[cfg(test)]
27212727
mod test {
27222728
use super::OUTPUT_REPLACEMENTS;

src/snippet.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,6 @@ pub struct Padding;
159159
pub struct Title<'a> {
160160
pub(crate) level: Level<'a>,
161161
pub(crate) title: &'a str,
162-
pub(crate) primary: bool,
163-
}
164-
165-
impl Title<'_> {
166-
pub fn primary(mut self, primary: bool) -> Self {
167-
self.primary = primary;
168-
self
169-
}
170162
}
171163

172164
/// A source view [`Element`] in a [`Group`]

tests/formatter.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,8 @@ zappy
16631663
let input_new = Level::ERROR
16641664
.header("the size for values of type `T` cannot be known at compilation time")
16651665
.id("E0277")
1666+
// We need an empty group here to ensure the HELP line is rendered correctly
1667+
.group(Group::new())
16661668
.group(
16671669
Group::new()
16681670
.element(Level::HELP.title(

0 commit comments

Comments
 (0)