diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs index 4e975adc972..62037590853 100644 --- a/src/bootstrap/bin/rustdoc.rs +++ b/src/bootstrap/bin/rustdoc.rs @@ -57,6 +57,10 @@ fn main() { // This "unstable-options" can be removed when `--crate-version` is stabilized cmd.arg("-Z").arg("unstable-options") .arg("--crate-version").arg(version); + + // While we can assume that `-Z unstable-options` is set, let's also force rustdoc to panic + // if pulldown rendering differences are found + cmd.arg("--deny-render-differences"); } std::process::exit(match cmd.status() { diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 3be44f30958..afbaf037c7d 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -495,7 +495,8 @@ pub fn run(mut krate: clean::Crate, css_file_extension: Option, renderinfo: RenderInfo, render_type: RenderType, - sort_modules_alphabetically: bool) -> Result<(), Error> { + sort_modules_alphabetically: bool, + deny_render_differences: bool) -> Result<(), Error> { let src_root = match krate.src { FileName::Real(ref p) => match p.parent() { Some(p) => p.to_path_buf(), @@ -659,6 +660,11 @@ pub fn run(mut krate: clean::Crate, render_difference(d, &mut intro_msg, span, text); } } + + if deny_render_differences { + println!("Aborting with {} rendering differences", markdown_warnings.len()); + ::std::process::exit(1); + } } result diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 7ebacdec1f0..1740816ef6b 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -257,6 +257,10 @@ pub fn opts() -> Vec { o.optflag("", "sort-modules-by-appearance", "sort modules by where they appear in the \ program, rather than alphabetically") }), + unstable("deny-render-differences", |o| { + o.optflag("", "deny-render-differences", "abort doc runs when markdown rendering \ + differences are found") + }), ] } @@ -393,6 +397,7 @@ pub fn main_args(args: &[String]) -> isize { } let output_format = matches.opt_str("w"); + let deny_render_differences = matches.opt_present("deny-render-differences"); let res = acquire_input(PathBuf::from(input), externs, &matches, move |out| { let Output { krate, passes, renderinfo } = out; info!("going to format"); @@ -404,7 +409,8 @@ pub fn main_args(args: &[String]) -> isize { css_file_extension, renderinfo, render_type, - sort_modules_alphabetically) + sort_modules_alphabetically, + deny_render_differences) .expect("failed to generate documentation"); 0 }