for &name in passes::DEFAULT_PASSES {
println!("{:>20}", name);
}
+ println!("\nPasses run with `--document-private-items`:");
+ for &name in passes::DEFAULT_PRIVATE_PASSES {
+ println!("{:>20}", name);
+ }
return 0;
}
where R: 'static + Send,
F: 'static + Send + FnOnce(Output) -> R
{
- let mut default_passes = !matches.opt_present("no-defaults");
- let mut passes = matches.opt_strs("passes");
- let mut plugins = matches.opt_strs("plugins");
-
- // We hardcode in the passes here, as this is a new flag and we
- // are generally deprecating passes.
- if matches.opt_present("document-private-items") {
- default_passes = false;
+ let mut default_passes = if matches.opt_present("no-defaults") {
+ passes::DefaultPassOption::None
+ } else if matches.opt_present("document-private-items") {
+ passes::DefaultPassOption::Private
+ } else {
+ passes::DefaultPassOption::Default
+ };
- passes = vec![
- String::from("collapse-docs"),
- String::from("unindent-comments"),
- ];
- }
+ let mut manual_passes = matches.opt_strs("passes");
+ let mut plugins = matches.opt_strs("plugins");
// First, parse the crate and extract all relevant information.
let mut paths = SearchPaths::new();
if attr.is_word() {
if name == Some("no_default_passes") {
report_deprecated_attr("no_default_passes", &diag);
- default_passes = false;
+ if default_passes == passes::DefaultPassOption::Default {
+ default_passes = passes::DefaultPassOption::None;
+ }
}
} else if let Some(value) = attr.value_str() {
let sink = match name {
Some("passes") => {
report_deprecated_attr("passes = \"...\"", &diag);
- &mut passes
+ &mut manual_passes
},
Some("plugins") => {
report_deprecated_attr("plugins = \"...\"", &diag);
}
if attr.is_word() && name == Some("document_private_items") {
- default_passes = false;
-
- passes = vec![
- String::from("collapse-docs"),
- String::from("unindent-comments"),
- ];
+ if default_passes == passes::DefaultPassOption::Default {
+ default_passes = passes::DefaultPassOption::Private;
+ }
}
}
- if default_passes {
- for name in passes::DEFAULT_PASSES.iter().rev() {
- passes.insert(0, name.to_string());
- }
- }
+ let mut passes: Vec<String> =
+ passes::defaults(default_passes).iter().map(|p| p.to_string()).collect();
+ passes.extend(manual_passes);
if !plugins.is_empty() {
eprintln!("WARNING: --plugins no longer functions; see CVE-2018-1000622");
"propagate-doc-cfg",
];
+pub const DEFAULT_PRIVATE_PASSES: &'static [&'static str] = &[
+ "strip-priv-imports",
+ "collapse-docs",
+ "unindent-comments",
+ "propagate-doc-cfg",
+];
+
+#[derive(Copy, Clone, PartialEq, Eq, Debug)]
+pub enum DefaultPassOption {
+ Default,
+ Private,
+ None,
+}
+
+pub fn defaults(default_set: DefaultPassOption) -> &'static [&'static str] {
+ match default_set {
+ DefaultPassOption::Default => {
+ DEFAULT_PASSES
+ },
+ DefaultPassOption::Private => {
+ DEFAULT_PRIVATE_PASSES
+ },
+ DefaultPassOption::None => {
+ &[]
+ },
+ }
+}
struct Stripper<'a> {
retained: &'a mut DefIdSet,