Skip to content

Commit 3760c91

Browse files
Make write_rustdoc_diff a more generic function
1 parent 2a57a46 commit 3760c91

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

src/tools/compiletest/src/compute_diff.rs

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::collections::VecDeque;
2+
use std::fs::{File, FileType};
23
use std::path::Path;
34

45
#[derive(Debug, PartialEq)]
@@ -106,23 +107,26 @@ pub(crate) fn write_diff(expected: &str, actual: &str, context_size: usize) -> S
106107
output
107108
}
108109

110+
/// Filters based on filetype and extension whether to diff a file.
111+
///
109112
/// Returns whether any data was actually written.
110-
pub(crate) fn write_rustdoc_diff(
113+
pub(crate) fn write_filtered_diff<Filter>(
111114
diff_filename: &str,
112115
out_dir: &Path,
113116
compare_dir: &Path,
114117
verbose: bool,
115-
) -> bool {
116-
use std::fs::File;
118+
filter: Filter,
119+
) -> bool
120+
where
121+
Filter: Fn(FileType, Option<&str>) -> bool,
122+
{
117123
use std::io::{Read, Write};
118124
let mut diff_output = File::create(diff_filename).unwrap();
119125
let mut wrote_data = false;
120126
for entry in walkdir::WalkDir::new(out_dir) {
121127
let entry = entry.expect("failed to read file");
122128
let extension = entry.path().extension().and_then(|p| p.to_str());
123-
if entry.file_type().is_file()
124-
&& (extension == Some("html".into()) || extension == Some("js".into()))
125-
{
129+
if filter(entry.file_type(), extension) {
126130
let expected_path = compare_dir.join(entry.path().strip_prefix(&out_dir).unwrap());
127131
let expected = if let Ok(s) = std::fs::read(&expected_path) { s } else { continue };
128132
let actual_path = entry.path();

src/tools/compiletest/src/runtest.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::common::{CompareMode, FailMode, PassMode};
88
use crate::common::{Config, TestPaths};
99
use crate::common::{Pretty, RunPassValgrind};
1010
use crate::common::{UI_RUN_STDERR, UI_RUN_STDOUT};
11-
use crate::compute_diff::{write_diff, write_rustdoc_diff};
11+
use crate::compute_diff::{write_diff, write_filtered_diff};
1212
use crate::errors::{self, Error, ErrorKind};
1313
use crate::header::TestProps;
1414
use crate::json;
@@ -2403,7 +2403,16 @@ impl<'test> TestCx<'test> {
24032403

24042404
let diff_filename = format!("build/tmp/rustdoc-compare-{}.diff", std::process::id());
24052405

2406-
if !write_rustdoc_diff(&diff_filename, out_dir, &compare_dir, self.config.verbose) {
2406+
if !write_filtered_diff(
2407+
&diff_filename,
2408+
out_dir,
2409+
&compare_dir,
2410+
self.config.verbose,
2411+
|file_type, extension| {
2412+
file_type.is_file()
2413+
&& (extension == Some("html".into()) || extension == Some("js".into()))
2414+
},
2415+
) {
24072416
return;
24082417
}
24092418

0 commit comments

Comments
 (0)