Nothing to see here, move along
at main 86 lines 2.1 kB view raw
1use core::fmt; 2 3use crate::color::{Bold, Dim, Fg, Reset}; 4use crate::domain; 5use crate::palette; 6use crate::severity::Severity; 7 8const SPACES: &str = " "; 9 10fn write_padding(w: &mut dyn fmt::Write, n: usize) -> fmt::Result { 11 w.write_str(&SPACES[..n.min(SPACES.len())]) 12} 13 14pub fn write_gutter( 15 w: &mut dyn fmt::Write, 16 domain: &str, 17 severity: Severity, 18 message: fmt::Arguments<'_>, 19 gutter_width: usize, 20) -> fmt::Result { 21 let group = domain::classify(domain); 22 let label_color = group.label_color(); 23 let msg_color = severity.message_color(); 24 let padding = gutter_width.saturating_sub(domain.len() + 1); 25 write_padding(w, padding)?; 26 write!( 27 w, 28 "{}{}{}{} {}|{} {}{}{}", 29 Bold, 30 Fg(label_color), 31 domain, 32 Reset, 33 Fg(palette::BAR_DIM), 34 Reset, 35 Fg(msg_color), 36 message, 37 Reset 38 ) 39} 40 41pub fn write_message_only( 42 w: &mut dyn fmt::Write, 43 severity: Severity, 44 message: fmt::Arguments<'_>, 45) -> fmt::Result { 46 write!(w, "{}{}{}", Fg(severity.message_color()), message, Reset) 47} 48 49pub fn write_gutter_label( 50 w: &mut dyn fmt::Write, 51 domain: &str, 52 dim: bool, 53 gutter_width: usize, 54) -> fmt::Result { 55 let group = domain::classify(domain); 56 let label_color = group.label_color(); 57 let padding = gutter_width.saturating_sub(domain.len() + 1); 58 write_padding(w, padding)?; 59 match dim { 60 true => write!( 61 w, 62 "{}{}{}{} {}|{} ", 63 Dim, 64 Fg(label_color), 65 domain, 66 Reset, 67 Fg(palette::BAR_DIM), 68 Reset 69 ), 70 false => write!( 71 w, 72 "{}{}{}{} {}|{} ", 73 Bold, 74 Fg(label_color), 75 domain, 76 Reset, 77 Fg(palette::BAR_DIM), 78 Reset 79 ), 80 } 81} 82 83pub fn write_continuation(w: &mut dyn fmt::Write, gutter_width: usize) -> fmt::Result { 84 write_padding(w, gutter_width)?; 85 write!(w, "{}|{} ", Fg(palette::BAR_DIM), Reset) 86}