Skip to content

Commit 8858d71

Browse files
Put back output-format option for show-coverage
1 parent 6af4fd3 commit 8858d71

File tree

4 files changed

+56
-9
lines changed

4 files changed

+56
-9
lines changed

src/librustdoc/config.rs

+51-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::collections::BTreeMap;
22
use std::ffi::OsStr;
3+
use std::convert::TryFrom;
34
use std::fmt;
45
use std::path::PathBuf;
56

@@ -24,6 +25,33 @@ use crate::opts;
2425
use crate::passes::{self, Condition, DefaultPassOption};
2526
use crate::theme;
2627

28+
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
29+
pub enum OutputFormat {
30+
Json,
31+
HTML,
32+
}
33+
34+
impl OutputFormat {
35+
pub fn is_json(&self) -> bool {
36+
match *self {
37+
OutputFormat::Json => true,
38+
_ => false,
39+
}
40+
}
41+
}
42+
43+
impl TryFrom<&str> for OutputFormat {
44+
type Error = String;
45+
46+
fn try_from(value: &str) -> Result<Self, Self::Error> {
47+
match value {
48+
"json" => Ok(OutputFormat::Json),
49+
"html" => Ok(OutputFormat::HTML),
50+
_ => Err(format!("unknown output format `{}`", value)),
51+
}
52+
}
53+
}
54+
2755
/// Configuration options for rustdoc.
2856
#[derive(Clone)]
2957
pub struct Options {
@@ -115,6 +143,8 @@ pub struct Options {
115143
pub crate_version: Option<String>,
116144
/// Collected options specific to outputting final pages.
117145
pub render_options: RenderOptions,
146+
/// Output format rendering (used only for "show-coverage" option for the moment)
147+
pub output_format: Option<OutputFormat>,
118148
}
119149

120150
impl fmt::Debug for Options {
@@ -425,14 +455,6 @@ impl Options {
425455
}
426456
}
427457

428-
match matches.opt_str("w").as_ref().map(|s| &**s) {
429-
Some("html") | None => {}
430-
Some(s) => {
431-
diag.struct_err(&format!("unknown output format: {}", s)).emit();
432-
return Err(1);
433-
}
434-
}
435-
436458
let index_page = matches.opt_str("index-page").map(|s| PathBuf::from(&s));
437459
if let Some(ref index_page) = index_page {
438460
if !index_page.is_file() {
@@ -469,6 +491,23 @@ impl Options {
469491
}
470492
};
471493

494+
let output_format = match matches.opt_str("output-format") {
495+
Some(s) => match OutputFormat::try_from(s.as_str()) {
496+
Ok(o) => {
497+
if o.is_json() && !show_coverage {
498+
diag.struct_err("json output format isn't supported for doc generation")
499+
.emit();
500+
return Err(1);
501+
}
502+
Some(o)
503+
}
504+
Err(e) => {
505+
diag.struct_err(&e).emit();
506+
return Err(1);
507+
}
508+
}
509+
None => None,
510+
};
472511
let crate_name = matches.opt_str("crate-name");
473512
let proc_macro_crate = crate_types.contains(&CrateType::ProcMacro);
474513
let playground_url = matches.opt_str("playground-url");
@@ -553,6 +592,7 @@ impl Options {
553592
generate_search_filter,
554593
generate_redirect_pages,
555594
},
595+
output_format,
556596
})
557597
}
558598

@@ -568,6 +608,9 @@ fn check_deprecated_options(matches: &getopts::Matches, diag: &rustc_errors::Han
568608

569609
for flag in deprecated_flags.iter() {
570610
if matches.opt_present(flag) {
611+
if *flag == "output-format" && matches.opt_present("show-coverage") {
612+
continue;
613+
}
571614
let mut err =
572615
diag.struct_warn(&format!("the '{}' flag is considered deprecated", flag));
573616
err.warn(

src/librustdoc/core.rs

+2
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
228228
mut manual_passes,
229229
display_warnings,
230230
render_options,
231+
output_format,
231232
..
232233
} = options;
233234

@@ -385,6 +386,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
385386

386387
let mut renderinfo = RenderInfo::default();
387388
renderinfo.access_levels = access_levels;
389+
renderinfo.output_format = output_format;
388390

389391
let mut ctxt = DocContext {
390392
tcx,

src/librustdoc/html/render.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ use serde::ser::SerializeSeq;
6060
use serde::{Serialize, Serializer};
6161

6262
use crate::clean::{self, AttributesExt, Deprecation, GetDefId, SelfTy};
63-
use crate::config::RenderOptions;
63+
use crate::config::{OutputFormat, RenderOptions};
6464
use crate::docfs::{DocFS, ErrorStorage, PathError};
6565
use crate::doctree;
6666
use crate::html::escape::Escape;
@@ -270,6 +270,7 @@ pub struct RenderInfo {
270270
pub deref_trait_did: Option<DefId>,
271271
pub deref_mut_trait_did: Option<DefId>,
272272
pub owned_box_did: Option<DefId>,
273+
pub output_format: Option<OutputFormat>,
273274
}
274275

275276
// Helper structs for rendering items/sidebars and carrying along contextual

src/librustdoc/html/render/cache.rs

+1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ impl Cache {
139139
deref_trait_did,
140140
deref_mut_trait_did,
141141
owned_box_did,
142+
..
142143
} = renderinfo;
143144

144145
let external_paths =

0 commit comments

Comments
 (0)