Skip to content

Commit 73f7796

Browse files
committed
refactor: Move Renderer creation to GlobalContext
1 parent 9d8b1a3 commit 73f7796

File tree

3 files changed

+21
-30
lines changed

3 files changed

+21
-30
lines changed

src/cargo/util/context/mod.rs

Lines changed: 15 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::Renderer;
5354
use std::borrow::Cow;
5455
use std::cell::{RefCell, RefMut};
5556
use std::collections::hash_map::Entry::{Occupied, Vacant};
@@ -251,6 +252,8 @@ pub struct GlobalContext {
251252
/// A cache of modifications to make to [`GlobalContext::global_cache_tracker`],
252253
/// saved to disk in a batch to improve performance.
253254
deferred_global_last_use: LazyCell<RefCell<DeferredGlobalLastUse>>,
255+
/// The renderer to use for outputting diagnostics.
256+
renderer: Renderer,
254257
}
255258

256259
impl GlobalContext {
@@ -281,6 +284,13 @@ impl GlobalContext {
281284
_ => true,
282285
};
283286

287+
let renderer = Renderer::styled().term_width(
288+
shell
289+
.err_width()
290+
.diagnostic_terminal_width()
291+
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH),
292+
);
293+
284294
GlobalContext {
285295
home_path: Filesystem::new(homedir),
286296
shell: RefCell::new(shell),
@@ -326,6 +336,7 @@ impl GlobalContext {
326336
ws_roots: RefCell::new(HashMap::new()),
327337
global_cache_tracker: LazyCell::new(),
328338
deferred_global_last_use: LazyCell::new(),
339+
renderer,
329340
}
330341
}
331342

@@ -412,6 +423,10 @@ impl GlobalContext {
412423
self.shell.borrow_mut()
413424
}
414425

426+
pub fn renderer(&self) -> &Renderer {
427+
&self.renderer
428+
}
429+
415430
/// Gets the path to the `rustdoc` executable.
416431
pub fn rustdoc(&self) -> CargoResult<&Path> {
417432
self.rustdoc

src/cargo/util/lints.rs

Lines changed: 4 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,7 @@ 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+
writeln!(gctx.shell().err(), "{}", gctx.renderer().render(message))?;
280274
}
281275
Ok(())
282276
}
@@ -367,13 +361,7 @@ pub fn check_implicit_features(
367361
));
368362
message = message.footer(Level::Note.title(emitted_source.as_ref().unwrap()));
369363
}
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))?;
364+
writeln!(gctx.shell().err(), "{}", gctx.renderer().render(message))?;
377365
}
378366
Ok(())
379367
}
@@ -476,13 +464,7 @@ pub fn unused_dependencies(
476464
"remove the dependency or activate it in a feature with `dep:{name}`"
477465
);
478466
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))?;
467+
writeln!(gctx.shell().err(), "{}", gctx.renderer().render(message))?;
486468
}
487469
}
488470
}

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) = writeln!(gctx.shell().err(), "{}", gctx.renderer().render(message)) {
23192313
return err.into();
23202314
}
23212315
return AlreadyPrintedError::new(e.into()).into();

0 commit comments

Comments
 (0)