use rustc_metadata::cstore::CStore;
use rustc_target::spec::TargetTriple;
-use syntax::ast::NodeId;
+use syntax::ast::{Name, NodeId};
use syntax::codemap;
use syntax::edition::Edition;
use syntax::feature_gate::UnstableFeatures;
pub fake_def_ids: RefCell<FxHashMap<CrateNum, DefId>>,
pub all_fake_def_ids: RefCell<FxHashSet<DefId>>,
/// Maps (type_id, trait_id) -> auto trait impl
- pub generated_synthetics: RefCell<FxHashSet<(DefId, DefId)>>
+ pub generated_synthetics: RefCell<FxHashSet<(DefId, DefId)>>,
+ pub current_item_name: RefCell<Option<Name>>,
}
impl<'a, 'tcx, 'rcx> DocContext<'a, 'tcx, 'rcx> {
errors::HandlerFlags {
can_emit_warnings: true,
treat_err_as_bug: false,
+ report_delayed_bugs: false,
external_macro_backtrace: false,
..Default::default()
},
force_unstable_if_unmarked: bool,
edition: Edition,
cg: CodegenOptions,
- error_format: ErrorOutputType) -> (clean::Crate, RenderInfo)
+ error_format: ErrorOutputType,
+ cmd_lints: Vec<(String, lint::Level)>,
+ lint_cap: Option<lint::Level>,
+ describe_lints: bool) -> (clean::Crate, RenderInfo)
{
// Parse, resolve, and typecheck the given crate.
let intra_link_resolution_failure_name = lint::builtin::INTRA_DOC_LINK_RESOLUTION_FAILURE.name;
let warnings_lint_name = lint::builtin::WARNINGS.name;
let missing_docs = rustc_lint::builtin::MISSING_DOCS.name;
+
+ // In addition to those specific lints, we also need to whitelist those given through
+ // command line, otherwise they'll get ignored and we don't want that.
+ let mut whitelisted_lints = vec![warnings_lint_name.to_owned(),
+ intra_link_resolution_failure_name.to_owned(),
+ missing_docs.to_owned()];
+
+ for (lint, _) in &cmd_lints {
+ whitelisted_lints.push(lint.clone());
+ }
+
let lints = lint::builtin::HardwiredLints.get_lints()
.into_iter()
.chain(rustc_lint::SoftLints.get_lints().into_iter())
Some((lint.name_lower(), lint::Allow))
}
})
+ .chain(cmd_lints.into_iter())
.collect::<Vec<_>>();
let host_triple = TargetTriple::from_triple(config::host_triple());
} else {
vec![]
},
- lint_cap: Some(lint::Forbid),
+ lint_cap: Some(lint_cap.unwrap_or_else(|| lint::Forbid)),
cg,
externs,
target_triple: triple.unwrap_or(host_triple),
},
error_format,
edition,
+ describe_lints,
..config::basic_options()
};
driver::spawn_thread_pool(sessopts, move |sessopts| {
.filter_map(|lint| {
// We don't want to whitelist *all* lints so let's
// ignore those ones.
- if lint.name == warnings_lint_name ||
- lint.name == intra_link_resolution_failure_name ||
- lint.name == missing_docs {
+ if whitelisted_lints.iter().any(|l| &lint.name == l) {
None
} else {
Some(lint)
fake_def_ids: RefCell::new(FxHashMap()),
all_fake_def_ids: RefCell::new(FxHashSet()),
generated_synthetics: RefCell::new(FxHashSet()),
+ current_item_name: RefCell::new(None),
};
debug!("crate: {:?}", tcx.hir.krate());