mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-19 19:08:08 +00:00
formatter: add .labeled().with_heading() helper
I'm going to add a few callers of .with_heading() outside of ui.rs.
This commit is contained in:
parent
57022d6f04
commit
b9e29b009d
2 changed files with 23 additions and 8 deletions
|
@ -65,6 +65,11 @@ impl<T, S> LabeledWriter<T, S> {
|
|||
pub fn new(formatter: T, label: S) -> Self {
|
||||
LabeledWriter { formatter, label }
|
||||
}
|
||||
|
||||
/// Turns into writer that prints labeled message with the `heading`.
|
||||
pub fn with_heading<H>(self, heading: H) -> HeadingLabeledWriter<T, S, H> {
|
||||
HeadingLabeledWriter::new(self, heading)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T, S> LabeledWriter<T, S>
|
||||
|
@ -96,9 +101,9 @@ pub struct HeadingLabeledWriter<T, S, H> {
|
|||
}
|
||||
|
||||
impl<T, S, H> HeadingLabeledWriter<T, S, H> {
|
||||
pub fn new(formatter: T, label: S, heading: H) -> Self {
|
||||
pub fn new(writer: LabeledWriter<T, S>, heading: H) -> Self {
|
||||
HeadingLabeledWriter {
|
||||
writer: LabeledWriter::new(formatter, label),
|
||||
writer,
|
||||
heading: Some(heading),
|
||||
}
|
||||
}
|
||||
|
@ -1162,8 +1167,14 @@ mod tests {
|
|||
let mut output: Vec<u8> = vec![];
|
||||
let mut formatter: Box<dyn Formatter> =
|
||||
Box::new(ColorFormatter::for_config(&mut output, &config, false).unwrap());
|
||||
HeadingLabeledWriter::new(formatter.as_mut(), "inner", "Should be noop: ");
|
||||
let mut writer = HeadingLabeledWriter::new(formatter.as_mut(), "inner", "Heading: ");
|
||||
formatter
|
||||
.as_mut()
|
||||
.labeled("inner")
|
||||
.with_heading("Should be noop: ");
|
||||
let mut writer = formatter
|
||||
.as_mut()
|
||||
.labeled("inner")
|
||||
.with_heading("Heading: ");
|
||||
write!(writer, "Message").unwrap();
|
||||
writeln!(writer, " continues").unwrap();
|
||||
drop(formatter);
|
||||
|
@ -1176,7 +1187,10 @@ mod tests {
|
|||
fn test_heading_labeled_writer_empty_string() {
|
||||
let mut output: Vec<u8> = vec![];
|
||||
let mut formatter: Box<dyn Formatter> = Box::new(PlainTextFormatter::new(&mut output));
|
||||
let mut writer = HeadingLabeledWriter::new(formatter.as_mut(), "inner", "Heading: ");
|
||||
let mut writer = formatter
|
||||
.as_mut()
|
||||
.labeled("inner")
|
||||
.with_heading("Heading: ");
|
||||
// write_fmt() is called even if the format string is empty. I don't
|
||||
// know if that's guaranteed, but let's record the current behavior.
|
||||
write!(writer, "").unwrap();
|
||||
|
|
|
@ -424,7 +424,8 @@ impl Ui {
|
|||
&self,
|
||||
heading: H,
|
||||
) -> Option<HeadingLabeledWriter<Box<dyn Formatter + '_>, &'static str, H>> {
|
||||
(!self.quiet).then(|| HeadingLabeledWriter::new(self.stderr_formatter(), "hint", heading))
|
||||
self.hint_no_heading()
|
||||
.map(|writer| writer.with_heading(heading))
|
||||
}
|
||||
|
||||
/// Writer to print warning with the default "Warning: " heading.
|
||||
|
@ -444,7 +445,7 @@ impl Ui {
|
|||
&self,
|
||||
heading: H,
|
||||
) -> HeadingLabeledWriter<Box<dyn Formatter + '_>, &'static str, H> {
|
||||
HeadingLabeledWriter::new(self.stderr_formatter(), "warning", heading)
|
||||
self.warning_no_heading().with_heading(heading)
|
||||
}
|
||||
|
||||
/// Writer to print error without the "Error: " heading.
|
||||
|
@ -457,7 +458,7 @@ impl Ui {
|
|||
&self,
|
||||
heading: H,
|
||||
) -> HeadingLabeledWriter<Box<dyn Formatter + '_>, &'static str, H> {
|
||||
HeadingLabeledWriter::new(self.stderr_formatter(), "error", heading)
|
||||
self.error_no_heading().with_heading(heading)
|
||||
}
|
||||
|
||||
/// Waits for the pager exits.
|
||||
|
|
Loading…
Reference in a new issue