Skip to content

Commit 5bb56cd

Browse files
authored
Convert a multi-part diagnostic to a report (#16035)
### What does this PR try to resolve? This converts a `shell.warn()` followed by several `shell.note()`s into a single `shell.print_report()`. This is just to check whether I correctly understood the conversation in office hours. If so, I can do a bunch more of these.
2 parents 56bdf49 + e845e62 commit 5bb56cd

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

src/cargo/core/workspace.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::collections::{BTreeMap, BTreeSet, HashSet};
44
use std::path::{Path, PathBuf};
55
use std::rc::Rc;
66

7+
use annotate_snippets::Level;
78
use anyhow::{Context as _, anyhow, bail};
89
use glob::glob;
910
use itertools::Itertools;
@@ -1138,18 +1139,18 @@ impl<'gctx> Workspace<'gctx> {
11381139
.max()
11391140
{
11401141
let resolver = edition.default_resolve_behavior().to_manifest();
1141-
self.gctx.shell().warn(format_args!(
1142-
"virtual workspace defaulting to `resolver = \"1\"` despite one or more workspace members being on edition {edition} which implies `resolver = \"{resolver}\"`"
1143-
))?;
1144-
self.gctx.shell().note(
1145-
"to keep the current resolver, specify `workspace.resolver = \"1\"` in the workspace root's manifest",
1146-
)?;
1147-
self.gctx.shell().note(format_args!(
1148-
"to use the edition {edition} resolver, specify `workspace.resolver = \"{resolver}\"` in the workspace root's manifest"
1149-
))?;
1150-
self.gctx.shell().note(
1151-
"for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions",
1152-
)?;
1142+
let report = &[Level::WARNING
1143+
.primary_title(format!(
1144+
"virtual workspace defaulting to `resolver = \"1\"` despite one or more workspace members being on edition {edition} which implies `resolver = \"{resolver}\"`"
1145+
))
1146+
.elements([
1147+
Level::NOTE.message("to keep the current resolver, specify `workspace.resolver = \"1\"` in the workspace root's manifest"),
1148+
Level::NOTE.message(
1149+
format!("to use the edition {edition} resolver, specify `workspace.resolver = \"{resolver}\"` in the workspace root's manifest"),
1150+
),
1151+
Level::NOTE.message("for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions"),
1152+
])];
1153+
self.gctx.shell().print_report(report, false)?;
11531154
}
11541155
}
11551156
}

tests/testsuite/features2.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,9 +1553,10 @@ fn edition_2021_workspace_member() {
15531553

15541554
p.cargo("check").with_stderr_data(str![[r#"
15551555
[WARNING] virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2021 which implies `resolver = "2"`
1556-
[NOTE] to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
1557-
[NOTE] to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest
1558-
[NOTE] for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
1556+
|
1557+
= [NOTE] to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
1558+
= [NOTE] to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest
1559+
= [NOTE] for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
15591560
[CHECKING] a v0.1.0 ([ROOT]/foo/a)
15601561
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
15611562

0 commit comments

Comments
 (0)