Skip to content

Commit 7d45802

Browse files
committed
refactor: Move Renderer creation to Shell
1 parent 9d8b1a3 commit 7d45802

File tree

3 files changed

+22
-30
lines changed

3 files changed

+22
-30
lines changed

src/cargo/core/shell.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use annotate_snippets::{Message, Renderer};
12
use std::fmt;
23
use std::io::prelude::*;
34
use std::io::IsTerminal;
@@ -391,6 +392,19 @@ impl Shell {
391392
drop(writeln!(self.out(), "{}", encoded));
392393
Ok(())
393394
}
395+
396+
/// Prints the passed in [Message] to stderr
397+
pub fn emit_diagnostic(&mut self, message: Message<'_>) -> std::io::Result<()> {
398+
let term_width = self
399+
.err_width()
400+
.diagnostic_terminal_width()
401+
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH);
402+
writeln!(
403+
self.err(),
404+
"{}",
405+
Renderer::styled().term_width(term_width).render(message)
406+
)
407+
}
394408
}
395409

396410
impl Default for Shell {

src/cargo/util/lints.rs

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::core::FeatureValue::Dep;
33
use crate::core::{Edition, FeatureValue, Package};
44
use crate::util::interning::InternedString;
55
use crate::{CargoResult, GlobalContext};
6-
use annotate_snippets::{Level, Renderer, Snippet};
6+
use annotate_snippets::{Level, Snippet};
77
use cargo_util_schemas::manifest::{TomlLintLevel, TomlToolLints};
88
use pathdiff::diff_paths;
99
use std::collections::HashSet;
@@ -270,13 +270,8 @@ pub fn check_im_a_teapot(
270270
.fold(true),
271271
)
272272
.footer(Level::Note.title(&emitted_reason));
273-
let renderer = Renderer::styled().term_width(
274-
gctx.shell()
275-
.err_width()
276-
.diagnostic_terminal_width()
277-
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH),
278-
);
279-
writeln!(gctx.shell().err(), "{}", renderer.render(message))?;
273+
274+
gctx.shell().emit_diagnostic(message)?;
280275
}
281276
Ok(())
282277
}
@@ -367,13 +362,7 @@ pub fn check_implicit_features(
367362
));
368363
message = message.footer(Level::Note.title(emitted_source.as_ref().unwrap()));
369364
}
370-
let renderer = Renderer::styled().term_width(
371-
gctx.shell()
372-
.err_width()
373-
.diagnostic_terminal_width()
374-
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH),
375-
);
376-
writeln!(gctx.shell().err(), "{}", renderer.render(message))?;
365+
gctx.shell().emit_diagnostic(message)?;
377366
}
378367
Ok(())
379368
}
@@ -476,13 +465,8 @@ pub fn unused_dependencies(
476465
"remove the dependency or activate it in a feature with `dep:{name}`"
477466
);
478467
message = message.footer(Level::Help.title(&help));
479-
let renderer = Renderer::styled().term_width(
480-
gctx.shell()
481-
.err_width()
482-
.diagnostic_terminal_width()
483-
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH),
484-
);
485-
writeln!(gctx.shell().err(), "{}", renderer.render(message))?;
468+
469+
gctx.shell().emit_diagnostic(message)?;
486470
}
487471
}
488472
}

src/cargo/util/toml/mod.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use annotate_snippets::{Level, Renderer, Snippet};
1+
use annotate_snippets::{Level, Snippet};
22
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
33
use std::ffi::OsStr;
44
use std::path::{Path, PathBuf};
@@ -2309,13 +2309,7 @@ fn emit_diagnostic(
23092309
.fold(true)
23102310
.annotation(Level::Error.span(span)),
23112311
);
2312-
let renderer = Renderer::styled().term_width(
2313-
gctx.shell()
2314-
.err_width()
2315-
.diagnostic_terminal_width()
2316-
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH),
2317-
);
2318-
if let Err(err) = writeln!(gctx.shell().err(), "{}", renderer.render(message)) {
2312+
if let Err(err) = gctx.shell().emit_diagnostic(message) {
23192313
return err.into();
23202314
}
23212315
return AlreadyPrintedError::new(e.into()).into();

0 commit comments

Comments
 (0)