From 1fbabc622f1791dbbddf2ab5cda7c392a21d94ba Mon Sep 17 00:00:00 2001 From: Zalathar Date: Sat, 4 May 2024 18:30:06 +1000 Subject: [PATCH] Include the line number in tidy's `iter_header` --- src/tools/tidy/src/iter_header.rs | 7 ++++--- src/tools/tidy/src/target_specific_tests.rs | 2 +- .../tidy/src/tests_revision_unpaired_stdout_stderr.rs | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/tools/tidy/src/iter_header.rs b/src/tools/tidy/src/iter_header.rs index ae635904607..684c789039f 100644 --- a/src/tools/tidy/src/iter_header.rs +++ b/src/tools/tidy/src/iter_header.rs @@ -3,6 +3,7 @@ const COMMENT: &str = "//@"; /// A header line, like `//@name: value` consists of the prefix `//@` and the directive /// `name: value`. It is also possibly revisioned, e.g. `//@[revision] name: value`. pub(crate) struct HeaderLine<'ln> { + pub(crate) line_number: usize, pub(crate) revision: Option<&'ln str>, pub(crate) directive: &'ln str, } @@ -11,7 +12,7 @@ pub(crate) struct HeaderLine<'ln> { /// /// Adjusted from compiletest/src/header.rs. pub(crate) fn iter_header<'ln>(contents: &'ln str, it: &mut dyn FnMut(HeaderLine<'ln>)) { - for ln in contents.lines() { + for (line_number, ln) in (1..).zip(contents.lines()) { let ln = ln.trim(); // We're left with potentially `[rev]name: value`. @@ -24,9 +25,9 @@ pub(crate) fn iter_header<'ln>(contents: &'ln str, it: &mut dyn FnMut(HeaderLine panic!("malformed revision directive: expected `//@[rev]`, found `{ln}`"); }; // We trimmed off the `[rev]` portion, left with `name: value`. - it(HeaderLine { revision: Some(revision), directive: remainder.trim() }); + it(HeaderLine { line_number, revision: Some(revision), directive: remainder.trim() }); } else { - it(HeaderLine { revision: None, directive: remainder.trim() }); + it(HeaderLine { line_number, revision: None, directive: remainder.trim() }); } } } diff --git a/src/tools/tidy/src/target_specific_tests.rs b/src/tools/tidy/src/target_specific_tests.rs index cb242bff05d..c876aae494d 100644 --- a/src/tools/tidy/src/target_specific_tests.rs +++ b/src/tools/tidy/src/target_specific_tests.rs @@ -20,7 +20,7 @@ pub fn check(path: &Path, bad: &mut bool) { crate::walk::walk(path, |path, _is_dir| filter_not_rust(path), &mut |entry, content| { let file = entry.path().display(); let mut header_map = BTreeMap::new(); - iter_header(content, &mut |HeaderLine { revision, directive }| { + iter_header(content, &mut |HeaderLine { revision, directive, .. }| { if let Some(value) = directive.strip_prefix(LLVM_COMPONENTS_HEADER) { let info = header_map.entry(revision).or_insert(RevisionInfo::default()); let comp_vec = info.llvm_components.get_or_insert(Vec::new()); diff --git a/src/tools/tidy/src/tests_revision_unpaired_stdout_stderr.rs b/src/tools/tidy/src/tests_revision_unpaired_stdout_stderr.rs index a0773c85bef..00edf99a30d 100644 --- a/src/tools/tidy/src/tests_revision_unpaired_stdout_stderr.rs +++ b/src/tools/tidy/src/tests_revision_unpaired_stdout_stderr.rs @@ -61,7 +61,7 @@ pub fn check(tests_path: impl AsRef, bad: &mut bool) { let contents = std::fs::read_to_string(test).unwrap(); // Collect directives. - iter_header(&contents, &mut |HeaderLine { revision, directive }| { + iter_header(&contents, &mut |HeaderLine { revision, directive, .. }| { // We're trying to *find* `//@ revision: xxx` directives themselves, not revisioned // directives. if revision.is_some() {