Skip to content

Commit 1601b6e

Browse files
committed
refactor: Move Renderer creation to GlobalContext
1 parent 9d8b1a3 commit 1601b6e

File tree

3 files changed

+25
-30
lines changed

3 files changed

+25
-30
lines changed

src/cargo/util/context/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
//! desired type.
5151
5252
use crate::util::cache_lock::{CacheLock, CacheLockMode, CacheLocker};
53+
use annotate_snippets::{Message, Renderer};
5354
use std::borrow::Cow;
5455
use std::cell::{RefCell, RefMut};
5556
use std::collections::hash_map::Entry::{Occupied, Vacant};
@@ -412,6 +413,22 @@ impl GlobalContext {
412413
self.shell.borrow_mut()
413414
}
414415

416+
/// Prints the passed in [Message] to stderr
417+
pub fn renderer_diagnostic(&self, message: Message<'_>) -> std::io::Result<()> {
418+
// We get one mutable borrow of the shell here, to avoid borrowing
419+
// it twice, which results in a panic
420+
let mut shell = self.shell();
421+
let term_width = shell
422+
.err_width()
423+
.diagnostic_terminal_width()
424+
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH);
425+
writeln!(
426+
shell.err(),
427+
"{}",
428+
Renderer::styled().term_width(term_width).render(message)
429+
)
430+
}
431+
415432
/// Gets the path to the `rustdoc` executable.
416433
pub fn rustdoc(&self) -> CargoResult<&Path> {
417434
self.rustdoc

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.renderer_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.renderer_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.renderer_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.renderer_diagnostic(message) {
23192313
return err.into();
23202314
}
23212315
return AlreadyPrintedError::new(e.into()).into();

0 commit comments

Comments
 (0)