Skip to content

Commit 494c353

Browse files
committed
Add CI step to prevent new untranslatable diagnostics being added to CI
1 parent eac3558 commit 494c353

File tree

7 files changed

+85
-7
lines changed

7 files changed

+85
-7
lines changed

Cargo.lock

+14-6
Original file line numberDiff line numberDiff line change
@@ -4434,18 +4434,18 @@ dependencies = [
44344434

44354435
[[package]]
44364436
name = "serde"
4437-
version = "1.0.159"
4437+
version = "1.0.160"
44384438
source = "registry+https://github.com/rust-lang/crates.io-index"
4439-
checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
4439+
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
44404440
dependencies = [
44414441
"serde_derive",
44424442
]
44434443

44444444
[[package]]
44454445
name = "serde_derive"
4446-
version = "1.0.159"
4446+
version = "1.0.160"
44474447
source = "registry+https://github.com/rust-lang/crates.io-index"
4448-
checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
4448+
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
44494449
dependencies = [
44504450
"proc-macro2",
44514451
"quote",
@@ -4454,9 +4454,9 @@ dependencies = [
44544454

44554455
[[package]]
44564456
name = "serde_json"
4457-
version = "1.0.85"
4457+
version = "1.0.96"
44584458
source = "registry+https://github.com/rust-lang/crates.io-index"
4459-
checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
4459+
checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
44604460
dependencies = [
44614461
"indexmap",
44624462
"itoa",
@@ -5059,6 +5059,14 @@ dependencies = [
50595059
"tracing-subscriber",
50605060
]
50615061

5062+
[[package]]
5063+
name = "translatable-limits"
5064+
version = "0.1.0"
5065+
dependencies = [
5066+
"serde",
5067+
"serde_json",
5068+
]
5069+
50625070
[[package]]
50635071
name = "twox-hash"
50645072
version = "1.6.3"

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ members = [
3939
"src/tools/collect-license-metadata",
4040
"src/tools/generate-copyright",
4141
"src/tools/suggest-tests",
42+
"src/tools/translatable-limits",
4243
]
4344

4445
exclude = [

src/bootstrap/builder.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,8 @@ impl<'a> Builder<'a> {
683683
tool::Miri,
684684
tool::CargoMiri,
685685
llvm::Lld,
686-
llvm::CrtBeginEnd
686+
llvm::CrtBeginEnd,
687+
tool::TranslatableLimits,
687688
),
688689
Kind::Check | Kind::Clippy | Kind::Fix => describe!(
689690
check::Std,

src/bootstrap/tool.rs

+1
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ bootstrap_tool!(
301301
CollectLicenseMetadata, "src/tools/collect-license-metadata", "collect-license-metadata";
302302
GenerateCopyright, "src/tools/generate-copyright", "generate-copyright";
303303
SuggestTests, "src/tools/suggest-tests", "suggest-tests";
304+
TranslatableLimits, "src/tools/translatable-limits", "translatable-limits";
304305
);
305306

306307
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]

src/ci/docker/host-x86_64/mingw-check/Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ ENV SCRIPT python3 ../x.py --stage 2 test src/tools/expand-yaml-anchors && \
4444
python3 ../x.py build --stage 0 src/tools/build-manifest && \
4545
python3 ../x.py test --stage 0 src/tools/compiletest && \
4646
python3 ../x.py test --stage 0 core alloc std test proc_macro && \
47+
python3 ../x.py b translatable-limits && /checkout/obj/build/host/stage0-tools-bin/translatable-limits ../x.py && \
4748
# Build both public and internal documentation.
4849
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 0 compiler && \
4950
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 0 library/test && \
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "translatable-limits"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
serde = { version = "1.0.160", features = ["derive"] }
10+
serde_json = "1.0.96"
+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use serde::{self, Deserialize};
2+
use std::collections::HashSet;
3+
use std::process::Command;
4+
const TRANSLATABLE_LIMIT: usize = 902;
5+
6+
#[derive(Deserialize)]
7+
struct CompilerMessage {
8+
message: CompilerMessageMessage,
9+
}
10+
11+
#[derive(Deserialize)]
12+
struct CompilerMessageMessage {
13+
spans: Vec<Span>,
14+
}
15+
16+
#[derive(Deserialize)]
17+
struct Span {
18+
expansion: Option<Box<Expansion>>,
19+
file_name: String,
20+
line_start: usize,
21+
}
22+
23+
#[derive(Deserialize)]
24+
struct Expansion {
25+
span: Span,
26+
}
27+
28+
fn main() {
29+
let Some(x_path) = std::env::args().skip(1).next() else {
30+
panic!("Usage: translatable-limits <x.py path>")
31+
};
32+
let output = Command::new(x_path)
33+
.args(["check", "compiler", "--json-output", "--warnings", "warn"])
34+
.env("RUSTFLAGS_BOOTSTRAP", "-Wrustc::untranslatable_diagnostic")
35+
.output()
36+
.expect("executing rustc")
37+
.stdout;
38+
let stdout = String::from_utf8(output).expect("non-utf8 output");
39+
let messages = stdout
40+
.lines()
41+
.filter(|l| l.starts_with('{'))
42+
.filter_map(|msg| serde_json::from_str::<CompilerMessage>(&msg).ok())
43+
.filter_map(|msg| {
44+
let mut sp = msg.message.spans.get(0)?;
45+
if let Some(exp) = &sp.expansion {
46+
sp = &exp.span
47+
}
48+
Some((sp.file_name.clone(), sp.line_start))
49+
})
50+
.collect::<HashSet<_>>();
51+
52+
assert!(messages.len() <= TRANSLATABLE_LIMIT, "Newly added diagnostics should be translatable");
53+
if messages.len() < TRANSLATABLE_LIMIT {
54+
println!("Limit can be lowered to {}", messages.len());
55+
}
56+
}

0 commit comments

Comments
 (0)