Skip to content

Commit

Permalink
Add nightly check on rustdoc --extend-css option
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Apr 4, 2016
1 parent ab835a1 commit f34ae3f
Showing 1 changed file with 35 additions and 1 deletion.
36 changes: 35 additions & 1 deletion src/librustdoc/lib.rs
Expand Up @@ -65,8 +65,10 @@ use std::sync::mpsc::channel;
use externalfiles::ExternalHtml;
use serialize::Decodable;
use serialize::json::{self, Json};
use rustc::session::early_error;
use rustc::session::search_paths::SearchPaths;
use rustc::session::config::ErrorOutputType;
use rustc::session::config::{get_unstable_features_setting, ErrorOutputType};
use syntax::feature_gate::UnstableFeatures;

// reexported from `clean` so it can be easily updated with the mod itself
pub use clean::SCHEMA_VERSION;
Expand Down Expand Up @@ -189,6 +191,7 @@ pub fn opts() -> Vec<getopts::OptGroup> {
optopt("e", "extend-css",
"to redefine some css rules with a given file to generate doc with your \
own theme", "PATH"),
optmulti("Z", "", "internal and debugging options (only on nightly build)", "FLAG"),
)
}

Expand All @@ -198,6 +201,20 @@ pub fn usage(argv0: &str) {
&opts()));
}

fn check_unstable_flag_enabled(nightly_build: bool, has_z_unstable_options: bool,
flag_name: &str) {
// check if unstable for --extend-css option
let e = if !nightly_build {
format!("the option `{}` is only accepted on the nightly compiler", flag_name)
} else if !has_z_unstable_options {
format!("the `-Z unstable-options` flag must also be passed to enable the flag `{}`",
flag_name)
} else {
return
};
early_error(ErrorOutputType::default(), &e)
}

pub fn main_args(args: &[String]) -> isize {
let matches = match getopts::getopts(&args[1..], &opts()) {
Ok(m) => m,
Expand Down Expand Up @@ -260,7 +277,24 @@ pub fn main_args(args: &[String]) -> isize {
let css_file_extension = matches.opt_str("e").map(|s| PathBuf::from(&s));
let cfgs = matches.opt_strs("cfg");

// we now check if unstable options are allowed and if we're in a nightly build
let mut has_z_unstable_options = false;
for flag in matches.opt_strs("Z").iter() {
if *flag != "unstable-options" {
println!("Unknown flag for `Z` option: {}", flag);
return 1;
} else {
has_z_unstable_options = true;
}
}
let nightly_build = get_unstable_features_setting();
let nightly_build = match nightly_build {
UnstableFeatures::Allow | UnstableFeatures::Cheat => true,
_ => false,
};

if let Some(ref p) = css_file_extension {
check_unstable_flag_enabled(nightly_build, has_z_unstable_options, "extend-css");
if !p.is_file() {
println!("{}", "--extend-css option must take a css file as input");
return 1;
Expand Down

0 comments on commit f34ae3f

Please sign in to comment.