Move error code explanation removal check into tidy

This commit is contained in:
Guillaume Gomez 2025-06-21 16:14:52 +02:00
parent 66060e6475
commit 4780f21fe5
5 changed files with 32 additions and 25 deletions

View file

@ -39,7 +39,6 @@ RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-require
COPY host-x86_64/mingw-check-1/check-default-config-profiles.sh /scripts/
COPY host-x86_64/mingw-check-1/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check-1/validate-error-codes.sh /scripts/
# Check library crates on all tier 1 targets.
# We disable optimized compiler built-ins because that requires a C toolchain for the target.
@ -52,7 +51,6 @@ ENV SCRIPT \
python3 ../x.py check --stage 1 --target=i686-pc-windows-gnu --host=i686-pc-windows-gnu && \
python3 ../x.py check --stage 1 --set build.optimized-compiler-builtins=false core alloc std --target=aarch64-unknown-linux-gnu,i686-pc-windows-msvc,i686-unknown-linux-gnu,x86_64-apple-darwin,x86_64-pc-windows-gnu,x86_64-pc-windows-msvc && \
/scripts/validate-toolstate.sh && \
/scripts/validate-error-codes.sh && \
reuse --include-submodules lint && \
python3 ../x.py test collect-license-metadata && \
# Runs checks to ensure that there are no issues in our JS code.

View file

@ -1,20 +0,0 @@
#!/bin/bash
# Checks that no error code explanation is removed.
set -eo pipefail
if [[ -z "$BASE_COMMIT" ]]; then
echo "not checking error code explanations removal"
exit 0
fi
echo "Check if an error code explanation was removed..."
if (git diff "$BASE_COMMIT" --name-status | grep '^D' \
| grep --quiet "compiler/rustc_error_codes/src/error_codes/"); then
echo "Error code explanations should never be removed!"
echo "Take a look at E0001 to see how to handle it."
exit 1
fi
echo "No error code explanation was removed!"

View file

@ -39,7 +39,6 @@ RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-require
&& pip3 install virtualenv
COPY host-x86_64/mingw-check-1/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check-1/validate-error-codes.sh /scripts/
RUN bash -c 'npm install -g eslint@$(cat /tmp/eslint.version)'

View file

@ -43,9 +43,18 @@ macro_rules! verbose_print {
};
}
pub fn check(root_path: &Path, search_paths: &[&Path], verbose: bool, bad: &mut bool) {
pub fn check(
root_path: &Path,
search_paths: &[&Path],
verbose: bool,
ci_info: &crate::CiInfo,
bad: &mut bool,
) {
let mut errors = Vec::new();
// Check that no error code explanation was removed.
check_removed_error_code_explanation(ci_info, bad);
// Stage 1: create list
let error_codes = extract_error_codes(root_path, &mut errors);
if verbose {
@ -68,6 +77,27 @@ pub fn check(root_path: &Path, search_paths: &[&Path], verbose: bool, bad: &mut
}
}
fn check_removed_error_code_explanation(ci_info: &crate::CiInfo, bad: &mut bool) {
let Some(base_commit) = &ci_info.base_commit else {
eprintln!("Skipping error code explanation removal check");
return;
};
let Some(diff) = crate::git_diff(base_commit, "--name-status") else {
*bad = true;
eprintln!("removed error code explanation tidy check: Failed to run git diff");
return;
};
if diff.lines().any(|line| {
line.starts_with('D') && line.contains("compiler/rustc_error_codes/src/error_codes/")
}) {
*bad = true;
eprintln!("tidy check error: Error code explanations should never be removed!");
eprintln!("Take a look at E0001 to see how to handle it.");
return;
}
println!("No error code explanation was removed!");
}
/// Stage 1: Parses a list of error codes from `error_codes.rs`.
fn extract_error_codes(root_path: &Path, errors: &mut Vec<String>) -> Vec<String> {
let path = root_path.join(Path::new(ERROR_CODES_PATH));

View file

@ -117,7 +117,7 @@ fn main() {
check!(unknown_revision, &tests_path);
// Checks that only make sense for the compiler.
check!(error_codes, &root_path, &[&compiler_path, &librustdoc_path], verbose);
check!(error_codes, &root_path, &[&compiler_path, &librustdoc_path], verbose, &ci_info);
check!(fluent_alphabetical, &compiler_path, bless);
check!(fluent_period, &compiler_path);
check!(target_policy, &root_path);