use marker_api::{common::MacroReport, Lint};
use super::RustcConverter;
impl<'ast, 'tcx> RustcConverter<'ast, 'tcx> {
#[must_use]
pub fn to_lint(&self, api_lint: &'static Lint) -> &'static rustc_lint::Lint {
Self::static_to_lint(api_lint)
}
#[must_use]
pub fn static_to_lint(api_lint: &'static Lint) -> &'static rustc_lint::Lint {
super::LINTS_MAP.with(|lints| {
let lint: &'static rustc_lint::Lint = lints.borrow_mut().entry(api_lint).or_insert_with(move || {
let report_in_external_macro = match api_lint.report_in_macro {
MacroReport::No => false,
MacroReport::All => true,
_ => unreachable!(),
};
Box::leak(Box::new(rustc_lint::Lint {
name: api_lint.name,
default_level: Self::static_to_lint_level(api_lint.default_level),
desc: api_lint.explanation,
edition_lint_opts: None,
report_in_external_macro,
future_incompatible: None,
is_loaded: true,
feature_gate: None,
crate_level_only: false,
}))
});
lint
})
}
}